Тверской государственный университет
Опубликован: 06.10.2013 | Доступ: свободный | Студентов: 1373 / 335 | Длительность: 02:37:00
Специальности: Преподаватель
Лекция 4:

Разбор задач части С

< Лекция 3 || Лекция 4: 1234

Задача С2 (Простая программа на нахождение в массиве чисел максимального (минимального) числа, удовлетворяющего дополнительным условиям)

Привет

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

Рассмотрим один из вариантов задачи С2.

<<

Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести максимальное значение среди трехзначных элементов массива, не делящихся на 3. Если в исходном массиве нет искомого элемента, то вывести сообщение "не найдено".

Исходные данные объявлены, как показано в примере программы на Паскале. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

Вот начало программы на Паскале:

const 
  N = 20;
var
  a: array[1:N] of integer;
  i, j, max: integer;
begin
  for i := 1 to N do
    readln(a[i]);
  …
end.
    

В качестве ответа следует привести опущенный фрагмент программы.

>>

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

  1. До начала цикла по числу элементов массива правильно инициализировать переменную max, представляющую максимальное значение.
  2. В цикле проверить текущий элемент, удовлетворяет ли он дополнительным условиям, налагаемым на искомый элемент.
  3. Элемент, прошедший предварительный отбор – кандидата на максимум, сравнить с текущим максимальным элементом, хранимым в переменной max. Если кандидат больше текущего максимума, то изменить max, задав для него новое значение.

Решим проблему инициализации переменной max. При поиске максимального элемента, удовлетворяющего дополнительным условиям, начальное значение переменной max должно быть меньше любого возможного значения, претендующего на максимум. Поскольку в данной задаче максимум разыскивается среди трехзначных чисел, то при инициализации переменной max достаточно присвоить значение 99 (можно и меньше). Соответствующий оператор присваивания имеет вид:

max := 99;

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

(j > 99) and (j < 1000) and (j mod 3 <> 0)

Здесь переменная j играет роль кандидата. Конечно, для нее следовало бы выбрать другое содержательное имя, например, candidat, но приходится смиряться с требованиями, и не менять имена введенных переменных.

Третья проблема проста. Я не буду ее пояснять в отдельности, а приведу полный фрагмент программы на Паскале, который следует добавить в текст программы:

max := 99;
for i := 1 to N do
begin
  j := a[i]; 
  if (j > 99) and (j < 1000) and (j mod 3 <> 0) then   //кандидат
    if j > max then
      max = j;
end
if max = 99  then writeln("не найден") else writeln(max);
    

Поиск кандидата и проверку на максимум лучше отделять, как это сделано в нашей программе.

Не все школьники, представившие решение этой задачи, дали корректное решение. Написание даже простых программ для многих школьников является серьезной проблемой.

< Лекция 3 || Лекция 4: 1234
Мария Паршикова
Мария Паршикова
Александр Коротенко
Александр Коротенко
Курс "Подготовка к ЕГЭ по информатике". Знаю, что ответ верный, но система его не принимает. Пытался ввести его в разных формах (строчные, прописные, все, одна и т.д.)