УМК ШКОЛА



** На вход программе подаются сведения
ОГЭ ЕГЭ - РЕШЕНИЯ ЗАДАНИЙ > ** Программирование и алгоритмизация > ** На вход программе подаются сведения
 

Страницы:

Задания - решение
№ 1 Метод решения

№ 2 На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:

Иванов Петр 4 5 4

Требуется написать программу, которая будет выводить на экран фамилии и имена трех лучших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех лучших, то следует вывести и их фамилии и имена. Требуемые имена и фамилии можно выводить в произвольном порядке.
РЕШЕНИЕ:

str(100) массив учащихся, каждое содержит фамилия имя оценки (Иванов Петр 4 5 4)
a(100) сумма оценок каждого учащегося

Алгоритм:
1. Вводим данные по ученику str(i), считаем сумму его оценок и записываем в массив а(i)
Оценки находятся в конце записи str(i). Если длина всей строки k, то оценки находятся на k-4, k-2 и k местах. С помощью функции MID находим символы на k-4, k-2 и k местах и переводим их в числа с помощью команды VAL) 2. Находим максимум в массиве a(i) и выводим тех, кто занял 1 место. Обнуляем сумму всех 1 мест
Вывести нужно только фамилию и имя.  Если длина всей строки k, то имя заканчивается на k-5 символе) 3. Находим максимум в массиве a(i) и выводим тех, кто занял 2 место. Обнуляем сумму всех 2 мест
4. Находим максимум в массиве a(i) и выводим тех, кто занял 3 место. Обнуляем сумму всех 3 мест

CLS
DIM str(100) AS STRING
DIM s AS STRING
DIM a(100) AS LONG
INPUT "Введите количество учащихся", n
FOR i = 1 TO n
INPUT str(i)
k = LEN(str(i))
a(i) = VAL(MID$(str(i), k - 4, 1)) + VAL(MID$(str(i), k - 2, 1)) + VAL(MID$(str(i), k, 1))
NEXT i
max = 0
FOR i = 1 TO n
IF a(i) > max THEN max = a(i)
NEXT i
PRINT "1 mesto"
FOR i = 1 TO n
IF a(i) = max THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 0
END IF
NEXT i
max = 0
FOR i = 1 TO n
IF a(i) > max THEN max = a(i)
NEXT i
PRINT "2 mesto"
FOR i = 1 TO n
IF a(i) = max THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 0
END IF
NEXT i
max = 0
FOR i = 1 TO n
IF a(i) > max THEN max = a(i)
NEXT i
PRINT "3 mesto"
FOR i = 1 TO n
IF a(i) = max THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 0
END IF

NEXT i

№ 3 Заключительный этап олимпиады по астрономии проводился для учеников 9-11-х классов, участвующих в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 50 баллов. Для определения победителей и призеров сначала отбираются 45% участников, показавших лучшие результаты.

По положению, в случае, когда у последнего участника, входящего в 45%, оказывается количество баллов такое же, как и у следующих за ним в итоговой таблице, решение по данному участнику и всем участникам, имеющим с ним равное количество баллов, определяется следующим образом: все участники признаются призерами, если набранные ими баллы больше половины максимально возможных;

все участники не признаются призерами, если набранные ими баллы не превышают половины максимально возможных.

Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая по результатам олимпиады будет определять, какой минимальный балл нужно было набрать, чтобы стать победителем или призером олимпиады.

На вход программе сначала подается число участников олимпиады N. В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:

<Фамилия> <Имя> <класс> <баллы>

где <Фамилия> – строка, состоящая не более, чем из 20 символов,
<Имя> – строка, состоящая не более, чем из 15 символов, <класс> – число от 9 до 11, <баллы> – целое число от 0 до 50 набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом. Пример входной строки:

Иванов Петр 10 17

Программа должна выводить минимальный балл призера. Гарантируется, что хотя бы одного призера по указанным правилам определить можно.
РЕШЕНИЕ:

Алгоритм:
1. Вводим участника и записываем в отдельный массив a(i) количество его баллов
(k - длина строки, количество баллов записано после 3 пробела. находим позицию третьего пробела (команда INSTR), переводим символьные баллы в число (команда  VAL) 2. Сортируем массив с очками в порядке убывания и находим в нем максимальное значение max
3. Если призеров более 45%, то выводим минимальный балл призера max/2
Если призеров не более 45%, выводим значение a(i) 45%

CLS
DIM str(100) AS STRING
DIM s AS STRING
DIM a(100) AS LONG
INPUT "Введите количество учащихся", n
FOR i = 1 TO n
INPUT str(i)
k = LEN(str(i))
k1= INSTR(1,str(i), " ")
k2= INSTR(k1+1,str(i), " ")
k3= INSTR(k2+1,str(i), " ")
a(i) = VAL(MID$(str(i), k3 + 1, 2))
NEXT i

FOR s = 1 TO n
FOR d = s TO n
IF a(d) > a(s) THEN c = a(d): a(d) = a(s): a(s) = c
NEXT d
NEXT s

max = 0
FOR i = 1 TO n
IF a(i) > max THEN max = a(i)
NEXT i

pr=CINT(N*0.45)
IF a(pr)=a(pr+1) then print max/2 else print a(pr)

№ 4 На вход программе подаются 365 строк, которые содержат информацию о среднесуточной температуре всех дней 2005 года. Формат каждой из строк следующий: сначала записана дата в виде dd.mm (на запись номера дня и номера месяца в числовом формате отводится строго два символа, день от месяца отделен точкой), затем через пробел (для Бейсика – через запятую) записано значение температуры — число со знаком плюс или минус, с точностью до 1 цифры после десятичной точки. Данная информация отсортирована по значению температуры, то есть хронологический порядок нарушен. Требуется написать эффективную программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о месяцах с максимальной среднемесячной температурой. Найденные максимальные значения следует выводить в отдельной строке для каждого месяца в виде: номер месяца, значение среднемесячной температуры, округленное до одной цифры после десятичной точки.
РЕШЕНИЕ:

Алгоритм:
1. а(k) массив сумм температур каждого месяца, b(k) количество дней в каждом месяце
2. Далее а(к) массив средних температур каждого месяца
3. Сортируем массив средних температур в порядке убывания и параллельно массив b месяца средних температур
4. Выводим номер месяца и среднюю температуру

CLS
DIM str(365) AS STRING
DIM a(12) AS SINGLE
DIM b(12) AS LONG
INPUT "dd.mm t", n
FOR i = 1 TO n
INPUT str(i)
k = VAL(MID$(str(i), 4, 2))
m = VAL(MID$(str(i), 7, 6))
a(k) = a(k) + m
b(k) = b(k) + 1
NEXT i

FOR i = 1 TO 12
a(i) = a(i) / b(i)
b(i) = i
NEXT i

FOR s = 1 TO 12
FOR d = s TO 12
IF a(d) > a(s) THEN c = a(d): a(d) = a(s): a(s) = c: c1 = b(d): b(d) = b(s): b(s) = c1:
NEXT d
NEXT s

FOR i = 1 TO 12
PRINT b(i),
PRINT USING "###.##"; a(i)
NEXT i


Страницы:
 
Перейти на другой форум:



Логин: Пароль: • Забыли пароль? • Регистрация
Сайт сделан на SiNG cms © 2010-2020