Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
К. Поляков, 2009-2013
Тема: Анализ программы, содержащей подпрограммы, циклы и ветвления.
Что нужно знать:
Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа. Первые два напечатанных числа это числа 9 и 81. Какое наибольшее число может быть напечатано третьим?
var x, y, z: integer;
r, a, b: integer;
begin
readln(x, у);
if у > x then begin
z:= x; x:= у; у:= z;
end;
a:= x; b:= y;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
writeln(a);
writeln(x);
write(у);
end.
Решение:
if у > x then begin
z:= x; x:= у; у:= z;
end;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
его суть сводится к тому, что меньшее из двух чисел, a и b, каждый раз заменяется на остаток от деления большего на меньшее до тех пор, пока этот остаток не станет равен нулю;
Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < (x mod 10) then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
Решение:
оператор |
условие |
x |
L |
M |
readln(x); |
251 |
? |
? |
|
L:=0; M:=0; |
0 |
0 |
||
while x > 0 do… |
251 > 0? да |
|||
L:=L+1; |
1 |
|||
if M<(x mod 10) then… |
M <(251 mod 10)? да |
|||
M:=x mod 10; |
1 |
|||
x:=x div 10; |
25 |
|||
while x > 0 do… |
25 > 0? да |
|||
L:=L+1; |
2 |
|||
if M<(x mod 10) then… |
M <(25 mod 10)? да |
|||
M:=x mod 10; |
5 |
|||
x:=x div 10; |
2 |
|||
while x > 0 do… |
2 > 0? да |
|||
L:=L+1; |
3 |
|||
if M<(x mod 10) then… |
M <(2 mod 10)? нет |
|||
x:=x div 10; |
0 |
|||
while x > 0 do… |
0 > 0? нет |
|||
writeln(L); write(M); |
3 |
5 |
while x > 0 do begin
...
x:= x div 10; { отсечение последней цифры }
end;
здесь оставлены только те операторы, которые влияют на значение x
L:=L+1;
других операторов, меняющих значение L, в программе нет; поэтому после завершения цикла в переменной L действительно находится количество цифр
if M < (x mod 10) then begin
M:=x mod 10;
end;
учитывая, что x mod 10 это последняя цифра десятичной записи числа, получается что если эта цифра больше, чем значение M, она записывается в переменную M;
Возможные ловушки и проблемы:
|
Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 120.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=1;
while x > 0 do begin
L:=L+1;
M:= M*(x mod 8);
x:= x div 8;
end;
writeln(L); write(M);
end.
Решение:
поэтому можно сделать вывод, что в конце цикла переменная L будет равна количеству цифр введенного числа, записанного в восьмеричной системе счисления; таким образом, восьмеричная запись числа содержит ровно 3 цифры
Возможные ловушки и проблемы:
|
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 0 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
if x mod 2 = 1 then
M:= M + (x mod 10) div 2;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 0) then begin
M:=x mod 10;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if (M < x) and (x mod 2 = 1) then begin
M:= (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:=L+1;
if M < x then begin
M:= M + (x mod 10) * 2;
end;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 8);
x := x div 8;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 8);
x := x div 8;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 6);
x := x div 6;
end;
writeln(a); write(b);
end.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 5);
x := x div 5;
end;
writeln(a); write(b);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10
end;
writeln(a); write(b);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x>0 do begin
a:=a+1;
b:=b*(x mod 10);
x:= x div 10
end;
writeln(a); write(b);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=9;
while x > 5 do begin
L:= L + 1;
if M > (x mod 10) then M:= x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 5 do begin
L:= L + 1;
if M < (x mod 10) then M:= x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x>0 do begin
a:= a + 2;
b:= b + (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x>0 do begin
a:= a + 2;
b:= b + (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
var x, y, z: integer;
r, a, b: integer;
begin
readln(x, у);
if у > x then begin
z:= x; x:= у; у:= z;
end;
a:= x; b:= y;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
writeln(a);
writeln(x);
write(у);
end.
var x, y, z: integer;
r, a, b: integer;
begin
readln(x, у);
if у > x then begin
z:= x; x:= у; у:= z;
end;
a:= x; b:= y;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
writeln(a);
writeln(x);
write(у);
end.
var N, q, i: integer;
begin
read(N);
for i:=1 to N-1 do begin
if N mod i = 0 then q:=i
end;
write(q)
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x > 0 do begin
a:= a + 1;
b:= b * (x mod 10);
x:= x div 10;
end;
writeln(a); write(b);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x > 0 do begin
a:= a + 1;
b:= b + (x mod 100);
x:= x div 100;
end;
writeln(a); write(b);
end.
var x, a, b: integer;
begin
readln(x);
a:=0; b:=1;
while x > 0 do begin
a:= a + 1;
b:= b * (x mod 100);
x:= x div 100;
end;
writeln(a); write(b);
end.
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 10;
while x>0 do begin
с := x mod 10;
a := a+c;
if c<b then b := c;
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 10;
while x>0 do begin
с := x mod 10;
a := a+c;
if c<b then b := c;
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 10;
while x>0 do begin
с := x mod 10;
a := a+c;
if c<b then b := c;
x := x div 10;
end;
writeln(a); write(b);
end.
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 10;
while x>0 do begin
с := x mod 10;
a := a+c;
if c<b then b := c;
x := x div 10;
end;
writeln(a); write(b);
end.
1 Источники заданий:
Авторские разработки.
Тренировочные и диагностические работы МИОО.
Путимцева Ю.С. Информатика. Диагностические работы в формате ЕГЭ 2012. М.: МЦНМО, 2012.
28 http://kpolyakov.spb.ru