Главная страница

Лабораторная работа 4. Функции. Файлы. Лабораторная работа Функции. Файлы Часть Процедуры и функции в Python


Скачать 410.29 Kb.
НазваниеЛабораторная работа Функции. Файлы Часть Процедуры и функции в Python
Дата08.06.2022
Размер410.29 Kb.
Формат файлаpdf
Имя файлаЛабораторная работа 4. Функции. Файлы.pdf
ТипЛабораторная работа
#578320

Лабораторная работа 4. Функции. Файлы
Часть 1. Процедуры и функции в Python
Подпрограмма - это именованный фрагмент программы, к которому можно обратиться из другого места программы
Подпрограммы делятся на две категории: процедуры и функции.
1. Процедуры.
Рассмотрим синтаксис процедуры: def имя процедуры(Список параметров):
Система команд
Для определения процедуры используется ключевое слово def, затем указывается имя процедуры и в скобках её формальные параметры, если они присутствуют. После ставится двоеточие и со следующей строки с отступом в 4 пробела указываются команды.
Процедура — вспомогательный алгоритм, выполняющий некоторые действия.
Процедура должна быть определена к моменту её вызова. Определение процедуры начинается со служебного слова def.
Вызов процедуры осуществляется по ее имени, за которым следуют круглые скобки, например, Err().
В одной программе может быть сколько угодно много вызовов одной и той же процедуры.
Использование процедур сокращает код и повышает удобочитаемость.
Процедура с параметрами.
Как используются в Python параметры процедуры, рассмотрим на примере.
Пример.
Написать процедуру, которая печатает раз указанный символ (введенный с клавиатуры), каждый с новой строки. def printChar(s): print (s) sim = input('введите символ') printChar(sim) # первый вызов, вывод введенного символа printChar('*') # второй вызов, вывод *
Глобальная переменная — если ей присвоено значение в основной программе (вне процедуры).
Локальная переменная (внутренняя) известна только на уровне процедуры, обратиться к ней из основной программы и из других процедур нельзя.

Параметры процедуры — локальные переменные.
2. Примеры использования локальных и глобальных переменных.
Пример 1. x = 3 # глобальная переменная def pr(): # процедура без параметров print (x) # вывод значения глобальной переменной pr()
Пример 2. x = 3 # глобальная переменная def pr(a): # процедура с параметром print (a) # 4 pr(x) # передача параметра глобальной переменной (3)
Существует возможность изменить значение глобальной переменной (не создавая локальную). В процедуре с помощью слова global: x = 3 # глобальная переменная def pr(): # процедура без параметров global x x = pow(x,10) print (x) # вывод измененного значения глобальной переменной pr()

3. Функции.
Функция - подпрограмма, к которому можно обратиться из другого места программы.
Для создания функции используется ключевое слово def, после которого указывается имя и список аргументов в круглых скобках. Тело функции выделяется также как тело условия (или цикла): четырьмя пробелами.
Рассмотрим синтаксис функции: def имя функции(Список параметров):
Система команд return выражение
Часть функций языка Python являются встроенными функциями, которые обеспечены синтаксисом самого языка.
Например, int, input, randint.
Рассмотрим пример создания пользовательских функций.
Пример 1. Вычислить сумму цифр числа. def sumD(n): # определение функции с параметром sumD = 0 while n!= 0: sumD += n % 10 n = n // 10 return sumD # возврат значения функции
# основная программа print (sumD(int(input())) # вызов функции с параметром

Вариант 0.
1. Определить, являются ли три треугольника равновеликими. Длины сторон вводить с клавиатуры. Для подсчёта площади треугольника использовать формулу Герона.
Вычисление площади оформить в виде функции с тремя параметрами.
Формула Герона:
Решение:

2. Ввести одномерный массив A длиной m. Поменять в нём местами первый и последний элементы. Длину массива и его элементы ввести с клавиатуры. В программе описать процедуру для замены элементов массива. Вывести исходные и полученные массивы.
Решение:

Вариант 1.
1. Составить программу для вычисления площади разных геометрических фигур.
2. Даны 3 различных массива целых чисел (размер каждого не превышает 15). В каждом массиве найти сумму элементов и среднеарифметическое значение.
Вариант 2.
1. Вычислить площадь правильного шестиугольника со стороной а, используя подпрограмму вычисления площади треугольника.
2. Пользователь вводит две стороны трех прямоугольников. Вывести их площади.
Вариант 3.
1. Даны катеты двух прямоугольных треугольников. Написать функцию вычисления длины гипотенузы этих треугольников. Сравнить и вывести какая из гипотенуз больше, а какая меньше.
2. Преобразовать строку так, чтобы буквы каждого слова в ней были отсортированы по алфавиту.
Вариант 4.
1. Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить программу деления дроби на дробь. Ответ должен быть несократимой дробью. Использовать подпрограмму алгоритма Евклида для определения НОД.
2. Задана окружность (x-a)2 + (y-b)2 = R2 и точки Р(р1, р2), F(f1, f1), L(l1,l2). Выяснить и вывести на экран, сколько точек лежит внутри окружности. Проверку, лежит ли точка внутри окружности, оформить в виде процедуры.
Вариант 5.
1. Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить программу вычитания из первой дроби второй. Ответ должен быть несократимой дробью.
Использовать подпрограмму алгоритма Евклида для определения НОД.
2. Напишите программу, которая выводит в одну строчку все делители переданного ей числа, разделяя их пробелами.
Вариант 6.
1. Составить программу нахождения наибольшего общего делителя (НОД) и наименьшего общего кратного (НОК) двух натуральных чисел НОК(А, В) =
(A*B)/НОД(A,B). Использовать подпрограмму алгоритма Евклида для определения
НОД.
2. Cоставить программу вычисления площади выпуклого четырехугольника, заданного длинами четырех сторон и диагонали.
Вариант 7.
1. Даны числа X, Y, Z, Т — длины сторон четырехугольника. Вычислить его площадь, если угол между сторонами длиной X и У — прямой. Использовать две подпрограммы для вычисления площадей: прямоугольного треугольника и прямоугольника.
2. Напишите программу, которая переводит переданное ей неотрицательное целое число в 10-значный восьмеричный код, сохранив лидирующие нули.
Вариант 8.

1. Найти все натуральные числа, не превосходящие заданного n, которые делятся на каждую из своих цифр.
2. Ввести одномерный массив A длиной m. Поменять в нём местами первый и последний элементы. Длину массива и его элементы ввести с клавиатуры. В программе описать процедуру для замены элементов массива. Вывести исходные и полученные массивы.
Вариант 9.
1. Из заданного числа вычли сумму его цифр. Из результата вновь вычли сумму его цифр и т. д. Через сколько таких действий получится нуль?
2. Даны 3 различных массива целых чисел. В каждом массиве найти произведение элементов и среднеарифметическое значение.
Вариант 10.
1. На отрезке [100, N] (210 < N < 231) найти количество чисел, составленных из цифр а, b, с.
2. Составить программу, которая изменяет последовательность слов в строке на обратную.
Вариант 11.
1. Два простых числа называются «близнецами», если они отличаются друг от друга на
2 (например, 41 и 43). Напечатать все пары «близнецов» из отрезка [n, 2n], где n — заданное натуральное число, большее 2..
2. Даны две матрицы А и В. Написать программу, меняющую местами максимальные элементы этих матриц. Нахождение максимального элемента матрицы оформить в виде процедуры.
Вариант 12.
1. Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных» чисел, которые не больше данного числа N.
2. Даны длины сторон треугольника a, b, c. Найти медианы треугольника, сторонами которого являются медианы исходного треугольника. Для вычисления медианы проведенной к стороне а, использовать формулу Вычисление медианы оформить в виде процедуры.
Вариант 13.
1. Натуральное число, в записи которого n цифр, называется числом Армстронга, если сумма его цифр, возведенная в степень n, равна самому числу. Найти все числа
Армстронга от 1 до к.
2. Три точки заданы своими координатами X(x1, x2), Y(y1, y2) и Z(z1, z2). Найти и напечатать координаты точки, для которой угол между осью абсцисс и лучом, соединяющим начало координат с точкой, минимальный. Вычисления оформить в виде процедуры.
Вариант 14.
1. Составить программу для нахождения чисел из интервала [М, N], имеющих наибольшее количество делителей.
2.Четыре точки заданы своими координатами X(x1, x2), Y(y1, y2), Z(z1, z2), P(p1, p2).
Выяснить, какие из них находятся на максимальном расстоянии друг от друга и вывести
на экран значение этого расстояния. Вычисление расстояния между двумя точками оформить в виде процедуры.
Вариант 15.
1. Найти все простые натуральные числа, не превосходящие n, двоичная запись которых представляет собой палиндром, т. е. читается одинаково слева направо и справа налево.
2. Четыре точки заданы своими координатами X(x1, x2, x3), Y(y1, y2, y3), Z(z1, z2, z3),
T(t1,t2, t3). Выяснить, какие из них находятся на минимальном расстоянии друг от друга и вывести на экран значение этого расстояния. Вычисление расстояния между двумя точками оформить в виде процедуры.
Часть 2. Обработка массива целых чисел из файла. Сортировка.
Чтение данных из файла
• в языке Python для чтения данных удобно использовать менеджер контекста, который открывает файл и закрывает его; например, код
with open("26.txt") as Fin:
... # какие-то операции с файлом
равносилен такому
Fin = open("26.txt")
... # какие-то операции с файлом
Fin.close()
• если в текущей строке файла находится целое число, то прочитать его в переменную x можно так:
x = int( Fin.readline() )
• если в строке записаны два числа, после чтения (Fin.readline()) строку нужно разбить на отдельные части по пробелам (каждая часть – символьная запись числа) и затем каждую часть преобразовать в целое число; например, чтение двух чисел:
s = Fin.readline()
symData = s.split()
x, y = map( int, symData )
или в компактной форме
x, y = map( int, Fin.readline().split() )
Хранение массива данных
• в языке Python для хранения массива данных используется список; следующая программа показывает чтение массива данных размера N в список data из файла «26.txt» (данные записаны в столбик):
data = [0]*N
with open("26.txt") as Fin:
for i in range(N):
data[i] = int( Fin.readline() )

Решение нулевого варианта:
Системный администратор раз в неделю создаёт архив пользовательских файлов.
Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный
объём архивируемых файлов. Известно, какой объём занимает файл каждого
пользователя. По заданной информации об объёме файлов пользователей и свободном
объёме на архивном диске определите максимальное число пользователей, чьи файлы
можно сохранить в архиве, а также максимальный размер имеющегося файла,
который может быть сохранён в архиве, при условии, что сохранены файлы
максимально возможного числа пользователей.
Входные данные. В первой строке входного файла вариант0.txt находятся два числа:
S – размер свободного места на диске (натуральное число, не превышающее 10 000) и
N – количество пользователей (натуральное число, не превышающее 2000). В
следующих N строках находятся значения объёмов файлов каждого пользователя (все
числа натуральные, не превышающие 100), каждое в отдельной строке. Запишите в
ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть
помещены в архив, затем максимальный размер имеющегося файла, который может
быть сохранён в архиве, при условии, что сохранены файлы максимально возможного
числа пользователей.
Пример входного файла:
100 4
80
30
50
40
При таких исходных данных можно сохранить файлы максимум двух пользователей.
Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём
файла из перечисленных пар – 50, поэтому ответ для приведённого примера:
2 50
Решение (программа):
1) проще всего составить программу на языке Python, где есть много встроенных функций
2) сначала нужно прочитать данные из файла; читаем все строки сразу в массив data:
with open("26.txt") as Fin:
data = Fin.readlines()
3) декодируем два числа из первой строки; первой записываем в переменную S, а второе нам не интересно, записываем его в переменную с именем «_»; первую строку сразу удаляем
S, _ = map( int, data[0].split() )
del data[0]

4) преобразуем данные в целые числа и сразу сортируем
data = sorted( list(map(int, data)) )
5) теперь накапливаем сумму в переменной total, пока она остается не больше, чем S:
total = 0
for i, val in enumerate(data):
if total + val > S: break
total += val
6) как только сумма превысила S, произойдёт выход из цикла по оператору break, а в переменной i останется количество добавленных значений; выводим его на экран:
print(i)
7) вычисляем запас, который мы можем уменьшить с помощью замены одного выбранного значения на другое:
delta = S - total
8) теперь выбираем из массива данных те значения, которые могут быть выбраны: разность между таким значением и наибольшим выбранным элементом data[i] должна быть не больше, чем delta:
candidates = [x for x in data
if x-data[i-1] <= delta]
9) остается найти второй ответ: максимум из чисел-кандидатов:
print( max(candidates) )
10) приведём полную программу
with open("26.txt") as Fin:
data = Fin.readlines()
S, _ = map( int, data[0].split() )
del data[0]
data = sorted( list(map(int, data)) )
total = 0
for i, val in enumerate(data):
if total + val > S: break
total += val
print(i)
delta = S - total
candidates = [x for x in data
if x-data[i-1] <= delta]
print( max(candidates) )
Варианты заданий для самостоятельной работы:
1) В магазине электроники раз в месяц проводится распродажа. Из всех товаров выбирают K товаров с самой большой ценой и делают на них скидку в 20%. По
заданной информации о цене каждого из товаров и количестве товаров, на которые будет скидка, определите цену самого дорогого товара, не участвующего в распродаже, а также целую часть от суммы всех скидок.
Входные и выходные данные. В первой строке входного файла k1.txt находятся два числа, записанные через пробел: N – общее количество цен (натуральное число, не превышающее 10 000) и K – количество товаров со скидкой. В следующих N строках находятся значения цены каждого из товаров (все числа натуральные, не превышающие 10 000), каждое в отдельной строке. Запишите в ответе два числа: сначала цену самого дорогого товара, не участвующего в распродаже, а затем целую часть от суммы всех скидок.
Пример входного файла:
10 3
1800
3600
3700
800
2600
2500
1800
1500
1900
1200
При таких исходных данных ответ должен содержать два числа – 2500 и 1980.
Пояснение: скидка будет на товары стоимостью 3700, 3600, 2600. Тогда самый дорогой товар без скидки стоит 2500, а сумма скидок 740+720+520 = 1980.
2) Спутник «Фотон» проводит измерения солнечной активности, результат каждого измерения представляет собой натуральное число. Перед обработкой серии измерений из неё исключают K наибольших и K наименьших значений (как недостоверные). По заданной информации о значении каждого из измерений, а также количестве исключаемых значений, определите наибольшее достоверное измерение, а также целую часть среднего значения всех достоверных измерений.
Входные и выходные данные. В первой строке входного файла k2.txt находятся два числа, записанные через пробел: N – общее количество измерений
(натуральное число, не превышающее 10 000) и K – количество исключаемых минимальных и максимальных значений. В следующих N строках находятся значения каждого из измерений (все числа натуральные, не превышающие 1000), каждое в отдельной строке. Запишите в ответе два числа: сначала наибольшее достоверное измерение, а затем целую часть среднего значения всех достоверных измерений.
Пример входного файла:
10 2

34
50
43
44
23
9
39
5
38
36
При таких исходных данных ответ должен содержать 2 числа – 43 и 35. Пояснение: будут отброшены значения 5, 9, 44, 50. Тогда наибольшее оставшееся значение равно 43, а среднее значение из оставшихся равно (23+34+36+38+39+43):6 = 35,5.
3) По итогам проведения олимпиады по программированию каждый участник получил определённое количество баллов, различное для каждого ученика. По регламенту олимпиады победителя присуждают K лучших участников, а призёра присуждают M лучших участников, следующих за ними. По заданной информации о результатах каждого из участников определите минимальный балл призёра и минимальный балл победителя данной олимпиады.
Входные и выходные данные. В первой строке входного файла k3.txt находятся три числа, записанные через пробел: N – общее количество результатов учащихся
(натуральное число, не превышающее 10 000), K – количество победителей, M – количество призёров. В следующих N строках находятся значения каждого из результатов (все числа натуральные, не превышающие 1000), каждое в отдельной строке. Запишите в ответе два числа: сначала минимальный балл призёра, а затем минимальный балл победителя данной олимпиады.
Пример входного файла:
10 2 4
244
39
213
108
132
18
46
52
242
179
При таких исходных данных ответ должен содержать 2 числа – 108 и 242.
Пояснение: победители набрали 244 и 242 балла, призёры набрали 213, 179, 132,

108 баллов. Тогда минимальный балл призёра 108, а минимальный балл победителя – 242.
4) По итогам проверочной работы учащиеся школ города получили определённое количество баллов, различное у каждого из участников. K учеников с самым высоким результатом относят к группе отличников, а K следующих за ними – к группе хорошистов. По заданной информации о результатах каждого из учащихся, а также количеству учащихся в каждой группе определите целую часть среднего балла в группе отличников и группе хорошистов.
Входные и выходные данные. В первой строке входного файла k4.txt находится два числа, записанные через пробел: N – общее количество результатов учащихся
(натуральное число, не превышающее 10 000), K – количество учащихся в каждой из групп. В следующих N строках находятся количества баллов конкретных учащихся (все числа натуральные, не превышающие 1000), каждое в отдельной строке. Запишите в ответе два числа: сначала целую часть среднего балла у хорошистов, а затем целую часть среднего балла у отличников.
Пример входного файла:
10 2
298
28
293
214
209
54
24
157
247
52
При таких исходных данных ответ должен содержать 2 числа – 230 и 295.
Пояснение: Отличники набрали 298 и 293 балла, а хорошисты 247 и 214 баллов.
Тогда средний балл хорошистов 203,5, а средний балл отличников 295,5.
5) В магазине сотовой связи представлены смартфоны различной стоимости.
Считается, что K самых дешёвых смартфонов относятся к бюджетному сегменту, а M самых дорогих – к премиум сегменту. По заданной информации о цене каждого из смартфонов определите цену самого дешёвого смартфона премиум сегмента, а также целую часть средней цены телефона из бюджетного сегмента.
Входные и выходные данные. В первой строке входного файла k5.txt находятся три числа, записанные через пробел: N – общее количество приведённых далее цен на смартфоны (натуральное число, не превышающее 10 000), K – количество смартфонов в бюджетном сегменте, M – количество смартфонов в премиум сегменте. В следующих N строках находятся значения цен на смартфоны (все числа натуральные, не превышающие 30000), каждое в отдельной строке.

Запишите в ответе два числа: сначала цену самого дешёвого смартфона премиум сегмента, а затем целую часть средней цены телефона из бюджетного сегмента.
Пример входного файла:
10 3 2
28500
12000
17500
25000
18000
20000
22500
7500
19000
5500
При таких исходных данных ответ должен содержать 2 числа – 25000 и 8333.
Пояснение: стоимость смартфонов из бюджетного сегмента: 5500, 7500, 12000; стоимость смартфонов из премиум сегмента – 25000 и 28500. Минимальная цена премиум смартфона 25000, а средняя цена бюджетного 8333,33.
6) Робот складывает монеты в ящики. Задача робота заполнить как можно большее количество ящиков монетами в количестве 100 штук. Роботу по конвейеру поступают корзины с монетами. В каждой корзине может быть от 1 до 99 монет.
Известно, что робот может высыпать в ящик содержимое не более двух корзин.
Корзина должна быть высыпана в ящик полностью. Необходимо определить, сколько ящиков можно заполнить монетами так, чтобы в каждом из них было ровно по 100 монет.
Входные данные представлены в файле j1.txt следующим образом. В первой строке записано число N – количество корзин, в каждой из последующих N строк число K – количество монет в каждой корзине.
В качестве ответа дать одно число – количество ящиков, заполненными 100 монетами.
Пример организации исходных данных во входном файле:
7
10
44
66
90
65
47
34
При таких исходных данных можно заполнить только 2 ящика по 100 монет 10 +
90 и 66 + 34.

Ответ: 2.
7) На вход программе поступает набор чисел в диапазоне [10; 10000]. Необходимо узнать сколько чисел в массиве находятся в диапазоне между средним значением и медианой, включая совпадающие с этими показателями значения. Медианой называется такое значение, что ровно половина из оставшихся элементов больше медианы и, соответственно, вторая половина меньше медианы.
Входные данные представлены в файле j2.txt следующим образом. В первой строке записано нечетное число N – количество чисел, в каждой из последующих
N строк число из обрабатываемой последовательности.
В качестве ответа дать одно число – количество найденных чисел.
Пример организации исходных данных во входном файле:
7
10
47
60
84
65
47
37
При таких исходных результатом является число 2. Среднее значение равно 50, медиана – 47.
Ответ: 2.
8) Системный администратор раз в неделю создаёт архив пользовательских файлов.
Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов.
Известно, какой объём занимает файл каждого пользователя. Системный администратор старается сохранить файлы как можно большего размера. При этом используя выделенную память максимально эффективно – сохраняя файлы меньшего размера, если файлы большего не могут быть сохранены.
Входные данные.
В первой строке входного файла j3.txt находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 10 000) и N – количество пользователей (натуральное число, не превышающее 1000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
Запишите в ответе два числа: сначала число сохраненных файлов, затем размер наименьшего сохраненного файла.
Пример входного файла:
100 4
70
10

25
3
При таких исходных данных можно сохранить три файла – 70, 25, 3. Поэтому ответ должен содержать два числа – 3 и 3.
9) Системный администратор раз в неделю создаёт архив пользовательских файлов.
Выделяемый объем памяти рассчитывается, как общий объем файлов за вычетом количественно 20% файлов – 10% составляют самые мелкие файлы и 10 % составляют самые крупные файлы.
Известно, какой объём занимает файл каждого пользователя.
Определите объем выделенного дискового пространства и размер самого крупного из сохраненных файлов. В случае если 10% является нецелым числом, берется целая часть от деления количества файлов на 10.
Входные данные.
В первой строке входного файла j4.txt находится число N – количество пользователей (натуральное число, 10 ≤ N ≤ 10000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
Запишите в ответе два числа: сначала объем сохраненных файлов, затем размер наибольшего сохраненного файла.
Пример входного файла:
10
50
33
44
17
92
58
42
10
52
88
При таких исходных данных можно сохранить 8 файлов – 50, 33, 44, 17, 58, 42, 52,
88. Поэтому ответ должен содержать два числа – 384 и 88.
10) Для уменьшения аварий на центральной дороге в городе X дорожная служба решила выровнять ямы. Размер объем (в литрах) новой ямы вычисляется как второе по величине значение среди объёмов самой этой ямы и двух соседних перед выравниванием. При этом размеры первой и последней ямы решили не менять.
Ночью перед ремонтом дороги в городе X прошел проливной дождь, поэтому все ямы до краев заполнены водой. Сколько литров воды выльется обратно на дорогу после проведения ремонта?
Входные данные.

В первой строке входного файла J5.txt находится число N – количество ям на дороге (натуральное число, не превышающее 10 000). В следующих N строках находятся значения объемов ям (все числа натуральные, не превышающие 25), каждое в отдельной строке.
Запишите в ответе два числа: количество ям с наименьшим объемом и общий объем воды, вылившейся из ям обратно на дорогу.
Пример входного файла:
8
10
12
8
6
20
12
16
10
При таких исходных данных после ремонта объем ям будет выглядеть следующим образом 10, 10, 8, 8, 12, 16, 12, 10. В ответе необходимо указать два числа – 2 и 14.
11) Магазин предоставляет оптовому покупателю скидку по следующим правилам:
− на каждый второй товар ценой больше 100 рублей предоставляется скидка 10 %;
− общая цена покупки со скидкой округляется вверх до целого числа рублей;
− порядок товаров в списке определяет магазин и делает это так, чтобы общая сумма скидки была наименьшей.
Вам необходимо определить общую цену закупки с учётом скидки и цену самого дорогого товара, на который будет предоставлена скидка.
Входные данные. Первая строка входного файла s1.txt содержит число N – общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число – цену товара в рублях. В ответе запишите два целых числа: сначала общую цену покупки с учётом скидки, затем цену самого дорогого товара, на который предоставлена скидка.
Пример входного файла
7
225
160
380
95
192
310
60
В данном случае товары с ценой 60 и 95 не участвуют в определении скидки, остальные товары магазину выгодно расположить в таком порядке цен: 380, 160,

225, 192, 310. Скидка предоставляется на товары ценой 160 и 192. Суммарная цена этих двух товаров со скидкой составит 316,8 руб., после округления – 317 руб.
Общая цена покупки составит: 60 + 95 + 317 + 380 + 225 + 310 = 1387 руб. Самый дорогой товар, на который будет получена скидка, стоит 192 руб. В ответе нужно записать числа 1387 и 192.
12) Магазин предоставляет оптовому покупателю скидку по следующим правилам:
− на каждый второй товар ценой больше 150 рублей предоставляется скидка 20%;
− общая цена покупки со скидкой округляется вверх до целого числа рублей;
− порядок товаров в списке определяет магазин и делает это так, чтобы общая сумма скидки была наименьшей.
Вам необходимо определить общую цену закупки с учётом скидки и цену самого дорогого товара, на который будет предоставлена скидка.
Входные данные. Первая строка входного файла s1.txt содержит число N – общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число – цену товара в рублях. В ответе запишите два целых числа: сначала общую цену покупки с учётом скидки, затем цену самого дорогого товара, на который предоставлена скидка.
Пример входного файла
7
225
160
380
95
192
310
60
В данном случае товары с ценой 60 и 95 не участвуют в определении скидки, остальные товары магазину выгодно расположить в таком порядке цен: 380, 160,
225, 192, 310. Скидка предоставляется на товары ценой 160 и 192. Суммарная цена этих двух товаров со скидкой составит 281,6 руб., после округления – 282 руб.
Общая цена покупки составит: 60 + 95 + 282 + 380 + 225 + 310 = 1352 руб. Самый дорогой товар, на который будет получена скидка, стоит 192 руб. В ответе нужно записать числа 1352 и 192.
13) Магазин предоставляет оптовому покупателю скидку по следующим правилам:
− на каждый второй товар ценой больше 200 рублей предоставляется скидка 30%;
− общая цена покупки со скидкой округляется вверх до целого числа рублей;
− порядок товаров в списке определяет магазин и делает это так, чтобы общая сумма скидки была наименьшей.
Вам необходимо определить общую цену закупки с учётом скидки и цену самого дорогого товара, на который будет предоставлена скидка.

Входные данные. Первая строка входного файла s1.txt содержит число N – общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число – цену товара в рублях. В ответе запишите два целых числа: сначала общую цену покупки с учётом скидки, затем цену самого дорогого товара, на который предоставлена скидка.
Пример входного файла
7
225
160
380
95
192
310
60
В данном случае товары с ценой 60, 95, 160 и 192 не участвуют в определении скидки, остальные товары магазину выгодно расположить в таком порядке цен:
380, 225, 310. Скидка предоставляется на товар ценой 225. Его цена со скидкой составит 157,5 руб., после округления – 158 руб. Общая цена покупки составит: 60
+ 95 + 160 + 192 + 158 + 380 + 310 = 1355 руб. Самый дорогой товар, на который будет получена скидка, стоит 225 руб. В ответе нужно записать числа 1355 и 225.
14) Системный администратор раз в неделю создаёт архив пользовательских файлов.
Известно, какой объём занимает файл каждого пользователя. Сохраняются файлы всех пользователей.
Каждый файл в архиве может быть либо сжат, либо сохранен в исходном состоянии. Сжатый файл занимает в памяти 80% от исходного. Для архива выделяется объем, равный 90% от общего объема файлов пользователей до сжатия.
Для ускорения процесса создания архива как можно наибольшее возможное количество файлов сохраняется без сжатия.
Определите максимально возможное количество файлов, которое может быть сохранено без сжатия, и максимально возможный размер такого файла.
Входные данные. В первой строке входного файла j6.txt записано натуральное число N – количество пользователей (20 ≤ N ≤ 10000). В следующих N строках записаны значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
Запишите в ответе два числа: сначала количество несжатых файлов, затем наибольший размер сохраненного без сжатия файла.
Пример входного файла:
7
13
17
5

55
61
9
10
При таких исходных данных ответ должен содержать 2 числа – 5 и 17.
15) В проекте «СкупойПлатитДважды» 1 января решено тратить на развитие 60% накоплений всех участников. При этом 20% самых богатых участников вносят
80% от своих накоплений, остальные участники вносят равный процент таким образом, чтобы общая сумма взносов всех участников составила 60%, обозначенные выше.
Запишите в ответе два целых числа: сумма взноса от всех «богатых» участников проекта и сумма взноса участника с самым небольшим размером накоплений. Если в результате получаются дробные числа, нужно записать их целые части.
Входные данные. В первой строке файла j7.txt записано натуральное число N – количество участников проекта (20 ≤ N ≤ 1000). В следующих N строках находятся значения – размер накоплений всех пользователей (все числа натуральные, не превышающие 1000), каждое в отдельной строке.
Пример входного файла:
10
10
12
25
25
40
35
18
19
10
12
При таких исходных данных ответ должен содержать 2 числа – 60 и 4.
Примечание: если при нахождении 20% от количества участников получается нецелое число, нужно взять его целую часть.
16) В магазине Пятэльдодео на черную пятницу решено провести одну из двух акций. Первая акция – 30% скидки на 70% самых дешевых товаров, 40% процентов скидки на оставшиеся товары. Вторая акция – 40% скидки на 50% самых дешевых товаров, 35% процентов скидки на оставшиеся товары. Определите, какая акция принесет больше прибыли, если предположить, что все товары будут проданы.
Известно, что прибыль двух акций разная.
В качестве ответа нужно привести разницу в прибыли двух акций и стоимость самого дорогого товара, реализованного при проведении выбранной акции. В форму записать целые части найденных чисел.

Входные данные. В первой строке входного файла j8.txt находится число N – количество товаров кратное 20 (натуральное число, 20 ≤ N ≤ 10000). В следующих
N строках находятся значения – стоимость товаров (целое число не большее 1000).
Пример входного файла (все значения с новой строки):
20
4 13 4 23 22 20 8 6 5 12 48 22 50 12 63 23 4 8 9 11
При таких исходных данных ответ должен содержать 2 числа – 1 и 40.
17) На складе лежат пакеты с углём различного веса и стоимости. Вес и стоимость записаны на каждом пакете как натуральные числа: вес не превосходит 100, стоимость не превосходит 10000. Для транспортировки отбираются K пакетов с самой низкой ценой угля за единицу веса; при равной стоимости за единицу веса выбираются пакеты с большим весом. По заданной информации о пакетах с углём и количестве транспортируемых пакетов определите суммарный вес угля в отправленных пакетах и стоимость самого тяжёлого отправленного пакета.
Входные данные представлены в файле k6.txt следующим образом. В первой строке через пробел записаны числа N - количество пакетов на складе (натуральное число, не превышающее 1000) и K – количество пакетов на отправку (натуральное число, не превосходящее 100). В каждой из последующих N строк через пробел записаны два числа – вес и стоимость каждого пакета.
Запишите в ответе два числа – сначала суммарный вес угля в отправленных пакетах, затем стоимость самого тяжёлого отправленного пакета.
Пример организации исходных данных во входном файле:
10 4
47 470
50 600
60 480
45 540
30 300
15 180
70 560
30 360
91 910
40 320
При таких исходных данных самая низкая стоимость угля в пакетах весом 60, 70,
40; затем – у пакетов весом 91, 30, 47. Поэтому наибольший возможный вес к отправке равен 70+60+40+91 = 261, а стоимость самого тяжёлого отправленного пакета равна 910.
18) Системный администратор раз в неделю создаёт архив пользовательских файлов.
Однако объём диска, куда он помещает архив, может быть меньше, чем суммарный объём архивируемых файлов. Известно, какой объём занимает файл каждого пользователя. Администратор сохраняет файлы по следующему правилу:
выбирается файл максимального размера, который может быть записан на диск, затем выбирается файл минимального размера, который может быть записан на диск. Данный сценарий повторяется до тех пор, пока на диск нельзя будет записать ни одного из оставшихся файлов.
Входные данные представлены в файле j9.txt следующим образом. В первой строке входного файла находятся два числа: S – размер свободного места на диске
(натуральное число, не превышающее 10 000) и N – количество пользователей
(натуральное число, не превышающее 1000). В следующих N строках находятся значения объёмов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке.
Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем размер последнего сохраненного файла.
Пример организации исходных данных во входном файле:
100 5
80
30
10
5
7
При таких исходных данных можно сохранить файлы трех пользователей. Объёмы этих трёх файлов 80, 5 и 10. Последний выбранный файл имеет размер 10 , поэтому ответ для приведённого примера: 3 10.
19) Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся.
Грузы массой от 180 до 200 кг грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные представлены в файле 39.txt следующим образом. В первой строке входного файла записаны два целых числа: N – общее количество грузов и
M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа: сначала максимально возможное количество грузов, затем их общую массу.
Пример организации исходных данных во входном файле:
6 700
100

185
120
160
140
300
В данном случае сначала нужно взять груз массой 185 кг. Остается 515 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать четырьмя способами: 100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160, 120 + 140 + 160.
Выбираем способ, при котором вывозится груз наибольшей возможной массы.
Таких способов три: 100 + 120 + 160, 100 + 140 + 160, 120 + 140 + 160. Из этих способов выбираем те, при которых больше масса второго по величине груза, то есть 100 + 140 + 160 и 120 + 140 + 160. Их них нужно выбрать вариант 120 + 140 +
160, так как в этом случае третий по величине груз наиболее тяжёлый. Всего получается 4 груза общей массой 605 кг. Ответ: 4 605.
20) Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся.
Грузы массой от 310 до 320 кг грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные представлены в файле 39.txt следующим образом. В первой строке входного файла записаны два целых числа: N – общее количество грузов и
M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа: сначала максимально возможное количество грузов, затем их общую массу.
Пример организации исходных данных во входном файле:
6 720
100
315
120
160
140
300
В данном случае сначала нужно взять груз массой 315 кг. Остается 405 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать тремя способами:
100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160. Выбираем способ, при котором
вывозится груз наибольшей возможной массы. Таких способов два: 100 + 120 +
160, 100 + 140 + 160. Из этих способов выбираем тот, при котором больше масса второго по величине груза, то есть 100 + 140 + 160. Всего получается 4 груза общей массой 715 кг. Ответ: 4 715.
21) Системный администратор раз в неделю создаёт архив пользовательских файлов.
Причем файлы размером больше 500 МБ записывает на диск D, а меньшего размера на диск E. Известно, какой объём занимает файл каждого пользователя.
Системный администратор старается сохранить как можно больше файлов.
Необходимо найти, сколько файлов на каждом диске может сохранить системный администратор и максимальный размер сохраненного при данных условиях файла для каждого диска.
Входные данные представлены в файле j10.txt следующим образом. В первой строке входного файла находятся три числа: D – размер свободного места на диске
D (натуральное число, не превышающее 100 000), E – размер свободного места на диске E (натуральное число, не превышающее 10 000) и N – общее количество файлов для сохранения (натуральное число, не превышающее 10000). В следующих N строках находятся значения объёмов файлов в МБ каждого пользователя (все числа натуральные, не превышающие 5000), каждое в отдельной строке.
Запишите в ответе два числа: сначала число сохраненных файлов на обоих дисках, затем суммарный размер самых больших по размеру файлов.
Пример организации исходных данных во входном файле:
3000 1000 6
300
350
400
1000
1500
2000
При таких исходных данных можно сохранить четыре файла – 350 и 400 (300 и
400) на диске E, 1000 и 2000 на диске D. Поэтому ответ должен содержать два числа
– 4 и 2400.



написать администратору сайта