Алгоритмизация и программирование

  • doc
  • 06.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 5. Алгоритмизация и программирование.doc

Глава 8.        Алгоритмизация и программирование

Контрольные работы

Ветвления

Уровень A.  

1)      С клавиатуры вводится трёхзначное число. Нужно вывести ответ «Да», если все его цифры четные, и ответ «Нет» в остальных случаях.

2)      Требовалось написать программу, которая определяет, имеется ли среди введенных с клавиатуры положительных целых чисел а и Ь хотя бы одно четное. Была написана следующая программа:

нач

 цел a, b

 ввод a, b

 a:=mod(a,2)

 если a>0 то b:=mod(b,2) все

 если b>0 то

   вывод "четных чисел нет"

  иначе

   вывод "четное число есть"

 все

кон

var a, b: integer;

begin

readln(a, b);

a := a mod 2;

if a > 0 then b := b mod 2;

if b > 0 then

writeln ('четных чисел нет')

else

writeln ('четное число есть');

end.

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

а)       приведите пример таких чисел а, b, при которых программа неверно решает поставленную задачу;

б)      укажите, как, по вашему мнению, нужно доработать программу (не используя сложные условия), чтобы не было случаев ее неправильной работы;

в)      укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала один условный оператор со сложным условием.

Уровень B.  

1)      С клавиатуры вводится трёхзначное число. Нужно вывести ответ «Да», если все его цифры четные, и ответ «Нет» в остальных случаях. Если введено не трёхзначное число, должно быть выведено сообщение «Неверное число».

2)      Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:

нач

 вещ x, y

 ввод x, y

 если y >= -1 то

  если y <= sin(x) то

   если y >= x-1 то

    вывод "принадлежит"

   иначе

    вывод "не принадлежит"

   все

  все

 все

кон

var x,y: real;

begin

readln(x,y);

if y >= -1 then

if y <= sin(x) then 

if y >= x-1 then

write('принадлежит')

else

write('не принадлежит')

end.

Последовательно выполните следующее:

а)       приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу;

б)      укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы; это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы.

Уровень C.  

1)      С клавиатуры вводится целое число от 1 до 1000, обозначающая сумму в рублях. Программа должна напечатать эту сумму прописью, например:

двадцать один рубль

сто семьдесят три рубля

девятьсот пятнадцать рублей

2)      Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:

нач

 вещ x, y

 ввод x, y

 если y<=3-x*x то

  если y>=0 то

   если y>=x+1 то

    вывод "принадлежит"

   иначе

    вывод "не принадлежит"

   все

  все

 все

кон

var x,y: real;

begin

readln(x,y);

if y<=3-x*x then

if y>=0 then

if y>=x+1 then

write('принадлежит')

else

write('не принадлежит')

end.

Последовательно выполните следующее:

а)       приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу;

б)      укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы; это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы.


Контрольная работа

Циклы

Уровень A.  

1)      Определите значение переменной s после выполнения  фрагмента программы:

s:=0

k:=0

нц пока s < 1024

  s:=s+10

  k:=k+1

кц

s:=0;

k:=0;

while s < 1024 do begin

  s:=s+10;

  k:=k+1;

end;

2)      Определите значение переменной s после выполнения  фрагмента программы:

s:=0

нц для к от -3 до 5

  s:=s+к

кц

s:=0;

for k:=-3 to 5 do begin

  s:=s+k;

end;

3)      По каналу связи передается последовательность положительных целых чисел, все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается отдельно. Признаком конца передаваемой последовательности является число 0. После числа 0 передается контрольное значение – наибольшее число из последовательности, которое делится на 10.

Напишите эффективную программу, которая получает последовательность чисел и следующие за ней признак конца и контрольное значение, а также проверяет правильность контрольного значения. Программа должна напечатать отчет следующего вида:

Получено .. чисел

Полученное контрольное значение: ….

Вычисленное контрольное значение:…

Контроль пройден (или – контроль не пройден)

Уровень B.  

1)      Укажите наименьшее и наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 6:

цел x, L, M

ввод x

L:=0; M:=0

нц пока x > 0

  L:= L + 1

  M:= M + mod(x,10)

  x:= div(x,10)

кц

вывод L, нс

вывод M, нс

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.

2)      Определите значение переменной s после выполнения  фрагмента программы:

s:=0

нц для к от 1 до 5

  нц для j от 1 до k

    s:=s+к

  кц

кц

s:=0;

for k:=1 to 5 do

  for j:=1 to k do

    s:=s+k;

3)      По каналу связи передается последовательность положительных целых чисел, все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается отдельно. Признаком конца передаваемой последовательности является число 0. После числа 0 передается контрольное значение – наибольшее число, которое можно получить умножением двух различных элементов последовательности.

Напишите эффективную программу, которая получает последовательность чисел и следующие за ней признак конца и контрольное значение, а также проверяет правильность контрольного значения. Программа должна напечатать отчет следующего вида:

Получено .. чисел

Полученное контрольное значение: ….

Вычисленное контрольное значение:…

Контроль пройден (или – контроль не пройден)

Уровень C.  

1)      Ниже записана программа. Получив на вход число , эта программа печатает два числа,  и . Укажите максимальное и минимальное числа, при вводе которых алгоритм печатает сначала 3, а потом 7.

цел x, L, M

ввод x

L:=0; M:=0

нц пока x > 0

  L:= L + 1

  если mod(x,2) = 1 то

    M:= M + div(mod(x,10),2)

  все

  x:= div(x,10)

кц

вывод L, нс

вывод M, нс

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.

2)      Определите значение переменной s после выполнения  фрагмента программы:

s:=0

нц для к от 1 до 5

  нц для j от 1 до k

    нц для m от 1 до j

      s:=s+к+j+m

    кц

  кц

кц

s:=0;

for k:=1 to 5 do

  for j:=1 to k do

    for m:=1 to j do

      s:=s+k+j+m;

3)      По каналу связи передается последовательность положительных целых чисел, все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается отдельно. Признаком конца передаваемой последовательности является число 0. После числа 0 передается контрольное значение – наибольшее число X, которое:

а)  делится на 10;

б)  может быть получено умножением двух различных чисел, входящих в полученную последовательность.

Напишите эффективную программу, которая получает последовательность чисел и следующие за ней признак конца и контрольное значение, а также проверяет правильность контрольного значения. Программа должна напечатать отчет следующего вида:

Получено .. чисел

Полученное контрольное значение: ….

Вычисленное контрольное значение:…

Контроль пройден (или – контроль не пройден)

 


Контрольная работа

Процедуры и функции

Уровень A.  

1)      Определите результат работы функции при входном значении, равном 123456:

алг цел qq(цел x0)

нач

  цел i, s=0, x

  x:=x0

  нц для i от 1 до 3

    s:=s+mod(x,10)

    x:=div(x,10)

  кц

  знач:=s

кон

function qq(x: integer):integer;

var i, s: integer;

begin

  s:=0;

  for i:=1 to 3 do begin

    s := s + x mod 10;

    x := x div 10;

  end;

  qq := s;

end;

2)      Напишите процедуру, которая выводит на экран  переданное ей число в системе счисления, которая задается вторым параметром (от 2 до 10).

Уровень B.  

1)      Определите результат работы функции входном значении, равном 123456:

алг цел qq(цел x0, y)

нач

  цел i, s=0, x

  x:=x0

  нц пока x > 0

    s:= 10*s + mod(x,10)

    x:= div(x,10)

  кц

  знач:= s

кон

function qq(x: integer):integer;

var i, s: integer;

begin

  s:=0;

  while x > 0 do begin

    s:= 10*s + x mod 10;

    x:= x div 10;

  end;

  qq:= s;

end;

2)      Напишите процедуру, которая переводит переданное ей натуральное число в систему счисления, которая задается вторым параметром (от 2 до 20).

Уровень C.  

1)      Определите результат работы функции при входных значениях, равных 123456 и 78901:

алг цел qq(цел x0, y0)

нач

  цел i, s=0, x, y

  x:=x0; y:=y0

  нц пока x > 0 и y > 0

    s:= 10*s + mod(x+y,10)

    x:= div(x,10)

    y:= div(y,10)

  кц

  знач:= s

кон

function qq(x,y: integer)

         :integer;

var i, s: integer;

begin

  s:=0;

  while (x > 0) and (y > 0) do

    begin

    s:= 10*s + (x+y) mod 10;

    x:= x div 10;

    y:= y div 10;

  end;

  qq:= s;

end;

2)      Напишите процедуру, которая выводит на экран переданное ей  число в негадвоичной системе счисления, основание которой равно (–2). Например,

1011(-2)=1·(-2)3 +0·(-2)2 +1·(-2)1 + 1·(-2)0 =-8-2+1=-9

 

 

 


Контрольная работа

Массивы

Уровень A.  

1)      Введите массив из 5 элементов с клавиатуры и найдите количество элементов, которые оканчиваются на 8 и делятся на 3.

2)      Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию средней цифры.

3)      Заполните массив случайными числами в интервале [0,1000] и выведите номера всех элементов, которые равны последнему элементу.

Уровень B.  

1)      Введите массив из 5 элементов с клавиатуры и найдите количество элементов, старшая цифра которых равна 8.

2)      Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию суммы цифр.

3)      Заполните массив случайными числами в интервале [0,1000] и выведите номера двух соседних элементов, произведение которых наибольшее.

Уровень C.  

1)      Введите массив из 5 элементов с клавиатуры и найдите количество элементов, запись которых в двоичной системе – палиндром (например, 101012 = 21).

2)      Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию количества делителей.

3)      Заполните массив случайными числами в интервале [0,1000] и выведите номера трёх различных минимальных элементов. Разрешается сделать только один проход по массиву.

 

 


Контрольная работа

Символьные строки

Уровень A.  

1)      С клавиатуры вводится символьная строка. Определите, сколько в ней цифр.

2)      С клавиатуры вводится предложение, в котором каждые два слова разделены ровно пробелом. Определите, сколько слов в этом предложении.

3)      Напишите функцию, которая удаляет из переданной ей символьной строки все символы '<' и '>'.

Уровень B.  

1)      С клавиатуры вводится символьная строка. Определите, какой символ встречается в ней чаще всего.

2)      С клавиатуры вводится предложение, в котором слова разделены пробелами. Определите, сколько слов в этом предложении начинается на букву «а».

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

Уровень C.  

1)      С клавиатуры вводится символьная строка длиной. Определите, сколько раз встречается в строке каждый из входящих в нее символов.

2)      С клавиатуры вводится предложение, в котором слова разделены пробелами. Определите, сколько слов в этом предложении начинается и заканчивается на одну и ту же букву.

3)      Напишите функцию, которая удаляет из переданной ей символьной строки все символы, заключенные в угловые скобки '<' и '>' (вместе с этими скобками).

 


Контрольная работа

Файлы

Уровень A.  В каждой строке файла записано три числа, каждое из которых находится в интервале [0,255]. Эти числа обозначают  красную, зелёную и синюю составляющие цвета в цветовой модели RGB. Запишите в другой файл полные коды заданных цветов в виде целых чисел (код цвета = 255·255·R + 255·G + B).

Уровень B. В каждой строке файла записано три числа, каждое из которых находится в интервале [0,255]. Эти числа обозначают  красную, зелёную и синюю составляющие цвета в цветовой модели RGB. Запишите в другой файл полные коды заданных цветов в виде целых чисел в шестнадцатеричной системе счисления (цвет (128,255,255) запишется как 80FFFF).

Уровень C. В файле записаны данные о результатах сдачи экзаменов по математике, русскому языку и физике. Каждая строка содержит фамилию, имя и три целых числа – количество баллов, набранных участником по каждому предмету:

<Фамилия> <Имя> <Математика> <Русский язык> <Физика>

Вывести в другой файл данные учеников, которые получили в сумме больше 240 баллов.  Список должен быть отсортирован по убыванию балла. Формат выходных данных:

1)      П. Иванов    284

2)      И. Петров 275

...