"Методика решения задач № 24 по информатике ГИА-11"
методическая разработка
Автор: Бирюкова Елена Александровна, учитель информатики, МБОУ СОШ № 19, город Кореновск, Краснодарский край
В раздел основное полное образование
Методика
решения
задач 24
ГИА-11
Задача 1 Требовалось написать программу, при выполнении которой с
клавиатуры считывается натуральное число N, не превосходящее 10
9
,
и выводится максимальная цифра этого числа. Программист
торопился и написал программу неправильно.
var N: longint;
digit, max_digit: integer;
begin
readln(N);
max_digit := 9;
while N >= 10 do
begin
digit := N mod 10;
if digit > max_digit then
max_digit := digit;
N := N div 10;
end;
writeln(max_digit);
end.
1. Напишите, что выведет эта программа при вводе числа
423.
2. Найдите все ошибки в этой программе (их может быть
одна или несколько).
Для каждой ошибки:
1)
выпишите строку , в которой сделана ошибка;
2) укажите , как исправить ошибку, – приведите правильный
вариант строки .
Обратите внимание, что требуется найти ошибки в
имеющейся программе , а не написать свою, возможно,
использующую другой алгоритм решения .
Исправление ошибки должно затрагивать только строку , в
которой находится ошибка.
Последовательно выполните следующее.
var N: longint;
digit, max_digit: integer;
begin
readln(N);
max_digit := 9;
while N >= 10 do
begin
digit := N mod 10;
if digit > max_digit then
max_digit := digit;
N := N div 10;
end;
writeln(max_digit);
end.
N:=423; max_digit := 9;
1) 423>10, да
digit :=423 mod 10=3;
3>9, нет
N:=423 div 10=42;
2) 42>10, да
digit :=42 mod 10=2;
2>9, нет
N:=42 div 10=4;
3) 4>10 нет, цикл закончен
Ответ: max_digit = 9
Вывод программы при вводе числа 423.
var N: longint;
digit, max_digit: integer;
begin
readln(N);
while N >= 10 do
begin
digit := N mod 10;
if digit > max_digit then
max_digit := digit;
N := N div 10;
end;
writeln(max_digit);
end.
1 ошибка
За максимальный элемент
принимаем всегда
минимальное число
!
max_digit := 0;
max_digit := 9;
max_digit := 9;
max_digit := 0;
2 ошибка
var N: longint;
digit, max_digit: integer;
begin
readln(N);
max_digit := 9;
begin
digit := N mod 10;
if digit > max_digit then
max_digit := digit;
N := N div 10;
end;
writeln(max_digit);
end.
Не считывается
старшая цифра числа
Например, N=856
Когда N станет равным
8, цикл закончит свою
работу!
while N >= 10 do
while N > 0 do
while N >= 10 do
while N > 0 do
Задача 2
Требовалось написать программу, при выполнении которой
с клавиатуры считывается натуральное число N, не превосходящее
10
9
, и выводится количество цифр этого числа. Программист
торопился и написал программу неправильно:
var N: longint;
count: integer;
begin
readln(N);
count := 1;
while N > 1 do
begin
count := count + 1;
N := N div 10;
end;
writeln(count);
end.
Определите, что выведет программа при вводе числа
123.
Укажите одно число, для которого программа выводит
неверный результат.
Найдите все ошибки в этой программе (их может быть
одна или несколько).
Для каждой ошибки:
выпишите строку, в которой сделана ошибка;
укажите, как надо исправить ошибку - приведите
правильный вариант строки.
Обратите внимание, что требуется найти ошибки в
имеющейся программе, а не написать свою,
возможно, имеющую другой алгоритм решения.
Исправление ошибки должно затрагивать только
строку, в которой находится ошибка.
Последовательно выполните
следующее:
var N: longint;
count: integer;
begin
readln(N);
count:= 1;
while N > 1 do
begin
count:= count + 1;
N:= N div 10;
end;
writeln(count);
end.
N:=123; count :=1;
123>1, да
count :=2;
N:=123 div 10=12;
12>1, да
count :=3;
N:=12 div 10=1;
1>1, нет
Цикл завершён!
Ответ: count=3;
Ответ правильный!
Вывод программы при вводе числа 123.
Укажите одно число, для которого программа
выводит неверный результат.
var N: longint;
count: integer;
begin
readln(N);
count:= 1;
while N > 1 do
begin
count:= count + 1;
N:= N div 10;
end;
writeln(count);
end.
N:=223; count :=1;
223>1, да count :=2;
N:=223 div 10=22;
22>1, да count :=3;
N:=22 div 10=2;
2>1, да count :=4;
N:=2 div 10=0;
0>1, нет
Цикл завершён!
Ответ: count=4;
Ответ неправильный!
var N: longint;
count: integer;
begin
readln(N);
while do
begin
count:= count + 1;
N:= N div 10;
end;
writeln(count);
end.
count
:= 1;
count:= 0;
1 ОШИБКА
count:= 1;
count:= 0;
N > 1
N > 0
2 ОШИБКА
N > 1;
N > 0;
ОШИБКИ
Задача 3. Написать программу, при выполнении которой с клавиатуры считывается два натуральных числа N и M одинаковой размерности, не превосходящие 10 9 . Программа должна вычислить сумму старших разрядов этих чисел, сумму их младших разрядов, вывести наибольшую из этих сумм. Если суммы одинаковы, то одну из них. Программист торопился и написал программу неправильно.
var N, M: longint; S: integer;
begin
readln(N, M);
S := (N + M) mod 10;
while N > 0 do
begin
N := N div 10;
while M > 0 do
M := M div 10;
end;
If S>N + M then writeln(S) else
writeln(M+N)
;
end.
Вывод программы при вводе числа 517 и 834.
var N, M: longint; S: integer;
begin
readln(N, M);
S := (N + M) mod 10;
while N > 0 do
begin
N := N div 10;
while M > 10 do
M := M div 10;
end;
If S>N + M then writeln(S)
else writeln(M+N) ;
end.
N:=517; M:=834;
S:=(517 + 834) mod 10=1;
517>0, да N :=517 div 10=51;
834>10, да M := 834 div
10=83;
83>10, да M := 83 div 10=8;
8>10, нет M :=8;
51>0, да N :=51 div 10=5;
5>0, да N :=5 div 10=0;
S>N + M
1>0+8, нет M+N=8;
ОТВЕТ: 8
ОШИБКИ
var N, M: longint; S: integer;
begin
readln(N, M);
begin
N := N div 10;
while M > 10 do
M := M div 10;
end;
If S>N + M then writeln(S)
else writeln(M+N) ;
end.
S := N mod 10+ M mod 10 ;
S := (N + M) mod 10 ;
while N > 10 do
while N > 0 do
Сумма младших разрядов чисел N и
M
(487+516) mod 10=3
487 mod 10 + 516 mod 10
=7 + 6=13
Цикл работает пока N>10, тогда в N остаётся старший разряд, а не 0. Для эффективности работы цикл с M можно убрать, т.к. M и N одинаковой размерности.
В раздел основное полное образование