игра брюс 2048
Главная / Алгоритмы и дискретные структуры / Решение олимпиадных задач по информатике / Тест 3

Решение олимпиадных задач по информатике - тест 3

Упражнение 1:
Номер 1

Определите результат работы фрагмента программы на Паскале:

… for i:=1 to 10 do a[i]:=i-1; z:=0; d:=0; h=1; for i:=1 to 10 do begin if i mod 2 <> 0 then z:=z+a[i]; if a[i] mod 3 = 0 then d:=d*a[i]; if a[i] <= 0 then h:=h+1; end; write (z, ' ', d, ' ', h); …

Ответ:

 (1) 20 0 2 

 (2) 20 162 1 

 (3) 20 162 2 

 (4) 25 162 1 


Номер 2

Определите результат работы фрагмента программы на Паскале:

… for i:=1 to 10 do a[i]:=i-1; z:=0; d:=1; h:=1; for i:=1 to 10 do begin if i mod 2 <> 0 then z:=z+a[i]; if a[i] mod 3 = 0 then d:=d*a[i]; if a[i] <= 0 then h:=h+1; end; write (z, ' ', d, ' ', h); …

Ответ:

 (1) 20 2 2 

 (2) 20 0 1 

 (3) 20 0 2 

 (4) 20 0 0 


Упражнение 2:
Номер 1

Определите содержимое переменной math в результате работы программы на Паскале, фрагмент которой приведен ниже:

… for i:=1 to 5 do a[i]:=i-6; m:=0; for i:=1 to 5 do if a[i]>m then m:=a[i]; …

Ответ:

 (1)

 (2) -1 

 (3) -5 

 (4)

 (5)


Номер 2

Определите содержимое переменной math в результате работы программы на Паскале, фрагмент которой приведен ниже:

… for i:=1 to 5 do a[i]:=i-6; m:=a[1]; for i:=1 to 5 do if a[i]>m then a[i]:=m; …

Ответ:

 (1)

 (2) -1 

 (3) -5 

 (4)

 (5)


Номер 3

Определите содержимое переменной math в результате работы программы на Паскале, фрагмент которой приведен ниже:

… for i:=1 to 5 do a[i]:=i; m:=0; for i:=1 to 5 do if a[i]<m then m:=a[i]; …

Ответ:

 (1)

 (2) -1 

 (3) -5 

 (4)

 (5)


Номер 4

Определите содержимое переменной math в результате работы программы на Паскале, фрагмент которой приведен ниже:

… for i:=1 to 5 do a[i]:=i-5; m:=a[1]; for i:=1 to 5 do if a[i]<m then m:=a[i]; …

Ответ:

 -4 


Упражнение 3:
Номер 1

В результате выполнения программы, фрагмент которой приведен ниже, элементы одномерного массива примут значения …

const n=10; k=5; var a: array [1..n+1] of integer; … for i:=1 to n do a[i]:=i; for i:=k to n do a[i+1]:=a[i]; a[k]:=0; …

Ответ:

 (1) 1 2 3 4 0 5 5 5 5 5 5 

 (2) 1 2 3 4 0 5 6 7 8 9 

 (3) 1 2 3 4 5 0 6 7 8 9 10 

 (4) 1 2 3 4 0 5 6 7 8 9 10 


Номер 2

В результате выполнения программы, фрагмент которой приведен ниже, элементы одномерного массива примут значения …

const n=10; k=5; … for i:=1 to n do a[i]:=i; for i:=k to (n-1) do a[i]:= a[i+1]; …

Ответ:

 (1) 1 2 3 4 6 7 8 9 10 10 

 (2) 1 2 3 4 6 7 8 9 10 

 (3) 1 2 3 4 0 5 6 7 8 9 10 

 (4) 1 2 3 4 0 5 6 7 8 9 


Упражнение 4:
Номер 1

Что делает приведенная ниже программа на Паскале:

var a: string; b, i, j, st, n, s, x, k: integer; begin writeln ('введите число'); readln (a); n:=length(a); s:=0; for i:=1 to n do begin val (copy(a,n-i+1,1),x,k); st:=1; for j:=1 to n do st:=st*x; s:=s+st; end; val (a, x, k); if s=x then writeln ('+') else writeln ('-'); end.

Ответ:

 (1) программа определяет равенство числа сумме цифр этого числа, возведенных в math-ую степень (math - количество цифр числа) 

 (2) программа находит сумму чисел, у которых одинаково произведений цифр (всего math чисел) 

 (3) программа находит цифровой корень числа math


Номер 2

Предскажите результат выполнения программы на Паскале (фрагмент ниже):

… a:='1234'; n:=length(a); while (n>1) do begin s:=0; for i:=1 to n do begin val (copy(a,i,1),x,k); s:=s+x; end; str(s,a); n:=length(a); end; writeln (s); …

Ответ:

 1 


Номер 3

В приведенной ниже программе организован ввод предложения и вывод…

var a: array [1..20] of string; s: string; i, n, j,k:integer; begin readln (s); n:=length(s); j:=1; for i:=1 to n do if copy(s,i,1)=' ' then j:=j+1 else a[j]:=a[j]+copy(s,i,1); for i:=1 to j do write (a[i]); end.

Ответ:

 (1) этого же предложения без пробелов между словами 

 (2) содержимого массива а, содержащего слова введенного предложения 

 (3) количества букв в каждом слове предожения 

 (4) строку, состоящую из первых букв каждого слова, входящего в предложение 


Упражнение 5:
Номер 1

Назначение программы на Паскале…

var a: string; b, i, st, n, s, x, k:integer; begin readln (a); readln(b); n:=length(a); s:=0; st:=1; for i:=1 to n do begin val (copy(a,n-i+1,1),x,k); s:=s+x*st; st:=st*b; end; writeln (s); end.

Ответ:

 (1) переводить число a из b-ричной системы счисления (b<10) в 10-тичную 

 (2) переводить число a из 10-тичной системы счисления в b-ричную (b<10) 

 (3) находить цифровой корень числа а (цифровой корень числа получают суммированием, затем суммированием цифр полученной суммы и так до тех пор, пока вновь полученная сумма не будет сосотоять из одной цифры) 

 (4) получать сумму цифр числа 


Номер 2

Найдите ошибки в приведенной ниже программе на Паскале, которая выполняет перевод числа a из math-ричной системы счисления (b<10) в 10-тичную:

var a: string; b, i, st, n, s, x, k:integer; begin readln (a); readln(b); n:=length(a); s:=0; for i:=1 to n do begin val (copy(a,i,1),x,k); s:=s+x*st; st:=st*b; end; writeln (s); end.

Ответ:

 (1) переменной st не присвоено начальное значение, равное "1" 

 (2) функцией copy(a,i,1) в цикле по i идет "вырезка" символов не в обратном порядке. Правильно: copy(a,n-i+1,1) 

 (3) переменная st не "обнулена" в начале работы программы 

 (4) цикл по i должен работать до (n-1) 


Номер 3

Предскажите, какое содержимое будет находится в переменной s в результате работы программы на Паскале:

var a, b, s, x: integer; begin a:=25; b:=5; s:=0; while a<>0 do begin x:=a mod b; s:=s*10 +x; a:=a div b; writeln (s); end; end.

Ответ:

 1 


Упражнение 6:
Номер 1

Приведенная программа на Паскале позволяет …

var a, b, s, x: integer; begin readln (a); readln (b); s:=0; while a<>0 do begin x:=a mod b; s:=s*10 +x; a:=a div b; end; writeln (s); end.

Ответ:

 (1) переводить число a из 10-тичной системы счисления в b-ричную при b<10 

 (2) переводить число a из b-ричной системы счисления при b<10 в 10-тичную 

 (3) находить цифровой корень числа а (цифровой корень числа получают суммированием, затем суммированием цифр полученной суммы и так до тех пор, пока вновь полученная сумма не будет состоять из одной цифры) 

 (4) получать сумму цифр числа, возведенных в степень (значение степени равно количеству цифр в числе) 


Номер 2

Найдите ошибки в приведенной ниже программе на Паскале, которая выполняет перевод числа math из 10-тичной в math-ричную систему счисления (b<10):

var a, b, s, x: real; begin readln (a); readln (b); s:=0; while (a<>0) do begin x:=a mod b; s:=s+x; a:=a div b; end; writeln (s); end.

Ответ:

 (1) накапливание сумы цифр неверно: math. Правильно: math 

 (2) неверно выбран тип данных для переменных. В программе используются целочисленные переменные 

 (3) условие выполнения тела цикла While неверно. Правильно: while (a>=0) do 

 (4) неверен порядок следования команд в теле цикла. Правильно: a:=a div b; x:=a mod b; s:=s+x; 


Номер 3
Предскажите результат выполнения программы на Паскале:
var a: string;
b, i, st, n, s, x, k:integer;
begin
a:='25'; b:=5; s:=0; st:=1;
n:=length(a);
for i:=1 to n do
begin
val (copy(a,n-i+1,1),x,k); s:=s+x*st; st:=st*b;
end;
writeln (s);
end.

Ответ:

 15 


Упражнение 7:
Номер 2
При совершении арифметических операций с "цифрами", хранящимися в строковых переменных используют процедуру (функцию) преобразования данных:

Ответ:

 (1) Val (у, х, p) 

 (2) Str (х, у) 

 (3) Round (х) 

 (4) Trunc (х)  


Номер 3
Для получения переноса в соседний разряд в результате арифметических операций с "цифрами", хранящимися в элементах массива (при работе со "сверхбольшими" числами) используют арифметическую операцию:

Ответ:

 div 


Упражнение 8:
Номер 1

Приведенная программа на Паскале реализует алгоритм …

const m=…; var a, rez: array [1..m] of byte; i, n, x, k: integer; stroka: string; begin readln (stroka); readln (x); n:= length (stroka); for i:=1 to n do val (copy(stroka, i, 1), a[i], k); for i:=1 to n do rez[i]:= a[i] * x; for i:=n downto 2 do begin rez[i-1]:= rez[i-1]+rez[i] div 10; rez[i]:= rez[i] mod 10; end for i:=1 to n do write (rez[i]); end.

Ответ:

 (1) поразрядного умножения числа на цифру, вводимых с клавиатуры 

 (2) перевода числа из 10-тичной системы счисления в math-ричную 

 (3) перевода числa из х-ричной системы счисления в 10-тичную 

 (4) нахождения суммы цифр числа, возведенных в степень math 


Номер 2

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

const m=…; var a, rez: array [1..m] of byte; i, n, x, k: integer; stroka: string; begin readln (stroka); readln (x); n:= length (stroka); for i:=1 to n do val (copy(stroka, i, 1), a[i], k); for i:=1 to n do rez[i]:= a[i] * x; for i:=n downto 2 do begin rez[i-1]:= rez[i-1]+rez[i] mod 10; rez[i]:= rez[i] div 10; end for i:=1 to n do write (rez[i]); end.

Ответ:

 (1) неверно:rez[i-1]:= rez[i-1]+rez[i] mod 10. Правильно:rez[i-1]:= rez[i-1]+rez[i] div 10  

 (2) неверно: rez[i]:= rez[i] div 10. Правильно:rez[i]:= rez[i] mod 10 

 (3) неверно:for i:=n downto 2 do. Правильно:for i:=2 to n do 

 (4) неверно:val(copy(stroka, i, 1), a[i], k). Правильно:str(copy(stroka, i, 1), a[i], k) 


Номер 3
В результате приведенной программы на Паскале на экран выводится:
const 	m=…;
var a, rez: array [1..m] of byte;
 i, n, x, k: integer;
 stroke: string;
begin
 stroke:='1234'; x:=5; n:= length (stroka);
 for i:=1 to n do val (copy(stroka, i, 1), a[i], k);
 for i:=1 to n do rez[i]:= a[i] * x;
 for i:=n downto 2 do
  begin
  rez[i-1]:= rez[i-1]+rez[i] div 10;
  rez[i]:= rez[i] mod 10;
  end
 for i:=1 to n do write (rez[i]);
end.

Ответ:

 6170 




Главная / Алгоритмы и дискретные структуры / Решение олимпиадных задач по информатике / Тест 3