Задачи по программированию на выпускных экзаменах в школах Израиля

Фрайман Зэев

ЗАДАЧИ ПО ПРОГРАММИРОВАНИЮ НА ВЫПУСКНЫХ ЭКЗАМЕНАХ В ШКОЛАХ ИЗРАИЛЯ

От редакции. Обучение программированию в школе в настоящее время столкнулось с большими проблемами. Существо проблем кроется в быстром развитии прикладного программного обеспечения, позволившего специалистам общаться с компьютером в рамках привычных для них понятий и метафор, не обращаясь к универсальным языкам, программирования. Тем самым, отпала необходимость массового обучения языкам программирования, которые на протяжении предыдущих двух десятилетий быили единственным способом общения с компьютером. В то же время, программирование как способ управления компьютером является важным педагогическим инструментом для овладения учеником собственными интеллектуальными ресурсами. Двадцать лет изучения информатики (фактически, программирования) в школе создали методическую базу, определяющую значительную роль этого предмета в формировании общей культуры1 в школе.

Во многих странах программирование в том или ином виде является одним из основные предметов, изучаемые в старшей школе. По окончании школы1 учащиеся сдают экзамены1 разныа уровней сложности. Нам кажется, что представляет интерес знакомство с уровнем требований, предъявляемым к выпускникам в других странах. Мы1 приводим здесь в качестве примера задания, предлагавшиеся на вытускныа экзаменах в школах Израиля тем учащимся, которые выбрали в качестве специализации «Computer science». Зэев Фрайман, приславший задания в редакцию - вытускник Пензенского педагогического университета, преподавал в Первой Пензенской гимназии. Сейчас он преподает в физико-математических классах г. Беэр-Шева в Израиле.

Задача 2.

Дана часть программы (на языке Turbo Pascal). Предполагается, что вводимые данные относятся к маленьким и большим буквам английского алфавита; ввод завершается с введением знака «точка»:

var

Ch: char; begin

read(Ch);

while Ch < > '.' do begin

if (Ch='A') or (Ch= 'a') thenwrite('z') else write((pred(Ch)); read(Ch) end end;

ЧАСТЬ № 1

Задача 1.

Напишите алгоритм, принимающий трехзначное положительное число и выдающий сообщение «Одинаковые цифры», если число составлено из одинаковых цифр, -или «Разные цифры», если не все цифры в числе одинаковые.

а. Каким будет вывод на экран, если ввод ZaBzdA?

b. Приведите, по крайней мере, два примера ввода, которые приводят к выводу на экран zaBzdA.

c. Измените приведенный фрагмент программы так, чтобы для каждой введенной буквы на экран выводилась бы следующая буква английского алфавита - по кругу: при вводе z выводится а, при вводе Z - А.

Задача 3.

Приведен фрагмент программы, который должен считать количество цифр в целом положительном числе. Фрагмент содержит ошибку.

readln(N); Count:=1;

while (N div 10) > 0 do

Count:=Count+1;

writeln

a. Приведите пример ввода, для которого будет получен правильный результат.

b. Приведите пример ввода, для которого не будет получен правильный результат.

с. Исправьте приведенный фрагмент так, чтобы правильный результат получался для любого целого положительного числа.

Задача 4.

Компания по производству музыкальных дисков решила хранить правильно организованным образом важную для нее информацию, использовав для этого следующие поля:

• вид музыки (Р - рок, П - поп, Д -дане, Т - транс);

• номер диска по каталогу (числа из диапазона 1..150);

• год выпуска;

• цена по каталогу (числа из диапазона 50..150);

• запись в новой аранжировке (да-нет).

a. Напишите необходимые определения типа данных (DiskType) для хранения этой информации.

b. Предположим, что задано описание Var Disk : DiskType. Напишите команду выбора, позволяющую снизить наполовину цену диска, если он был выпущен ранее 1980 года и для записи не была использована новая аранжировка.

Задача 5.

Задано следующее описание: const N=50 ;

type ArrayType=array[1. .N] of integer; var A:ArrayType;

Max,Min:integer;

a. procedure MaxMin(B : ArrayType ; Maxi ,Mini : integer);

b. procedure MaxMin ( B : ArrayType ; var Maxi : integer; var Mini : integer) ;

c. procedure MaxMin ( A : integer ; var Maxi : integer; var Mini : integer) ;

d. procedure MaxMin ( var Maxi : integer; var Mini : integer ; B : ArrayType) ;

e. procedure MaxMin( B: array[1. .N] of integer ; var Maxi : integer; var Mini : integer) ;

Рисунок 1

3. Фрайман

b d f r d g k c b h

b. Сформулируйте назначение функции.

c. Функция выполняет свое назначение с помощью массива. Объясните, почему в этом нет необходимости.

d. Напишите измененный вариант функции - без использования массива.

Задача 7.

Задан заголовок функции: function Smaller (Letterl, Letter2 : char) : boolean;

Функция принимает в качестве параметров две буквы и возвращает «истина», если первая буква «меньше» второй, - в противном случае функция возвращает «ложь».

Задано описание: type CharArray=array [1.. 100] of char.

Задан заголовок функции: function Substring- (S: CharArray): integer.

Функция принимает в качестве параметра массив букв и возвращает длину самого длинного подмассива, отсортированного только по возрастанию. Например, для массива

функция возвращает 4 (bdfr).

Процедура должна принимать в качестве параметра массив А типа ArrayType, а возвращает переменные Max и Min (наибольшее и наименьшее значения в массиве). Вызов процедуры осуществляется обращением MaxMin (A, Max, Min).

Укажите, какие из заголовков (рисунок 1) верные, а какие - нет; ответ следует обосновать.

ЧАСТЬ № 2

Задача 6.

Приведена функция, которая принимает в качестве параметра целое положительное число.

function Count_k_pairs (K: integer): integer; var

Num, Count, I : integer; A:array[1..10] of integer; begin

for I:=1 to 10 do readln(A[I]); Count:=0; for I:=1 to 9 do if ( A[I]+A[I+1] ) = K then Count:=Count+1; Count_k_pairs:=Count end; { Count_k_pairs }

a. Какой результат возвращает функция для к = 15, если ввод - следующая серия чисел: 10 5 8 7 8 4 14 1 3 9?

a. Напишите полностью функцию Smaller.

b. Напишите функцию Substring с использованием функции Smaller.

Задача 8.

Задана рекурсивная функция

function Secret (N , A : integer): integer; begin

if N = A then Secret:=1

else if N < A then Secret:=0 else

Secret:=Secret (N- A, A)+1 end; {Secret }

a. Что возвращает функция при обращении к ней Secret (6, 2)?

b. Что возвращает функция при обращении к ней Secret (7, 3)?

c. Сформулируйте назначение функции.

d. Напишите нерекурсивную функцию, которая принимает такие же параметры и выполняет то же назначение.

ЧАСТЬ № 3

Задача 9.

Перед выдачей разрешения на начало деятельности новой компании мобильной телефонии, министерство связи решило провести изучение потребительского рынка.

В опросе участвовали 100 клиентов, каждому из которых был присвоен номер (1..100). К аппарату каждого клиента был подключен прибор, считающий число помех связи в месяц.

Напишите программу, которая принимает в качестве ввода 100 пар сообщений (по одной паре для каждого клиента): первое сообщение - число помех в месяц для первого месяца проведения исследования (опроса), второе - аналогичный показатель для второго месяца. Программа выводит в качестве результата три сообщения:

1. Сообщение - было ли в общей сложности число помех во второй месяц меньше, чем в первый (для всех клиентов без исключения).

2. Число клиентов, у которых среднее число помех (за два месяца) больше, чем общее среднее число помех (за два месяца).

3. Номер клиента, у которого число помех в первый месяц наиболее близко к среднему числу помех для всех клиентов в первый месяц. Можно предположить, что существует только один такой клиент.

Напишите программу для решения задачи - с использованием всех необходимых процедур и функций.

Задача 10.

Для улучшения рабочей атмосферы в компании «Плавильный котел» была назначена специальная комиссия. Прежде всего было решено собрать точную информацию о работниках компании, от которых потребовалось сообщить следующие данные: возраст (целое число из диапазона 14..20), пол и месяц рождения. После сбора данных было решено ответить на следующие вопросы:

a. Является ли возрастная группа 18-летних «сбалансированной» (число мужчин не превышает более чем на 5 число женщин).

b. В каком месяце родилось меньше всего работников компании.

c. В каком месяце (месяцах) родилось больше работников-женщин, чем работников-мужчин.

Напишите программу (с использованием всех необходимых процедур и функций), собирающую данные о 200 работниках компании и сообщающую требуемые сведения.

З. Фрайман

ОТВЕТЫ К НЕКОТОРЫМ ЗАДАЧАМ

Задача 2.

var

Ch: char; begin

read(Ch);

while Ch < > '.' do begin

if

end end;

Задача 3.

readln(N); Count := 0; while N > 0 do begin

N := N div 10; Count := Count+1 end; writeln(Count);

Задача 4.

DiskType = record

Kind:char; Num:integer; Year:integer; Price:real; New:boolean; end

Задача 6.

function Ccun^_k_pairs(K : integer) : integer; var

Num1, Num2, Count, I : integer; begin

Count := 0; readln(Num1); for I := 1 to 9 do begin

readln(Num2);

if ( Num1+Num2 ) = K then

Count := Count+1; Num1 := Num2

end;

Count_k_pairs := Count end; { Count_k_pairs }

Задача 7.

function Substring (S : CharArray) : integer; var

MaxLength , I , Count:integer; begin

Maxlength := 0 ; Count := 1; for I := 1 to 99 do if Smaller(S[I],S[I+1]) then Count := Count+1 else

begin

if Count > MaxLength then MaxLength : = Count; Count := 1;

end

if Count > MaxLength then

MaxLength := Count; Substring := MaxLength; end;

(Jp Наши авторы: 2002. Our authors, 2002.

Фрайман Зэев,

преподаватель, экономический обозреватель, г. Беэр-Шева, Израиль.