УМК ШКОЛА



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

Страницы:

Задания - решение
№ 9 На вход программе подается последовательность символов, среди которых могут быть и цифры, отличные от нуля. Ввод символов заканчивается точкой (в программе на языке Бейсик символы можно вводить по одному в строке, пока не будет введена точка). Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая составит из тех цифр, которые не встречаются во входных данных, минимальное число (ноль не используется). Каждая цифра при этом используется ровно один раз. Если во входных данных встречаются все цифры от 1 до 9, то следует вывести “0”.

Например, пусть на вход подаются следующие символы:

1А734В39.

В данном случае программа должна вывести

2568
РЕШЕНИЕ:

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

CLS
DIM str AS STRING
DIM str1 AS STRING
DIM a(200) AS integer
str = "123456789"

INPUT str1
l=len(str1)

FOR i = 1 TO 9
a(i)=i
FOR j = 1 TO l
IF a(i) = val(MID$(str1, j, 1)) THEN
a(i) = 0
j=10
k=k+1
END IF
next j
next i

if k=l then
PRINT 0
else
FOR i = 1 TO 9
IF a(i) <> 0 THEN PRINT a(i);
NEXT i
end if

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

<Фамилия> <Имя> <класс>,

где <Фамилия> – строка, состоящая не более, чем из 20 символов, <Имя> – строка, состоящая не более, чем из 15 символов, <класс> – год обучения (от 1 до 12) и заглавная буква (от “А” до “Я”) без пробела. <Фамилия> и <Имя>, а также <Имя> <класс> разделены одним пробелом. Пример входной строки:

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

Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о параллелях (годе обучения) с наибольшим числом учеников. Программа должна выводить на экран в первой строке количество учеников в искомых параллелях, а во второй строке – в порядке возрастания номера этих параллелей через пробел. Например:

100

1 7 11
РЕШЕНИЕ:

Алгоритм:
1. В одной записи <Фамилия> <Имя> <класс> отбрасываем последний символ - букву класса.
2. По двум последним цифрам определяем класс и считаем количество учащихся по параллелям. Записывая количество в массив k(i)
3. Сортируем массив k(i) по убыванию
4. выводим на монитор первые три элемента массива количества учащихся по параллелям k(i)

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

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

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

FOR i = 1 TO N
INPUT str1(i)
l = LEN(str1(i)) - 1
str1(i) = LEFT$(str1(i), l)
FOR j = 1 TO 12
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 12
FOR d = s TO 12
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 3
z = z + k(i)
NEXT i
PRINT z

FOR i = 1 TO 3
if k(i)<> then PRINT g(i);
NEXT i

Ответ:

№ 11 На вход программе подаются сведения о ячейках автоматической камеры хранения багажа. В первой строке задана текущая дата: через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Во второй строке сообщается количество занятых ячеек N, которое не меньше 3, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат: <номер ячейки> <дата сдачи багажа>, где <номер ячейки> – четырехзначное число, <дата сдачи багажа> – через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Номер ячейки и дата сдачи багажа разделены одним пробелом. Сведения отсортированы в порядке номеров ячеек.

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

Багаж мог сдаваться только в текущем или предыдущем месяце текущего календарного года (если текущий месяц январь, то данные о сдаче багажа в декабре прошлого года отсутствуют). Количество дней в каждом из месяцев текущего года следующее: январь – 31, февраль – 28, март – 31, апрель – 30, май – 31, июнь – 30, июль – 31, август – 31, сентябрь – 30, октябрь – 31, ноябрь – 30, декабрь – 31. Все входные данные корректны.

Пример входных данных:

04.06

3

1000 01.06

1001 31.05

2007 21.05

Результат работы программы для этого примера

2007

1001

№ 12 На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано Гарри Поттером следующим образом. Сначала Гарри определил количество букв в самом коротком слове, обозначив полученное число К (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую английскую букву в заклинании на следующую за ней K-й по счету в алфавите (алфавит считается циклическим, то есть за буквой Z следует буква A), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные – прописными. Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран текст расшифрованного заклинания. Например, если зашифрованный текст был таким:

Bd Tc Ec Fcd Tc.

то результат расшифровки должен быть следующим:

Zb Ra Ca Dab Ra.
РЕШЕНИЕ:

Алгоритм:
1. Задаем массив заглавных и прописных букв
2. Находим в зашифрованном тексте минимально слово K
3. Чтобы сделать замену, преобразуем зашифрованный текст в массив.
4. Каждый элемент массива заменяем на новую букву, отстоящую на K-1 место левее
5. Выводим на монитор получившийся массив а(i)

CLS
DIM str AS STRING
DIM str1 AS STRING
DIM str2 AS STRING
DIM a(200) AS STRING
INPUT "kod", str
str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
str2 = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"

K = 200
L = LEN(str)

FOR i = 1 TO L
FOR j = 1 TO 26
IF MID$(str, i, 1) = MID$(str1, j, 1) OR MID$(str, i, 1) = MID$(str2, j, 1) THEN
m = m + 1
j = 26
ELSE
IF m > 0 AND m < K THEN
K = m
m = 0
END IF
END IF
NEXT j
NEXT i

FOR i = 1 TO L
a(i) = MID$(str, i, 1)
FOR j = 27 TO 52
IF MID$(str, i, 1) = MID$(str1, j, 1) THEN a(i) = MID$(str1, j -( 1 + K), 1): j = 52
IF MID$(str, i, 1) = MID$(str2, j, 1) THEN a(i) = MID$(str2, j -( K + 1), 1): j = 52
NEXT j
NEXT i

FOR i = 1 TO L
PRINT a(i);
NEXT i


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



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