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

Раздел Информатика
Класс 10 класс
Тип Тесты
Автор
Дата
Формат docx
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Контрольная работа на тему «Строковый тип данных»

Уровень «3»

  1. Дано количество строк. Вводятся строки. Определить и вывести через запятую длину каждой строки .

  2. Вводится слово "математика" , получить из него слово "тематика".

  3. Вводится слово "Язык", "Turbo", "Pascal" , получить из них фразу "Язык Turbo Pascal".

  4. Найти позицию буквы «а» в введенной строке, если таковой буквы нет, то вывести 0.

  5. Вводится слово "Позитроника", получить из него слово "трон".

  6. Преобразовать число 105 в строку, а строку "67" в число 67 и склеить полученную строку и полученное числох.

  7. Вводится слово "МaМа",преобразовать его в "МAМА".

  8. Какова максимально возможная длина строки?

  9. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками?

  10. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?

Уровень «4»

1. Составить программу на языке Pascal для решения следующей задачи: Дана строка. Заменить в этой строке все буквы «о» на буквы «а». Если букв «о» не встречено в строке, то вывести на экран сообщение «Нет буквы «о»

2. Составить программу на языке Pascal для решения следующей задачи:
Дано слово. Добавить к нему в начало и конец столько звездочек, сколько букв в слове. Полученный результат вывести на экран.

3. Через пробел вводится строка: имя и фамилия ученика через пробел, фамилия может состоять максимум из 25 символов, имя-максимум из 15 символов. Пример входной строки: Иванов Иван. Вывести на экран строку, в которой через запятую и пробел записаны сначала имя , а потом фамилия. Пример выходной строки: Иван, Иванов

4.На вход программе подается число строк, после чего вводятся сами строки, найти самую короткую и самую длинную строки и удалить их.

5. Вводится слово. Поменять в словах местами буквы(1 с последней 2 с предпоследней и тд.) не меняя их положение в строке. То есть если вводится абвгд должно вывести дгвба.

6. Какова максимально возможная длина строки?

7. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками?

8. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?

Уровень «3»

  1. Дано количество строк. Вводятся строки. Определить и вывести через запятую длину каждой строки .

  2. Вводится слово "математика" , получить из него слово "тематика".

  3. Вводится слово "Язык", "Turbo", "Pascal" , получить из них фразу "Язык Turbo Pascal".

  4. Найти позицию буквы «а» в введенной строке, если таковой буквы нет, то вывести 0.

  5. Вводится слово "Позитроника", получить из него слово "трон".

  6. Преобразовать число 105 в строку, а строку "67" в число 67 и склеить полученную строку и полученное числох.

  7. Вводится слово "МaМа",преобразовать его в "МAМА".

  8. Какова максимально возможная длина строки?

  9. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками?

  10. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?

Уровень «4»

1. Составить программу на языке Pascal для решения следующей задачи: Дана строка. Заменить в этой строке все буквы «о» на буквы «а». Если букв «о» не встречено в строке, то вывести на экран сообщение «Нет буквы «о»

2. Составить программу на языке Pascal для решения следующей задачи:
Дано слово. Добавить к нему в начало и конец столько звездочек, сколько букв в слове. Полученный результат вывести на экран.

3. Через пробел вводится строка: имя и фамилия ученика через пробел, фамилия может состоять максимум из 25 символов, имя-максимум из 15 символов. Пример входной строки: Иванов Иван. Вывести на экран строку, в которой через запятую и пробел записаны сначала имя , а потом фамилия. Пример выходной строки: Иван, Иванов

4.На вход программе подается число строк, после чего вводятся сами строки, найти самую короткую и самую длинную строки и удалить их.

5. Вводится слово. Поменять в словах местами буквы(1 с последней 2 с предпоследней и тд.) не меняя их положение в строке. То есть если вводится абвгд должно вывести дгвба.

6. Какова максимально возможная длина строки?

7. Какая функция (процедура) является аналогом операции сцепления (+) при работе со строками?

8. Каков будет результат выполнения операции сцепления, если длина результирующей строки превысит значение 255?

Уровень «5»

  1. Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».

  2. Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.

  3. Ввести массив строк и найти в нем максимальную по длине строку.
    1) Не учитывать случай, когда таких строк несколько
    2) Если строка с максимальной длиной не одна, вывести все.

  4. В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.

  5. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

  6. Поменять местами слова в строках, состоящих из двух слов.

  7. Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Уровень «5»

  1. Вводится строка . Оставить в строке только один экземпляр каждого встречающегося символа.

  2. Вводится строка и символ. Определить, как часто встречается определенный символ в строке.

  3. Определить, является ли введенная строка палиндромом. (Палиндром - это число, слово или фраза, одинаково читающиеся в обоих направления)

  4. Перевернуть строку, т.е. последние символы должны стать первыми, а первые последними.

  5. Вводится строка и две последовательности символов. Найти в строке первую последовательность символов и заменить ее второй.

  6. Вставить в заданную позицию строки другую строку.

  7. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

Уровень «5»

  1. Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».

  2. Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.

  3. Ввести массив строк и найти в нем максимальную по длине строку.
    1) Не учитывать случай, когда таких строк несколько
    2) Если строка с максимальной длиной не одна, вывести все.

  4. В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.

  5. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

  6. Поменять местами слова в строках, состоящих из двух слов.

  7. Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.


Уровень «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»

  1. Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».

  2. Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.

  3. Ввести массив строк и найти в нем максимальную по длине строку.
    1) Не учитывать случай, когда таких строк несколько
    2) Если строка с максимальной длиной не одна, вывести все.

  4. В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.

  5. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

  6. Поменять местами слова в строках, состоящих из двух слов.

  7. Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Уровень «5»

  1. Вводится строка . Оставить в строке только один экземпляр каждого встречающегося символа.

  2. Вводится строка и символ. Определить, как часто встречается определенный символ в строке.

  3. Определить, является ли введенная строка палиндромом. (Палиндром - это число, слово или фраза, одинаково читающиеся в обоих направления)

  4. Перевернуть строку, т.е. последние символы должны стать первыми, а первые последними.

  5. Вводится строка и две последовательности символов. Найти в строке первую последовательность символов и заменить ее второй.

  6. Вставить в заданную позицию строки другую строку.

  7. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

Уровень «5»

  1. Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. В самом длинном слове заменить все буквы «a» на «b».

  2. Дан текст. Определите процентное отношение строчных и прописных букв к общему числу символов в нем.

  3. Ввести массив строк и найти в нем максимальную по длине строку.
    1) Не учитывать случай, когда таких строк несколько
    2) Если строка с максимальной длиной не одна, вывести все.

  4. В строке, состоящей из слов, разделенных пробелами, определить длину кратчайшего и самого длинного слов.

  5. Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

  6. Поменять местами слова в строках, состоящих из двух слов.

  7. Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Уровень «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) = i

NEXT i

INPUT 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 i

IF 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 i

FOR i = 1 TO 10

IF Count(i) > 0 THEN PRINT Names(i), Count(i)

NEXT i

END

В командных олимпиадах по программированию для решения предлагается не больше 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;

Begin

Num:=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

end

end;

{Сортируем массивы 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;

var

k: integer; {введенное число}

n: integer; {количество чисел} pin: integer;{введенное контрольное значение}

m: integer; {максимум среди чисел, не кратных 7}

m7: integer; {максимум среди чисел, кратных 7 и не кратных 49}

р: integer; {вычисленное контрольное значение}

begin

m:=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;

begin

for i: =0 to 100 do {обнуляем массив}

k[i]:=0;

readln(N); (считали количество строк}

for i:=1 to N do {перебираем все входные строки}

begin

repeat

read(ch)

until ch=' ';{считана фамилия}

repeat

read(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

begin

i:=i-l;

s:=s+k[i]

end;

if s=num then {"отлично" можно поставить ровно 20% участников}

writeln(i)

else

if k[i]=s then {наибольший балл набрало более 20% участников}

writeln(i)

else {ученики, набравшие "i" баллов, не получат "отлично"}

begin

i:=i+l;

while k[i]=0 do {ищем участников с большим баллом}

i:=i+l;

writeln(i)

end

end.

На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС.

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

<Компания> <Улица> <Марка> <Цена> где <Компания> - строка, состоящая не более, чем из 20 символов без пробелов, <Улица> - строка, состоящая не более, чем из 20 символов без пробелов, <Марка> - одно из чисел - 92, 95 или 98, <Цена> - целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках. <Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <цена> разделены ровно одним пробелом. Пример входной строки: Синойл Цветочная 95 2250 Программа должна выводить через пробел 3 числа - количество АЗС, продающих дешевле всего 92-й, 95-й и 98-й бензин соответственно. Если бензин какой-то марки нигде не продавался, то следует вывести 0.

Пояснение.

var

min, ans: array[92..98] of integer;

c: char;

i, k, N, b: integer;

begin

for i:=92 to 98 do

begin

min[i]:=3001;{допустимо и другое число, >3000}

ans[i]:=0;

end;

readln(N);

for i:=1 to N do

begin

repeat

read(c);

until c=' '; {считана компания}

repeat

read(c);

until c=' '; {считана улица}

readln(k,b);

if min[k] > b then

begin

min[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.


© 2010-2022