Информатика

Всё о сервере, форум!
Основы программирования
ИНФОРМАЦИОННО-РАЗВЛЕКАТЕЛЬНЫЙ ПОРТАЛ

ИНФОРМАТИКА: ЕГЭ, ТЕОРИЯ, ПРАКТИКА, ТЕСТЫ

Вам предлагается написать эффективную программу, которая будет будет определять, какой минимальный
ЕГЭ, ДОМАШНИЕ ЗАДАНИЯ > Алгоритмизация и программирование > Вам предлагается написать эффективную программу, которая будет будет определять, какой минимальный
 
Страницы:

Содержание заданий и решения
Example
На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат: <Фамилия> <Инициалы> <номер школы>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:

Иванов П.С. 57

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

Алгоритм:
1. По двум последним цифрам определяем школу и считаем количество учащихся этой школы. Записывая количество в массив k(i)
3. Сортируем массив k(i) по возрастанию
4. выводим на монитор первые три элемента массива школ, в которых количество учащихся больше 0

DIM str1(200) AS STRING
DIM g(99) AS INTEGER
DIM k(99) AS INTEGER

INPUT "Общее количество всех учеников", N

FOR i = 1 TO 99
g(i) = i
k(i) = 0
NEXT i

FOR i = 1 TO N
INPUT str1(i)
FOR j = 1 TO 99
IF j = VAL(MID$(str1(i), LEN(str1(i)) - 1, 2)) THEN
k(j) = k(j) + 1
END IF
NEXT j
NEXT i

FOR s = 1 TO 99
FOR d = s TO 99
IF k(d) < k(s) THEN c = k(d): k(d) = k(s): k(s) = c: c1 = g(d): g(d) = g(s): g(s) = c1:
NEXT d
NEXT s

FOR i = 1 TO 99
IF k(i) > 0 AND k1 < 3 THEN
k1 = k1 + 1
PRINT g(i);
END IF
NEXT i

Example
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат:

<Фамилия> <Имя> <оценки>,

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

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

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

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) и выводим тех, кто занял последнее место. Обнуляем сумму всех последних мест
Вывести нужно только фамилию и имя.  Если длина всей строки k, то имя заканчивается на k-5 символе) 3. Находим минимум в массиве a(i) и выводим тех, кто занял последнее место. Обнуляем сумму всех последних мест
4. Находим минимум в массиве a(i) и выводим тех, кто занял последнее место. Обнуляем сумму всех последних мест

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
min = 15
FOR i = 1 TO n
IF a(i) < min THEN min = a(i)
NEXT i
PRINT "Последнее место"
FOR i = 1 TO n
IF a(i) = min THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 20
END IF
NEXT i
min = 15
FOR i = 1 TO n
IF a(i) < min THEN min = a(i)
NEXT i
PRINT "Предпоследнее место"
FOR i = 1 TO n
IF a(i) = min THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 20
END IF
NEXT i
min = 15
FOR i = 1 TO n
IF a(i) < min THEN min = a(i)
NEXT i
PRINT "Пред пред последнее место"
FOR i = 1 TO n
IF a(i) = min THEN
PRINT MID$(str(i), 1, LEN(str(i)) - 5); " "
a(i) = 20
END IF

NEXT i

Страницы:
 
При копировании материала с сайта активная ссылка обязательна!
Сайт управляется SiNG cms © 2010-2015