- •Задания олимпиады по информатике памяти в.А. Буцика (12.03.2016)
- •Задание 1 (3 балла)
- •«Вытянем» растровое изображение в цепочку: сначала первая (верхняя) строка, потом – вторая, и т.Д.:
- •В этой полоске 24 ячейки, черные заполним единицами, а белые – нулями:
- •Задание 2 (3 балла)
- •Решение:
- •Задание 3 (3 балла)
- •Поскольку нас интересуют только маршруты, не проходящие через пункт в, столбец и строку, соответствующие этому пункту, можно удалить из таблицы:
- •Решение:
- •Решение:
- •Решение:
- •Решение:
- •Решение:
- •Решение:
- •Задание 13 (3 балла)
- •Решение:
- •Задание 14 (3 балла)
- •Задание 15 (4 балла)
- •Задача 18 (5 баллов)
- •Задача 19 (5 баллов)
- •Задача 20 (5 баллов)
Задание 15 (4 балла)
При каком наибольшем введенном числе d после выполнения программы будет напечатано 55?
Паскаль |
Visual Basic |
var n, s, d: integer; begin readln(d); n := 0; s := 0; while s <= 365 do begin s := s + d; n := n + 5 end; write(n) end. |
Dim n, s, d As Integer d = InputBox("Введите d") n = 0 s = 0 While s <= 365 s = s + d n = n + 5 Wend Print n |
Решение – n будет равно 55 на 11 шаге цикла. Значит на десятом шаге значение не должно превысить 365, поэтому d=36.
Задание 16 (4 балла)
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль |
Visual Basic |
var k, s: integer; begin s:=0; k:=0; while s < 1024 do begin s:=s+10; k:=k+1; end; write(k); end. |
Dim k, s As Integer s = 0 k = 0 While s < 1024 s = s + 10 k = k + 1 Wend Print k |
Решение: 1024/10 (счетчик s=s+10) = 102.4, значит при превышении 1024 k=103
Задача 17 (5 баллов)
В представленном фрагменте программы значения одномерного массива задаются с помощью оператора цикла. Чему будет равно а(16)?
Паскаль |
Visual Basic |
var i: integer; a:array [0..100] of integer; begin for i:=1 to 10 do begin a[2*i-1]:=i; a[2*i]:=i*i; end; end. |
Dim a(1 To 100) As Integer Dim i As Integer For i = 1 To 10 a(2 * i - l) = i a(2 * i) = i * i Next
|
Решение Полученный массив= 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Ответ – 64
Задача 18 (5 баллов)
Определите, что будет напечатано в результате выполнения следующего алгоритма
Паскаль |
Visual Basic |
var a, b, t, M, R:integer; Function F(x:integer):integer; begin F:=x*x-10; end; begin a:=-20; b:=20; M:=a; R:=F(a); for t:= a to b do begin if (F(t)<R)then begin M:=t; R:=F(t); end; end; write(R,M); end. |
Function F(x) F = x * x - 10 End Function Dim a, b, t, M, R As Integer a = -20: b = 20 M = A: R = F(A) For t = a To B If F(t) < R Then M = t R = F(t) End If Next t Print R; M
|
Решение: Задача сводится к поиску значений Х и У минимума функции У=Х2-10. Для нее Х=0, У=-10. При выводе на печать У, затем Х мы получим -100.
Задача 19 (5 баллов)
Определите назначение данной программы и результат, полученный на экране. Если в программе присутствует ошибка предложите варианты к ее устранению:
Паскаль |
Visual Basic |
Program Strings; var d,d1:string; s, i: integer; begin d:='Люблю грозу в начале мая!'; d1:=' '; d:=d+d1; s:=0; for i:=1 to length(d) do begin if (d[i]=' ')and(d[i-1]<>' ') then inc(s); end; inc(s); writeln(s); end.
|
Dim d, d1 As String Dim s, i As Integer d = "Люблю грозу в начале мая!" d1 = " " d = d & d1 s = 0 For i = 2 To Len(d) If (Mid(d, i, 1) = " ") And (Mid(d, i - 1, 1) <> " ") Then s = s + 1 Next i s = s + 1 Print (s) |
Решение. Задача сводится к подсчету количества слов в строке. Выводимое значение 6 является ошибочным, поскольку при добавлении к обрабатываемой строке пробела алгоритм неверен. Пример исправления ошибки: заменить inc(s); на if d[i-1]<>' ' then inc(s);
