Информатика и ИКТ. Задание 24. ЕГЭ2015
материал для подготовки к егэ (гиа) по информатике и икт (11 класс) на тему
Рассмотрены все задания из открытого банка по информатике и ИКТ 2015 с решением.
Скачать:
Вложение | Размер |
---|---|
24o.docx | 128.74 КБ |
Предварительный просмотр:
1. Требовалось написать программу, которая решает неравенство «ax+b>0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой
Решение:
1. Программа работает неправильно, если a<0, т.е. а-5 b=5 x-любое( х>1), а надо х<1
2. Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора
readln(a,b,x);
правильнее написать
readln(a,b);
Переменная x далее не используется, поэтому ее не нужно объявлять:
var a,b: real;
3. var a,b: real;
begin
readln(a,b);
if a = 0 then
if b >0 then
write('любое число’)
else
write ('нет решений’);
if a < 0 then
write('x<',-b/a)
else if a > 0 then
write('x>',-b/a);
end.
2. Требовалось написать программу, которая решает уравнение «ax+b=0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a, b, x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
В первую очередь, рассмотрим поставленную задачу с позиций математики: возможны следующие варианты:
- a=0 и b=0 — x — любое число;
- a=0 и b≠0 — нет решений;
- a≠0 — x=-b/a.
1. Программа работает неправильно, если a и b равны нулю: в этом случае решением уравнения является любое число x, а программа выдаст только решение . Например,
2. Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора
readln(a,b,x);
правильнее написать
readln(a,b);
Переменная x далее не используется, поэтому ее не нужно объявлять:
var a,b: real;
3. var a,b: real;
begin
readln(a,b);
if b = 0 then
if a = 0 then
write('любое число')
else write('x = 0')
else
if a = 0 then
write('нет решений')
else write('x =',-b/a);
end.
3. Требовалось написать программу, которая решает уравнение
a|x|=b
относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1. при b*a<0, a≠0 и b≠0 программа работает некорректно. Она выдает ответ: x=±b/a, а должна выводить "нет решений". В данному случае нарушается условие x≥0 (значение по модулю не может быть отрицательным).
Определим, какими могут быть a и b исходя из приведенных выше условий. Получаем, что a и b могут быть любыми ненулевыми числами с разными знаками. Например, a=5, b=-5 х=0;
2. Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора
readln(a,b,x);
правильнее написать
readln(a,b);
Переменная x далее не используется, поэтому ее не нужно объявлять:
var a,b: real;
3. Возможная доработка программы – добавить еще один условный оператор, обрабатывающий неучтенный случай (a и b не равны нулю и имеют разные знаки), при котором нет решений
var a,b,x: real;
begin
readln(a,b);
if a = 0 then
if b = 0 then
write ('любое число')
else
write ('нет решений')
else
if b*a>0 then
write('x =',b/a,' или x =',-b/a)
else
if b=0 then
write('x =0')
else
write ('нет решений');
end.
4. Требовалось написать программу, которая решает неравенство
(x–a)/(bx)>0
относительно x для любых ненулевых чисел a и b (b≠0, a≠0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a ,b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1) a = −13, b = 4, x = 0.
Значение x может быть не указано. Значение а может быть любым отрицательным числом, значение b — любым положительным. Также допустим ответ, что программа работает неправильно при любых положительных b и отрицательных а.
2) Лишняя часть:
не нужно вводить х с клавиатуры; верно: readln(a, b).
3) Возможная доработка:
var a,b,x: real;
begin
readln(a, b);
if b > 0 then
if a > 0 then
write('х>', a, или х < 0')
else
write('х< ', a,или х > 0')
else
if a > 0 then
write('0 < х <', a)
else
write(a,' < х < 0');
end.
5. Требовалось написать программу, которая решает неравенство
(x+a)/(bx)<0
относительно x для любого ненулевого числа b и любого неотрицательного числа a и (a≥0, b≠0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a ,b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1) Значение может быть не указано. Значение может быть любым отрицательным числом, значение — любым положительным. Также допустим ответ, что программа работает неправильно при любых положительных и отрицательных
2) Лишняя часть: не нужно вводить х с клавиатуры; верно: readln (а, b), описывать переменную х ненужно var a,b: real;
3) Возможная доработка:
var a,b,x: real;
begin
readln(a, b);
if а=0 then
if b>0 then
write('нет решений')
else
write('x>0 или x<0')
else
if b>0 then
write(-a,'< x <0')
else
write ('x>0 или x<',-a);
end.
6. Требовалось написать программу, которая решает неравенство
(ax)/(x+b)>0
относительно x для любого ненулевого числа a и любого неотрицательного числа b и (a≠0, b≥0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var a,b,x: real; | INPUT a, b, x | void main(void) |
Последовательно выполните три задания:
1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1) a = −13, b = 0, x = 2.
Значение x может быть не указано. Значение а может быть любым отрицательным числом, значение b =0.
2) Лишняя часть:
не нужно вводить х с клавиатуры; верно: readln(a, b), описывать переменную х ненужно var a,b: real;
3) Возможная доработка:
var a,b: real;
begin
readln(a,b);
if b = 0 then
if a<0 then
write('решений нет') else
write('x > 0 или x < 0')
else
if a > 0 then
write('x > 0 или x <',-b)
else
write(-b,'< x <0');
end.
7.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. |
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var x,y: real; | INPUT x, y | void main(void) |
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа работает неправильно.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой с Решение:
1. примеры входных данных, на которых программа работает неверно:
(x=-3.9, y=0.5) (неправильно определяет принадлежность точки области)
(x=-3, y=0) (не выдает вообще никакого сообщения)
2. способ доработки исходной программы):
var x,y: real;
begin
readln(x,y);
if (y<=sin(x)) and (x<=3.14/2) and (y>=0) and (x>=0) then
write('принадлежит')
else
write('не принадлежит');
end.
8.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. |
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var x,y: real; | INPUT x, y | void main(void) |
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа работает неправильно.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение
1. примеры входных данных, на которых программа работает неверно:
(x=-3.9, y=-0.5) (неправильно определяет принадлежность точки области)
(x=0, y=2) (не выдает вообще никакого сообщения)
2. способ доработки исходной программы:
var x,y: real;
begin
readln(x,y);
if (x<=3.14/2) and (y<=0) and (y>= - sin(x)) and (x>=0) then
write('принадлежит')
else
write('не принадлежит');
end.
9.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. |
ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var x,y: real; | INPUT x, y | void main(void) |
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа работает неправильно.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1. примеры входных данных, на которых программа работает неверно:
(x=3.14, y=0.5) (неправильно определяет принадлежность точки области)
(x=0, y=1) или (x=-1, y=0) (не выдает вообще никакого сообщения)
2. Доработанная программа(не хватало одного условия )
var x,y: real;
begin
readln(x,y);
if (x >= 0) and (x <= pi/2) and
(y <= 1) and (y >= sin(x)) then
write('принадлежит')
else write('не принадлежит');
end.
10. Требовалось написать программу, которая решает уравнение «x2+c=0» относительно x для любого числа c, введенного с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
ПРОГРАММА | ПРОГРАММА | ПРОГРАММА |
var c,x: real; begin readln(c,x); if c>0 then write('нет решений') else write('x=',sqrt(-c), end. | INPUT c, x IF c>0 THEN PRINT "нет решений" ELSE PRINT "x=",SQR(-c) или x=",-SQR(-c) ENDIF END | void main(void) { float c,x; scanf("% f % f",&c,&x); if (c>0) printf("нет решений"); else printf("x=%f или x=%f", } |
Последовательно выполните три задания:
1) Приведите пример таких чисел c, x, при которых программа неверно решает поставленную задачу.
2) Укажите, какая часть программы является лишней.
3) Укажите, как нужно доработать программу, чтобы не было случаев ее некорректной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
пример чисел c, x, при которых программа неверно решает поставленную задачу: с=0,
х=0..
2) лишним является ввод переменной х, правильным является следующий оператор ввода
readln(c);
3) доработка программы, чтобы не было случаев ее неправильной работы.
var c,x: real;
begin
readln(c);
if c > 0 then write ('нет решений')
else
if c=0 then write (‘x=0‘)
else write('x =',sqrt(-c),' или x =',-sqrt(-c);
end.
11.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. |
|
ПРОГРАММА | ПРОГРАММА | ПРОГРАММА |
var x,y: real; begin readln(x,y); if x*x+y*y>=4 then if x>= –2 then if y<= –x then write('принадлежит') else write('не принадлежит') end. | INPUT x, y IF x*x+y*y>=4 THEN IF x>= –2 THEN IF y<= –x THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF ENDIF ENDIF END | void main(void) { float x,y; scanf("% f % f",&x,&y); if (x*x+y*y>=4) if (x>= –2) if (y<= –x) printf("принадлежит"); else printf("не принадлежит"); } |
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Решение:
1. примеры входных данных, на которых программа работает неверно:
(x=-1, y=-3) (неправильно определяет принадлежность точки области)
(внутри круга или слева от прямой ) вообще не выдается никакого сообщения.
2. Доработанная программа6
var x,y: real;
begin
readln(x,y);
if (x*x+y*y >= 4) and (x >= -2) and
(y <= -x) and (y >= 0) then
write('принадлежит')
else
write('не принадлежит')
end.
12. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 547.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 4.
2. Первая ошибка. Неверное условие окончания цикла. Программа не будет рассматривать старшую цифру числа. Строка с ошибкой: «while N >= 10» do Возможные варианты исправления: «while (N >= 1)» или «while (N > 0)» При этом замены на «while (N > 1)» или «while (N >= 0)» корректными не являются.
3. Вторая ошибка. Программа выводит значение переменной «digit», а не «min digit». В результате программа всегда выводит вторую слева цифру числа. Строка с ошибкой: «writeln(digit);». Необходимо в строке с выводом результата заменить «digit» на «min digit»
13. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
DIM N AS LONG INPUT N | var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 0; begin writeln(digit); end. |
Си | Алгоритмический язык |
#include int main() { long int N; int digit, min_digit; scanf("%ld", &N); min_digit = 0; { } printf("%d", digit); } | алг нач цел N, digit, min_digit ввод N min_digit := 0 нц пока N > 0 digit := mod(N, 10) N := div(N, 10) кц вывод digit |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 862.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 8.
2. Первая ошибка. Неверная инициализация ответа (переменная min_digit). Строка с ошибкой: «min_digit := 0;». Возможные варианты исправления: «min digit := 9;». Возможны и другие исправления инициализации на любое число, большее 9.
3. Вторая ошибка. Программа выводит значение переменной «digit», а не «min digit». В результате программа всегда выводит самую старшую цифру числа. Строка с ошибкой: «writeln(digit);» Необходимо в строке с выводом результата заменить «digit» на «min digit».
14. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
DIM N AS LONG INPUT N | var N: longint; digit, max_digit: integer; begin readln(N); max_digit := 9; begin writeln(max_digit); end. |
Си | Алгоритмический язык |
#include int main() { long int N; max_digit = 9; { } printf("%d", max_digit); } | алг нач цел N, digit, max_digit ввод N max_digit := 9 нц пока N >= 10 digit := mod(N, 10) N := div(N, 10) кц кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 423.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 9.
2. Первая ошибка. Неверная инициализация ответа (переменная max_digit). Строка с ошибкой: max_digit := 9; Возможные варианты исправления: max_digit := 0;
Возможны и другие исправления инициализации, например, на отрицательное число, в том числе -maxint.
3. Вторая ошибка. Неверное условие продолжения цикла. Программа не будет рассматривать старшую цифру числа.
Строка с ошибкой: while N > 9 do.
Возможные варианты исправления: while (N >= 1) do или while (N > 0) do.
При этом замены на while (N > 1) do или while (N >= 0) do корректными не являются.
15. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
DIM N AS LONG INPUT N | var N: longint; digit, max_digit: integer; begin readln(N); max_digit := 10; begin writeln(max_digit); end. |
Си | Алгоритмический язык |
#include int main() { long int N; max_digit = 10; { } printf("%d", max_digit); } | алг нач цел N, digit, max_digit ввод N max_digit := 10 нц пока N > 9 digit := mod(N, 10) N := div(N, 10) кц кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 542.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка
Решение:
Решение использует запись программы на Паскале. Допускается использование программы на трёх других языках.
1. Программа выведет число 9.
2. Первая ошибка. Неверная инициализация ответа (переменная max_digit). Строка с ошибкой: mах_digit := 9; Возможные варианты исправления: max_digit := 0;
Возможны и другие исправления инициализации, например на отрицательное число, в том числе -maxint.
3. Вторая ошибка. Неверное условие продолжения цикла. Программа не будет рассматривать старшую цифру числа.
Строка с ошибкой: while N > 9 do
Возможные варианты исправления: while (N >- 1) do или while (N > 0) do
При этом замены на while (N > 1) do или while (N >= 0) do корректными не являются.
16. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
DIM N AS LONG DIM product AS LONG INPUT N | var N, product: longint; digit: integer; begin readln(N); product := 0; begin writeln(digit); end. |
Си | Алгоритмический язык |
#include int main() { long int N, product; int digit; scanf("%ld", &N); product = 0; { } printf("%d", digit); } | алг нач цел N, digit, product ввод N product := 0 нц пока N > 0 digit := mod(N, 10) кц вывод digit |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 528.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 5
2. Неверная инициализация ответа , врезультате ответ всегда будет равен 0.Строка с ошибкой: product := 0; Исправление: product := 1;
3. неверно выведена переменная в ответе Строка сошибкой: writeln(digit) выводит первую цифру числа; Исправление: writeln(product);
17. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
DIM N AS LONG DIM product AS LONG INPUT N | var N, product: longint; digit: integer; begin readln(N); product := N mod 10; begin writeln(product); end. |
Си | Алгоритмический язык |
#include int main() { long int N, product; int digit; scanf("%ld", &N); product = N % 10; { } printf("%ld", product); } | алг нач цел N, digit, product ввод N product := mod(N, 10) нц пока N >= 10 digit := mod(N, 10) кц вывод product |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 532.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 12.
2. Первая ошибка. Неверная инициализация ответа (переменная product). В результате младшая цифра учитывается два раза. Строка с ошибкой: product := N mod 10. Исправление: product := 1;
3. Вторая ошибка. Неверное условие окончания цикла. Программа не будет рассматривать старшую цифру числа. Строка с ошибкой: «while N >= 10». Возможные варианты исправления: «while N >= 1» или «while N > 0». При этом замены на «while N > 1» или «while N >= 0» корректными не являются. В качестве ещё одного возможного варианта исправления этой ошибки является вывод значения «product*N» а не просто «product»(так как после окончания цикла в переменной N останется только одна цифра)
18. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках.)
Бейсик | Паскаль |
DIM N AS LONG INPUT N sum = sum + 1 | var N: longint; sum: integer; begin readln(N); sum := 1; begin writeln(sum); end. |
Си | Алгоритмический язык |
#include int main() { long int N; sum = 1; { sum = sum + 1; printf("%d", sum); } | алг нач цел N, sum ввод N sum := 1 нц пока N > 1 N := div(N, 10) sum := sum + 1 кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 938?
2. Укажите одно число, для которого программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 4.
2. Программа работает верно для любого числа, начинающегося с 1, в том числе для 1.
(Достаточно указать любое такое число).
3. В качестве ответа для остальных чисел программа выдаёт число на 1 большее, чем нужно. Возможные варианты исправления для языка Паскаль:
1) исправление условия продолжения цикла на while (N > 9) do
2) исправление инициализации на sum := 0;, а условие цикла на while (N >= 1) do или while (N > 0) do. При этом замена на while (N >= 0) do корректной не является
3) исправление условия продолжения цикла на while (N >= 1) do или while (N > 0) do и вывод значения sum − 1.
19. Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках.)
Бейсик | Паскаль |
DIM N AS LONG INPUT N sum = sum + 1 | var N: longint; sum: integer; begin readln(N); sum := 0; begin writeln(sum); end. |
Си | Алгоритмический язык |
#include int main() { long int N; sum = 0; { sum = sum + 1; printf("%d", sum); } | алг нач цел N, sum ввод N sum := 0 нц пока N >= 9 N := div(N, 10) sum := sum + 1 кон |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 584.
2. Укажите число, для которого программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
1. Программа выведет число 2.
2. Программа работает верно для всех чисел, начинающихся на 9. в том числе для числа 9. (Достаточно указать любое такое число).
3. В качестве ответа для остальных чисел программа выдаёт число на 1 меньшее, чем нужно. Возможные (не все) варианты исправления для языка Паскаль:
1) исправление условия продолжения цикла на while (N >= 1) do или while (N > 0) do. При этом замена на while (N >= 0) do корректной не является.
2) исправление инициализации на sum := 1, а условие продолжения цикла на while (N > 9) do или while (N >= 10) do.
20.
По теме: методические разработки, презентации и конспекты
Методика формирования умений ставить и решать проблему у учащихся 8-9 классов на уроке информатики средствами разноуровневых заданий и практических работ
Изучение предмета «Информатика и ИКТ» должно способствовать процессам социализации личности, фундаментализации образования, обеспечения возможности продолжать обучение (в рамках непрерывного от...
ГИА по информатике и ИКТ. Задание 20.1.
Высокий уровень сложности...
Тренировочные задания для подготовки к ГИА по ИНФОРМАТИКЕ и ИКТ (Задание № 11)
Решение задания № 11 Задание: На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.Скол...
Информатика и ИКТ. Задание 25. ЕГЭ2015
Рассмотрены все задания из открытого банка 2015 (с решением)...
Олимпиада по информатике МГОСГИ 2014 Задания I заочного тура олимпиады по информатике
Олимпиада по информатике МГОСГИ 2014 Задания I заочного тура олимпиады по информатике...
ОГЭ. Информатика 1-5 задание
ОГЭ. Информатика 1-5 задание.Источник: Лещинер, В.Р. Основной государственный экзамен. Информатика. Комплекс материалов для подготовки учащихся. Учебное пособие./ В.Р. Лещинер, Ю.С. Путимцева. - Москв...
СИСТЕМА ПОДГОТОВКИ К ЕГЭ ПО ИНФОРМАТИКЕ (НА ПРИМЕРЕ ЗАДАНИЯ №26)
Сегодня уже не имеет смысла рассуждать о плюсах и минусах экзамена в форме ЕГЭ, надо принять это как данность. Значение ЕГЭ трудно переоценить. Низкая оценка ЕГЭ может повлиять на всю дальнейшую судьб...