Разноуровневая контрольная работа на тему Строки


Контрольная работа на тему «Строковый тип данных»
Уровень «3»
Дано количество строк. Вводятся строки. Определить и вывести через запятую длину каждой строки .
Вводится слово   "математика" , получить из него слово "тематика".
Вводится слово   "Язык", "Turbo", "Pascal" , получить из них фразу "Язык Turbo Pascal".
 Найти позицию буквы «а» в введенной строке, если таковой буквы нет, то вывести 0.
Вводится слово    "Позитроника", получить из него слово "трон".
 Преобразовать число 105 в строку, а строку "67" в число 67 и склеить полученную строку и полученное числох.
Вводится слово    "МaМа",преобразовать его в "МAМА".
Какова максимально возможная длина строки? 
Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками? 
Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?
Уровень «4»
1. Составить программу на языке Pascal для решения следующей задачи: Дана строка. Заменить в этой строке все буквы «о» на буквы «а». Если букв «о» не встречено в строке, то вывести на экран сообщение «Нет буквы «о»
2. Составить программу на языке Pascal для решения следующей задачи: Дано слово. Добавить к нему в начало и конец столько звездочек, сколько букв в слове. Полученный результат вывести на экран.
3. Через пробел вводится строка: имя и фамилия ученика через пробел, фамилия может состоять максимум из 25 символов, имя-максимум из 15 символов. Пример входной строки: Иванов Иван. Вывести на экран строку, в которой через запятую и пробел записаны сначала имя , а потом фамилия. Пример выходной строки: Иван, Иванов
4.На вход программе подается число строк, после чего вводятся сами строки, найти самую короткую и самую длинную строки и удалить их.
5. Вводится слово. Поменять в словах местами буквы(1 с последней 2 с предпоследней и тд.) не меняя их положение в строке. То есть если вводится абвгд должно вывести дгвба.
6. Какова максимально возможная длина строки? 
7. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками? 
8. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?
Уровень «3»
Дано количество строк. Вводятся строки. Определить и вывести через запятую длину каждой строки .
Вводится слово   "математика" , получить из него слово "тематика".
Вводится слово   "Язык", "Turbo", "Pascal" , получить из них фразу "Язык Turbo Pascal".
 Найти позицию буквы «а» в введенной строке, если таковой буквы нет, то вывести 0.
Вводится слово    "Позитроника", получить из него слово "трон".
 Преобразовать число 105 в строку, а строку "67" в число 67 и склеить полученную строку и полученное числох.
Вводится слово    "МaМа",преобразовать его в "МAМА".
Какова максимально возможная длина строки? 
Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками? 
Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?
Уровень «4»
1. Составить программу на языке Pascal для решения следующей задачи: Дана строка. Заменить в этой строке все буквы «о» на буквы «а». Если букв «о» не встречено в строке, то вывести на экран сообщение «Нет буквы «о»
2. Составить программу на языке Pascal для решения следующей задачи: Дано слово. Добавить к нему в начало и конец столько звездочек, сколько букв в слове. Полученный результат вывести на экран.
3. Через пробел вводится строка: имя и фамилия ученика через пробел, фамилия может состоять максимум из 25 символов, имя-максимум из 15 символов. Пример входной строки: Иванов Иван. Вывести на экран строку, в которой через запятую и пробел записаны сначала имя , а потом фамилия. Пример выходной строки: Иван, Иванов
4.На вход программе подается число строк, после чего вводятся сами строки, найти самую короткую и самую длинную строки и удалить их.
5. Вводится слово. Поменять в словах местами буквы(1 с последней 2 с предпоследней и тд.) не меняя их положение в строке. То есть если вводится абвгд должно вывести дгвба.
6. Какова максимально возможная длина строки? 
7. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками? 
8. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?

Уровень «5»
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».
Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.
Ввести массив строк и найти в нем максимальную по длине строку.1) Не учитывать случай, когда таких строк несколько2) Если строка с максимальной длиной не одна, вывести все.
В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Поменять местами слова в строках, состоящих из двух слов.
Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.
Уровень «5»
Вводится строка . Оставить в строке только один экземпляр каждого встречающегося символа.
Вводится строка и символ. Определить, как часто встречается определенный символ в строке.
Определить, является ли введенная строка палиндромом. (Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления)
Перевернуть строку, т.е. последние символы должны стать первыми, а первые последними.
Вводится строка и две последовательности символов. Найти в строке первую последовательность символов и заменить ее второй.
Вставить в заданную позицию строки другую строку.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Уровень «5»
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».
Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.
Ввести массив строк и найти в нем максимальную по длине строку.1) Не учитывать случай, когда таких строк несколько2) Если строка с максимальной длиной не одна, вывести все.
В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Поменять местами слова в строках, состоящих из двух слов.
Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Уровень «5»
В телевизионном танцевальном марафоне с определением победителя с помощью телезрителей после каждого тура объявляется sms-голосование, в котором зрители указывают наиболее понравившуюся им пару из максимум 10 пар, которые участвуют в проекте. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет обрабатывать результаты sms-голосования по данному вопросу. Результаты голосования получены в виде номеров пар (каждый элемент списка соответствует одному sms-сообщению). Следует учитывать, что количество голосов в списке может быть очень велико. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших sms-сообщений N. В каждой из последующих N строк записан номер пары от 1 до 10.Пример входных данных:
 
4
2
10
3
2
 
Программа должна вывести список всех пар, встречающихся в списке, в порядке возрастания (неубывания) количества голосов, отданных за ту или иную пару, с указанием количества отданных за неё голосов. При этом каждая пара должна быть выведена ровно один раз вне зависимости от того, сколько раз она встречается в списке.Пример выходных данных для приведённого выше примера входных данных:
 
3 1
10 1
2 2Уровень «5»
В командных олимпиадах по программированию для решения предлагается не больше 12 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систему соревнований. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет статистически обрабатывать пришедшие запросы, чтобы определить наименее популярные задачи. Следует учитывать, что количество запросов в списке может быть очень велико, так как многие соревнования проходят с использованием сети Интернет. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших запросов N. В каждой из последующих N строк записано название задачи в виде текстовой строки. Длина строки не превосходит 100 символов, название может содержать буквы, цифры, пробелы и знаки препинания. Пример входных данных:
 
6
А+B
Крестики-Нолики
А+В
Простой делитель
А+В
Простой делитель
 
Программа должна вывести список из трёх задач, встречающихся в запросах наименьшее число раз, с указанием количества запросов по ним. Если в запросах упоминается менее трёх задач, то выведите информацию об имеющихся задачах. Если несколько задач имеют ту же частоту встречаемости, что и третья по частоте встречаемости задача, то выведите только одну из них. Пример выходных данных для приведённого выше примера входных данных:
 
Крестики-Нолики 1
Простой делитель 2
А+В 3

Уровень «5»
По каналу связи передаются данные в виде последовательности положительных целых чисел. Количество чисел заранее неизвестно, но не менее двух, признаком конца данных считается число 0. После данных передаётся контрольное значение. Оно равно такому максимально возможному произведению двух чисел из переданного набора, которое делится на 7, но не делится на 49. Если такое произведение получить нельзя, контрольное значение считается равным 1.
 Напишите эффективную, в том числе по памяти, программу, которая будет моделировать процесс приёма данных. Программа должна ввести все числа и контрольное значение и напечатать краткий отчёт, включающий количество принятых чисел, принятое контрольное значение, вычисленное контрольное значение и вывод о совпадении значений. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.
 
Описание входных данных.
 В каждой строке исходных данных содержится одно целое число. Сначала идут строки с основными данными — положительными числами, затем число 0 (признак окончания данных), в последней строке — контрольное значение.
 Программа должна вывести отчёт по форме, приведённой ниже в примере.  Пример входных данных:
 
6
7
8
9
0
64
 
Пример выходных данных для приведённого выше примера входных данных:
 
Введено чисел: 4
Контрольное значение: 64
Вычисленное значение: 63
Значения не совпали
Уровень «5»
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене каж¬дый район сам определяет, за какой балл нужно поставить какую оценку.
Районный методист решила, что оценку «отлично» должны получить 20% участников (целое число, с отбрасыванием дробной части).
Для этого она должна определить, какой балл должен был набрать ученик, чтобы получить «отлично».
Если невозможно определить такой балл, чтобы «отлично» получили ровно 20% участников, «отлично» должно получить меньше участников, чем 20%.
Если таких участников не окажется (наибольший балл набрали больше 20% участников) — эти и только эти ученики должны получить «отлично».
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран наименьший балл, который набра¬ли участники, получившие «отлично». Известно, что информатику сдавало больше 5-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник.
На вход программе сначала подаётся число учеников, сда-вавших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
 
<Фамилия> <Имя> <Номер школы> <Количество баллов>
 
где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,
<Имя> — строка, состоящая не более чем из 20 символов без пробелов,
<Номер школы> — целое число в диапазоне от 1 до 99,
<Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).
 
Пример входной строки:
Иванов Иван 50 87
Пример выходных данных:
78
Уровень «5»
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.
Районный методист решила выяснить номер школы, ученики которой набрали наибольший средний балл, с точностью до целых.
Программа должна вывести на экран номер такой школы и её средний балл.
Если наибольший средний балл набрало больше одной школы — вывести количество таких школ.
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.
На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
 
<Фамилия> <Имя> <Номер школы> <Количество баллов>
 
где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,
<Имя> — строка, состоящая не более чем из 20 символов без пробелов,
<Номер школы> — целое число в диапазоне от 1 до 99,
<Количество баллов> — целое число в диапазоне от 1 до 100.
Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).
Пример входной строки:
Иванов Иван 50 87
Пример выходных данных:
5 50 74 87
Другой вариант выходных данных:
7
Средний балл = 74
Уровень «5»
На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС.
Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для каждого вида бензина, сколько АЗС продают его дешевле всего. На вход программе в первой строке подается число данных о стоимости бензина. В каждой из последующих N строк находится информация в следующем формате:
<Компания> <Улица> <Марка> <Цена> где <Компания> – строка, состоящая не более, чем из 20 символов без пробелов, <Улица> – строка, состоящая не более, чем из 20 символов без пробелов, <Марка> – одно из чисел – 92, 95 или 98, <Цена> – целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках. <Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <цена> разделены ровно одним пробелом. Пример входной строки: Синойл Цветочная 95 2250 Программа должна выводить через пробел 3 числа — количество АЗС, продающих дешевле всего 92-й, 95-й и 98-й бензин соответственно. Если бензин какой-то марки нигде не продавался, то следует вывести 0.

Уровень «5»
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».
Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.
Ввести массив строк и найти в нем максимальную по длине строку.1) Не учитывать случай, когда таких строк несколько2) Если строка с максимальной длиной не одна, вывести все.
В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Поменять местами слова в строках, состоящих из двух слов.
Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.
Уровень «5»
Вводится строка . Оставить в строке только один экземпляр каждого встречающегося символа.
Вводится строка и символ. Определить, как часто встречается определенный символ в строке.
Определить, является ли введенная строка палиндромом. (Палиндром – это число, слово или фраза, одинаково читающиеся в обоих направления)
Перевернуть строку, т.е. последние символы должны стать первыми, а первые последними.
Вводится строка и две последовательности символов. Найти в строке первую последовательность символов и заменить ее второй.
Вставить в заданную позицию строки другую строку.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Уровень «5»
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».
Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.
Ввести массив строк и найти в нем максимальную по длине строку.1) Не учитывать случай, когда таких строк несколько2) Если строка с максимальной длиной не одна, вывести все.
В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.
Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.
Поменять местами слова в строках, состоящих из двух слов.
Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Уровень «5»
В телевизионном танцевальном марафоне с определением победителя с помощью телезрителей после каждого тура объявляется sms-голосование, в котором зрители указывают наиболее понравившуюся им пару из максимум 10 пар, которые участвуют в проекте. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет обрабатывать результаты sms-голосования по данному вопросу. Результаты голосования получены в виде номеров пар (каждый элемент списка соответствует одному sms-сообщению). Следует учитывать, что количество голосов в списке может быть очень велико. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших sms-сообщений N. В каждой из последующих N строк записан номер пары от 1 до 10.Пример входных данных:
 
4
2
10
3
2
 
Программа должна вывести список всех пар, встречающихся в списке, в порядке возрастания (неубывания) количества голосов, отданных за ту или иную пару, с указанием количества отданных за неё голосов. При этом каждая пара должна быть выведена ровно один раз вне зависимости от того, сколько раз она встречается в списке.Пример выходных данных для приведённого выше примера входных данных:
 
3 1
10 1
2 2Пояснение.
Программа читает все входные данные один раз, не запоминая все входные данные в массиве, размер которого равен N, а сразу подсчитывая в массиве пар, сколько голосов отдано за каждую из них. После окончания ввода производится одновременная сортировка массивов номеров пар и количества голосов, отданных за них, в порядке возрастания количества голосов; затем выводится список пар, за которые подано ненулевое число голосов, с указанием частоты встречаемости. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая. Ниже приведены примеры решения задания на языках Паскаль и Бейсик. Допускаются решения, записанные на других языках программирования. При оценивании решений на других языках программирования необходимо учитывать особенности этих языков программирования.
 
Пример правильной и эффективной программы на языке Паскаль: Пример правильной и эффективной программы на языке Бейсик:
Var n, i, j, t: integer;
Count, Names: array[1..10] of integer;
Begin
For i := 1 to 10 do
begin
Count[i] := 0;
Names[i] := i;
end;
ReadLn(N); {Считываем количество голосов}
for i:=1 to N do
begin
ReadLn(t); {считали очередную пару}
Count[t] := Count[t] + 1;{учитываем поданный голос}
end;
{Сортируем массивы Names и Count в порядке возрастания значений массива Count}
for i:=10 downto 2 do
for j:=2 to i do if Count[j-1]>Count[j] then
begin
t:=Count[j]; Count[j]:=Count[j-1]; Count[j-1]:=t;
t:=Names[j]; Names[j]:=Names[j-1]; Names[j-1]:=t;
end;
for i:=1 to 10 do
if Count[i] > 0 then
writeLn(Names[i], ' ', Count[i]);
end. DIM Count(10) AS INTEGER
DIM Names(10) AS INTEGER
FOR i = 1 TO 10
Count(i) = 0
Names(i) = iNEXT iINPUT N 'Считываем количество голосов
FOR i = 1 TO N
INPUT t 'считали пару
'Учитываем поданный голос
Count(t) = Count(t) + 1
NEXT i'Сортируем массивы Names и Count в порядке возрастания
'значений массива Count
FOR i = 10 TO 2 STEP -1
FOR j = 2 TO iIF Count(j - 1) > Count(j) THEN
t = Count(j): Count(j) = Count(j - 1): Count(j - 1) = t
t = Names(j): Names(j) = Names(j - 1): Names(j - 1) = t
END IF
NEXT j
NEXT iFOR i = 1 TO 10
IF Count(i) > 0 THEN PRINT Names(i), Count(i)
NEXT iEND
В командных олимпиадах по программированию для решения предлагается не больше 12 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систему соревнований. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет статистически обрабатывать пришедшие запросы, чтобы определить наименее популярные задачи. Следует учитывать, что количество запросов в списке может быть очень велико, так как многие соревнования проходят с использованием сети Интернет. Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших запросов N. В каждой из последующих N строк записано название задачи в виде текстовой строки. Длина строки не превосходит 100 символов, название может содержать буквы, цифры, пробелы и знаки препинания.Пример входных данных:
 
6
А+B
Крестики-Нолики
А+В
Простой делитель
А+В
Простой делитель
 
Программа должна вывести список из трёх задач, встречающихся в запросах наименьшее число раз, с указанием количества запросов по ним. Если в запросах упоминается менее трёх задач, то выведите информацию об имеющихся задачах. Если несколько задач имеют ту же частоту встречаемости, что и третья по частоте встречаемости задача, то выведите только одну из них. Пример выходных данных для приведённого выше примера входных данных:
 
Крестики-Нолики 1
Простой делитель 2
А+В 3
Пояснение.
Программа читает все входные данные один раз, не запоминая их в массиве, размер которого равен N, а составляя только список встретившихся задач и количества запросов по каждой из них. Во время чтения данных об очередной задаче просматривается список ранее сохранённых задач; если она уже есть в списке, то количество запросов по ней увеличивается на 1, иначе задача добавляется в массив упомянутых в запросах задач (при корректных данных размер массива не может быть больше 12). После окончания ввода производится сортировка массивов задач и количества запросов, отданных за них, в порядке возрастания количества запросов; затем выводится список из трёх первых задач с указанием частоты встречаемости (или весь список, если его длина меньше трёх). Вместо сортировки можно применить и алгоритм поиска трёх минимальных элементов в массиве или три первых итерации сортировки. Затем выводятся три первые (или найденные наименее популярные) задачи. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая. Ниже приведены примеры решения задания на языках Паскаль и Бейсик. Допускаются решения, записанные на других языках программирования. При оценивании решений на других языках программирования необходимо учитывать особенности этих языков программирования. Так, на языке C++ при считывании строковой переменной будет считано не всё название задачи, а только его первое слово, поэтому следует использовать функцию getline(cin,s); аналогичная проблема возникает и в языке Си
 
Пример правильной и эффективной программы на языке Паскаль: Пример правильной и эффективной программы на языке Бейсик:
Var n, Num, i, j, t: integer;
Count: array[1..12] of integer;
s: string;
Names: array[1..12] of string;
BeginNum:=0; {Число различных задач в списке запросов}
ReadLn(N); {Считываем количество запросов}
for i:=1 to N do
begin
ReadLn(S); {считали очередную задачу}
{Осуществляем её поиск в списке уже встретившихся}
j:=1;
while (j<=Num) and (s<>Names[j]) do j:=j+1;
{Если она найдена}
if j<=Num then {Увеличиваем счетчик числа запросов}
Count[j]:=Count[j]+1
else begin {Иначе добавляем задачу в конец списка}
Names[j]:=s;
Count[j]:=1;
Num:=Num+1
endend;
{Сортируем массивы Names и Count в порядке возрастания значений массива Count}
for i:=Num downto 2 do
for j:=2 to i do if Count[j-1]>Count[j] then
begin
t:=Count[j]; Count[j]:=Count[j-1]; Count[j-1]:=t;
s:=Names[j]; Names[j]:=Names[j-1]; Names[j-1]:=s;
end;
if Num >= 3 then Num := 3;
for i:=1 to Num do
WriteLn(Names[i], ' ', Count[i]);
end. По каналу связи передаются данные в виде последовательности положительных целых чисел. Количество чисел заранее неизвестно, но не менее двух, признаком конца данных считается число 0. После данных передаётся контрольное значение. Оно равно такому максимально возможному произведению двух чисел из переданного набора, которое делится на 7, но не делится на 49. Если такое произведение получить нельзя, контрольное значение считается равным 1.
 
Напишите эффективную, в том числе по памяти, программу, которая будет моделировать процесс приёма данных. Программа должна ввести все числа и контрольное значение и напечатать краткий отчёт, включающий количество принятых чисел, принятое контрольное значение, вычисленное контрольное значение и вывод о совпадении значений. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.
 
Описание входных данных.
 
В каждой строке исходных данных содержится одно целое число. Сначала идут строки с основными данными — положительными числами, затем число 0 (признак окончания данных), в последней строке — контрольное значение.
 
Программа должна вывести отчёт по форме, приведённой ниже в примере.
 
Пример входных данных:
 
6
7
8
9
0
64
 
Пример выходных данных для приведённого выше примера входных данных:
 
Введено чисел: 4
Контрольное значение: 64
Вычисленное значение: 63
Значения не совпали
Пояснение.
Произведение двух чисел будет кратно 7 и не кратно 49 в том и только в том случае, когда один из сомножителей делится на 7 и при этом не делится на 49, а второй — не делится на 7. Произведение будет максимальным, если оба сомножителя будут максимально возможными в своих группах. Искомое произведение не существует (контрольное значение считается равным 1), если в одной из указанных групп не окажется ни одного числа.
 
Программа читает входные данные, не запоминая числа в массиве, и находит два максимальных значения: максимум из чисел, кратных 7 и при этом не кратных 49, и максимум из чисел, не кратных 7. Затем программа вычисляет контрольное значение, равное произведению этих двух максимумов, и сравнивает его с введённым контрольным значением.
 
Пример правильной и эффективной программы на языке Паскаль.
 
program с4;
vark: integer; {введенное число}
n: integer; {количество чисел} pin: integer;{введенное контрольное значение}
m: integer; {максимум среди чисел, не кратных 7}
m7: integer; {максимум среди чисел, кратных 7 и не кратных 49}
р: integer; {вычисленное контрольное значение}
 
beginm:=0; m7:=0;
n: =0 ;
while true do begin
readln(k);
if k=0 then break ,
n:=n+1;
if (k mod 7 <> 0) and (k>m) then m:=k;
if (k mod 7 = 0) and (k mod 49 <> 0) and (k>m7)
then m7:= k ;
end;
readln(pin);
p:=m*m7;
if p=0 then p: = 1;
writeln('Введено чисел: ',n);
writeln('Контрольное значение ',pin);
writeln('Вычисленное значение ' ,P) ?
write ( 'Значения ');
if p<>pin then write ('не ') ;
writeln('совпали') ;
end.
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене каж¬дый район сам определяет, за какой балл нужно поставить какую оценку.
Районный методист решила, что оценку «отлично» должны получить 20% участников (целое число, с отбрасыванием дробной части).
Для этого она должна определить, какой балл должен был набрать ученик, чтобы получить «отлично».
Если невозможно определить такой балл, чтобы «отлично» получили ровно 20% участников, «отлично» должно получить меньше участников, чем 20%.
Если таких участников не окажется (наибольший балл набрали больше 20% участников) — эти и только эти ученики должны получить «отлично».
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран наименьший балл, который набра¬ли участники, получившие «отлично». Известно, что информатику сдавало больше 5-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник.
На вход программе сначала подаётся число учеников, сда-вавших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
 
<Фамилия> <Имя> <Номер школы> <Количество баллов>
 
где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,
<Имя> — строка, состоящая не более чем из 20 символов без пробелов,
<Номер школы> — целое число в диапазоне от 1 до 99,
<Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).
 
Пример входной строки:
Иванов Иван 50 87
Пример выходных данных:
78
Пояснение.
ПАСКАЛЬ
var k:array[0..100] of integer; (число учеников, набравших такой балл)
ch:char;
i,N,sh,ball,num,s:integer;
beginfor i: =0 to 100 do {обнуляем массив}
k[i]:=0;
readln(N); (считали количество строк}
for i:=1 to N do {перебираем все входные строки}
beginrepeatread(ch)
until ch=' ';{считана фамилия}
repeatread(ch) until ch=' ';(считано имя}
readln(sh,ball); {считали номер школы и балл ученика}
k[ball]:=k[ball]+l {считаем количество учеников, набравших такой балл}
end;
num:=N div 5; {вычисляем 20% от количества учеников}
S : = 0 ;
i : = 101 ;
whilе s < num do
begini:=i-l;
s:=s+k[i]
end;
if s=num then {"отлично" можно поставить ровно 20% участников}
writeln(i)
elseif k[i]=s then {наибольший балл набрало более 20% участников}
writeln(i)
else {ученики, набравшие "i" баллов, не получат "отлично"}
begini:=i+l;
while k[i]=0 do {ищем участников с большим баллом}
i:=i+l;
writeln(i)
endend.
На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС.
Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для каждого вида бензина, сколько АЗС продают его дешевле всего. На вход программе в первой строке подается число данных о стоимости бензина. В каждой из последующих N строк находится информация в следующем формате:
<Компания> <Улица> <Марка> <Цена> где <Компания> – строка, состоящая не более, чем из 20 символов без пробелов, <Улица> – строка, состоящая не более, чем из 20 символов без пробелов, <Марка> – одно из чисел – 92, 95 или 98, <Цена> – целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках. <Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <цена> разделены ровно одним пробелом. Пример входной строки: Синойл Цветочная 95 2250 Программа должна выводить через пробел 3 числа — количество АЗС, продающих дешевле всего 92-й, 95-й и 98-й бензин соответственно. Если бензин какой-то марки нигде не продавался, то следует вывести 0.
Пояснение.
varmin, ans: array[92..98] of integer;
c: char;
i, k, N, b: integer;
beginfor i:=92 to 98 do
beginmin[i]:=3001;{допустимо и другое число, >3000}
ans[i]:=0;
end;
readln(N);
for i:=1 to N do
beginrepeatread(c);
until c=' '; {считана компания}
repeatread(c);
until c=' '; {считана улица}
readln(k,b);
if min[k] > b then
beginmin[k]:=b;
ans[k]:=1
end else
if min[k] = b then ans[k]:=ans[k]+1;
end;
{если бензина какой─то марки не было,
ans[i] осталось равным 0}
writeln(ans[92],' ', ans[95],' ', ans[98])
end.