Перейти к содержанию

Исправление ошибок в программах

Материал из Викиучебника — открытых книг для открытого мира

Максимум

[править]

На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество нечётных чисел в исходной последовательности и максимальное нечётное число. Если нечётных чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Вот она:

const n = 4;
var i, x: integer;
var maximum, count: integer;
begin
  count := 0;
  maximum := 999; // <- ошибка
  for i := 1 to n do begin
    read(x);
    if x mod 2 <> 0 then begin
      count := count + 1;
      if x > maximum then maximum := i // <- ошибка
    end
  end;
  if count > 0 then begin
    writeln(count);
    writeln(maximum)
  end
  else writeln('NO')
end.

Решение:

const
  n = 4;

var
  i, x: integer;

var
  maximum, count: integer;

begin
  count := 0;
  maximum := 0; // <-
  for i := 1 to n do 
  begin
    read(x);
    if x mod 2 <> 0 then begin
      count := count + 1;
      if x > maximum then maximum := x // <-
    end
  end;
  if count > 0 then begin
    writeln(count);
    writeln(maximum)
  end
  else writeln('NO')
end.

Сумма чётных цифр

[править]

Требовалось написать программу, которая вводит с клавиатуры натуральное число N, не превышающее 109, и выводит сумму чётных цифр в десятичной записи этого числа или 0, если чётных цифр нет. Программист торопился и написал программу неправильно. Вот она:

var N: longint;
    s: integer;
begin
  readln(N);
  s := 0;
  while N > 1 do begin // <- ошибка
    if N mod 2 = 0 then begin // <- ошибка
      s := N mod 10; // <- ошибка
    end;
    N := N div 10;
  end;
  write(s);
end.

Решение:

var
  N: longint;
  s: integer;

begin
  readln(N);
  s := 0;
  while N > 0 do  // <-
  begin
    if N mod 10 mod 2 = 0 then begin // <-
      Inc(s, N mod 10) // <-
    end;
    N := N div 10;
  end;
  write(s);
end.