Информатика и ИКТ. Задание 24. ЕГЭ2015
материал для подготовки к егэ (гиа) по информатике и икт (11 класс) на тему

Сидорина Оксана Вячеславовна

Рассмотрены все задания из открытого банка по информатике и ИКТ 2015 с решением.

Скачать:

ВложениеРазмер
Файл 24o.docx128.74 КБ

Предварительный просмотр:

1. Требовалось написать программу, которая решает неравенство «ax+b>0» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.

 

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var a,b,x: real;
begin
readln(a,b,x);
if a = 0 then
if b >0 then
write('любое число')
else
write ('нет решений')
else
write('x>',-b/a);
end.

INPUT a, b, x
IF a = 0 THEN
IF b > 0 THEN
PRINT "любое число"
ELSE
PRINT "нет решений"
ENDIF
ELSE
PRINT "x>", -b/a
ENDIF
END

void main(void)
{ float a,b,x;
scanf("%f%f%f",
 &a,&b,&x);
if (a==0)
if (b > 0)
printf("любое число");
else
printf("нет решений");
else
printf("x>%f",-b/a);
}

 

Последовательно выполните три задания:
1) Приведите пример таких чисел 
abx, при которых программа неверно решает поставленную задачу.
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;
begin
readln(a,b,x);
if b = 0 then
write('x = 0')
else
if a = 0 then
writ
e ('нет решений')
else
write('x =',-b/a);
end.

INPUT a, b, x
IF b = 0 THEN
PRINT "x = 0"
ELSE
IF a = 0 THEN
PRINT "нет решений"
ELSE
PRINT "x=",-b/a
END

void main(void)
{ float a,b,x;
 scanf("%f%f%f",
 &a,&b,&x);
 if (b==0)
 printf("x=0");
 else
 if (a==0)
 printf ("нет решений");
 else
 printf("x=%f",-b/a);
}

 

Последовательно выполните три задания:

 

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

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;
begin
readln(a,b,x);
if a = 0 then
if b = 0 then
write ('любое число')
else
write ('нет решений')
else
if b = 0 then
write('x = 0')
else
write('x =',b/a,' или 
x = ',-b/a);
end.

INPUT a, b, x
IF a = 0 THEN
IF b = 0 THEN
PRINT "любое число"
ELSE
PRINT "нет решений"
ENDIF
ELSE
IF b = 0 THEN
PRINT "x = 0"
ELSE
PRINT "x =",b/a, " или 
x =",-b/a
END IF
END IF
END

void main(void)
{float a,b,x;
 scanf("%f%f%f",
 &a,&b,&x);
 if (a==0)
 if (b==0)
 printf("любое число");
 else
 printf ("нет решений");
 else
  if (b==0)
printf("x = 0");
 else
printf("x=%f или 
x=%f", b/a,-b/a);
}

 

Последовательно выполните три задания:

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≠0, a≠0), введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.

 

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var a,b,x: real;
begin
readln(a,b,x);
if b>0 then
write ('x>',a,' или 
x <0')
else
if a > 0 then
write('0 < x <', a)
else
write(a,'< x <0');
end.

INPUT a, b, x
IF b > 0 THEN
PRINT "x>",a," или 
x<0"
ELSE
IF a > 0 THEN
PRINT "0ELSE
PRINT a,"END IF
END IF
END

void main(void)
{ float a,b,x;
 scanf("%f%f%f",
 &a,&b,&x);
 if (b>0)
 printf("x>%f или 
x<0 ", a);
 else
 if (a>0)
 printf("0 else
 printf("%f}

 

Последовательно выполните три задания:

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;
begin
readln(a,b,x);
if a = 0 then
if b > 0 then
write ('нет решений')
else
write('x > 0 или 
x <0')
else
write(-a,'< x <0');
end.

INPUT a, b, x
IF a = 0 THEN
IF b > 0 THEN
PRINT "нет решений"
ELSE
PRINT "x>0 или 
x<0"
ENDIF
ELSE
PRINT -a,"ENDIF
END

void main(void)
{ float a,b,x;
 scanf("%f%f%f",
 &a,&b,&x);
 if (a==0)
  if (b>0)
 printf ("нет решений");
 else
 printf("x>0 или 
x<0");
 else
 printf("%f}

 

Последовательно выполните три задания:

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

2) Укажите, какая часть программы является лишней.

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

Решение:

1) http://reshuege.ru/formula/95/95d1d47dd784ec87cc6a7b9ce16a06e2.png Значение http://reshuege.ru/formula/b4/b40165c9db29fc8fd17e74ccc38e1b3b.png может быть не указано. Значение http://reshuege.ru/formula/92/92eb5ffee6ae2fec3ad71c777531578f.png может быть любым отрицательным числом, значение http://reshuege.ru/formula/0c/0cc175b9c0f1b6a831c399e269772661.png — любым положительным. Также допустим ответ, что программа работает неправильно при любых положительных http://reshuege.ru/formula/0c/0cc175b9c0f1b6a831c399e269772661.png и отрицательных http://reshuege.ru/formula/2d/2dd7ce2d41fb3bc94a98a058ea9f3832.png

 

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;
begin
readln(a,b,x);
if b = 0 then
write('x > 0 или 
x < 0')
else
if a > 0 then
write('x > 0 или 
x <',-b)
else
write(-b,'< x <0');
end.

INPUT a, b, x
IF b = 0 THEN
PRINT "x > 0 или 
x <0"
ELSE
IF a>0 THEN
PRINT "x >0 или 
x<",-b
ELSE
PRINT -b,"END IF
END IF
END

void main(void)
{ float a,b,x;
 scanf("%f%f%f",
 &a,&b,&x);
 if (b==0)
 printf("x>0 или 
x<0");
 else
 if (a>0)
 printf("x>0 или 
x<%f",-b);
 else
 printf("%f}

 

Последовательно выполните три задания:

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.

http://85.142.162.119/os11/docs/B9ACA5BBB2E19E434CD6BEC25284C67F/questions/10087/innerimg0.gif

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

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var x,y: real;
begin
 readln(x,y);
 if y<=sin(x) then
  if x<=3.14/2 then
   if y>=0 then
   write('принадлежит')
 else
write('не принадлежит')
end.

INPUT x, y
IF y<=SIN(x) THEN
 IF x<=3.14/2 THEN
  IF y>=0 THEN
   PRINT "принадлежит"
  ELSE
 PRINT "не принадлежит"
ENDIF
 ENDIF
ENDIF
END

void main(void)
{ float x,y;
 scanf("%f%f",&x,&y);
 if (y<=sin(x))
  if (x<=3.14/2)
   if (y>=0)
  printf("принадлежит");
 else
printf("не принадлежит");
}

Последовательно выполните следующее:
1) Приведите пример таких чисел  
xy, при которых программа работает неправильно.
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.

http://85.142.162.119/os11/docs/B9ACA5BBB2E19E434CD6BEC25284C67F/questions/10088/innerimg0.gif

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

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var x,y: real;
begin
 readln(x,y);
 if x<=3.14/2 then
  if y<=0 then
   if y>= – sin(x) then
   write('принадлежит')
 else
write('не принадлежит')
end.

INPUT x, y
IF x<=3.14/2 THEN
 IF y<=0 THEN
  IF y>= – SIN(x) THEN
   PRINT "принадлежит"
  ELSE
 PRINT "не принадлежит"
  ENDIF
 ENDIF
ENDIF
END

void main(void)
{ float x,y;
 scanf("%f%f",&x,&y);
 if (x<=3.14/2)
  if (y<=0)
   if (y>= – sin(x))
  printf("принадлежит");
 else
printf("не принадлежит");
}

Последовательно выполните следующее:
1) Приведите пример таких чисел  
xy, при которых программа работает неправильно.
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.

http://85.142.162.119/os11/docs/B9ACA5BBB2E19E434CD6BEC25284C67F/questions/10090/innerimg0.gif

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

ПРОГРАММА НА ПАСКАЛЕ

ПРОГРАММА НА БЕЙСИКЕ

ПРОГРАММА НА СИ

var x,y: real;
begin
 readln(x,y);
 if y<=1 then
  if x>=0 then
   if y>=sin(x) then
   write('принадлежит')
 else
write('не принадлежит')
end.

INPUT x, y
IF y<=1 THEN
 IF x>=0 THEN
  IF y>=SIN(x) THEN
   PRINT "принадлежит"
  ELSE
 PRINT "не принадлежит"
  ENDIF
 ENDIF
ENDIF
END

void main(void)
{ float x,y;
 scanf("%f%f",&x,&y);
 if (y<=1)
  if (x>=0)
   if (y>=sin(x))
  printf("принадлежит");
 else
printf("не принадлежит");
}

Последовательно выполните следующее:
1) Приведите пример таких чисел  
xy, при которых программа работает неправильно.
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),
' или 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",
sqrt(-c), -sqrt(-c));

}

Последовательно выполните три задания:

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 – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.

    http://85.142.162.119/os11/docs/B9ACA5BBB2E19E434CD6BEC25284C67F/questions/10082/innerimg0.gif

ПРОГРАММА 
НА ПАСКАЛЕ

ПРОГРАММА 
НА БЕЙСИКЕ

ПРОГРАММА 
НА СИ

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) Приведите пример таких чисел  xy, при которых программа неверно решает поставленную задачу.

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, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

 

Бейсик

Паскаль

DIM N AS LONG

INPUT N
min_digit = 9
WHILE N >= 10
  digit = N MOD 10
  IF digit < min_digit THEN
    min_digit = digit
  END IF
  N = N \ 10
WEND
PRINT digit
END

var N: longint;

  digit, min_digit: integer;

begin

  readln(N);

  min_digit := 9;
  while N >= 10 do

  begin
    digit := N mod 10;
    if digit < min_digit then
      min_digit := digit;
    N := N div 10;
  end;

  writeln(digit);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;

  int digit, min_digit;

  scanf("%ld", &N);

  min_digit = 9;
  while (N >= 10)
  {
    digit = N % 10;
    if (digit < min_digit)
      min_digit = digit;
    N = N / 10;

  }

  printf("%d", digit);

}

алг

нач

  цел N, digit, min_digit

  ввод N

  min_digit := 9

  нц пока N >= 10

    digit := mod(N, 10)
   
 если digit < min_digit то
      min_digit := digit
    
все

    N := div(N, 10)

  кц

  вывод digit
кон

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

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
min_digit = 0
WHILE N > 0
  digit = N MOD 10
  IF digit < min_digit THEN

    min_digit = digit
  END IF
  N = N \ 10
WEND

PRINT digit
END

var N: longint;

  digit, min_digit: integer;

begin

  readln(N);

  min_digit := 0;
  while N > 0 do

  begin
    digit := N mod 10;
    if digit < min_digit then
      min_digit := digit;
    N := N div 10;
  end;

  writeln(digit);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;

  int digit, min_digit;

  scanf("%ld", &N);

  min_digit = 0;
  while (N > 0)

  {
    digit = N % 10;
    if (digit < min_digit)
      min_digit = digit;
    N = N / 10;

  }

  printf("%d", digit);

}

алг

нач

  цел N, digit, min_digit

  ввод N

  min_digit := 0

  нц пока N > 0

    digit := mod(N, 10)
   
 если digit < min_digit то
      min_digit := digit
    
все

    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
max_digit = 9
WHILE N >= 10
 digit = N MOD 10
 IF digit > max_digit THEN
   max_digit = digit
 END IF
 N = N \ 10
WEND
PRINT max_digit
END

var N: longint;

  digit, max_digit: integer;

begin

  readln(N);

  max_digit := 9;
  while N >= 10 do

  begin
    digit := N mod 10;
    if digit > max_digit then
      max_digit := digit;
    N := N div 10;
  end;

  writeln(max_digit);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;
  int digit, max_digit;
  scanf("%ld", &N);

  max_digit = 9;
  while (N >= 10)

  {
    digit = N % 10;
    if (digit > max_digit)
      max_digit = digit;
    N = N /10;

  }

  printf("%d", max_digit);

}

алг

нач

  цел N, digit, max_digit

  ввод N

  max_digit := 9

  нц пока N >= 10

    digit := mod(N, 10)
   
 если digit > max_digit то
      max_digit := digit
    
все

    N := div(N, 10)

  кц
  вывод max_digit

кон

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

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
max_digit = 10
WHILE N > 9
  digit = N MOD 10
  IF digit > max_digit THEN
    max_digit = digit
  END IF
  N = N \ 10
WEND
PRINT max_digit
END

var N: longint;

  digit, max_digit: integer;

begin

  readln(N);

  max_digit := 10;
  while N > 9 do

  begin
    digit := N mod 10;
    if digit > max_digit then
      max_digit := digit;
    N := N div 10;
  end;

  writeln(max_digit);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;
  int digit, max_digit;
  scanf("%ld", &N);

  max_digit = 10;
  while (N > 9)

  {
    digit = N % 10;
    if (digit > max_digit)
      max_digit = digit;
    N = N /10;

  }

  printf("%d", max_digit);

}

алг

нач

  цел N, digit, max_digit

  ввод N

  max_digit := 10

  нц пока N > 9

    digit := mod(N, 10)
   
 если digit > max_digit то
      max_digit := digit
    
все

    N := div(N, 10)

  кц
  вывод max_digit

кон

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

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
product = 0
WHILE N > 0
  digit = N MOD 10
  product = product*digit
  N = N \ 10
WEND
PRINT digit
END

var N, product: longint;

  digit: integer;

begin

  readln(N);

  product := 0;
  while N > 0 do

  begin
    digit := N mod 10;
    product := product*digit;
    N := N div 10;
  end;

  writeln(digit);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N, product;

  int digit;

  scanf("%ld", &N);

  product = 0;
  while (N > 0)

  {
    digit = N % 10;
    product = product*digit;
    N = N / 10;

  }

  printf("%d", digit);

}

алг

нач

  цел N, digit, product

  ввод N

  product := 0

  нц пока N > 0

    digit := mod(N, 10)
    product := product*digit

    N := div(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
product = N mod 10
WHILE N >= 10
  digit = N MOD 10
  product = product*digit
  N = N \ 10
WEND
PRINT product
END

var N, product: longint;

  digit: integer;

begin

  readln(N);

  product := N mod 10;
  while N >= 10 do

  begin
    digit := N mod 10;
    product := product*digit;
    N := N div 10;
  end;

  writeln(product);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N, product;

  int digit;

  scanf("%ld", &N);

  product = N % 10;
  while (N >= 10)

  {
    digit = N % 10;
    product = product*digit;
    N = N / 10;

  }

  printf("%ld", product);

}

алг

нач

  цел N, digit, product

  ввод N

  product := mod(N, 10)

  нц пока N >= 10

    digit := mod(N, 10)
    product := product*digit
    N := div(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 = 1
WHILE N > 1
  N = N \ 10

  sum = sum + 1
WEND
PRINT sum
END

var N: longint;

  sum: integer;

begin

  readln(N);

  sum := 1;
  while N > 1 do

  begin
    N := N div 10;
    sum := sum + 1;
  end;

  writeln(sum);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;
  int sum;
  scanf("%ld", &N);

  sum = 1;
  while (N > 1)

  {
    N = N /10;

    sum = sum + 1;
  }

  printf("%d", sum);

}

алг

нач

  цел N, sum

  ввод N

  sum := 1

  нц пока N > 1

    N := div(N, 10)

    sum := sum + 1
  
кц
  вывод sum

кон

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

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 = 0
WHILE N >= 9
  N = N \ 10

  sum = sum + 1
WEND
PRINT sum
END

var N: longint;

  sum: integer;

begin

  readln(N);

  sum := 0;
  while N >= 9 do

  begin
    N := N div 10;
    sum := sum + 1;
  end;

  writeln(sum);

end.

Си

Алгоритмический язык

#include

int main()

{

  long int N;
  int sum;
  scanf("%ld", &N);

  sum = 0;
  while (N >= 9)

  {
    N = N / 10;

    sum = sum + 1;
  }

  printf("%d", sum);

}

алг

нач

  цел N, sum

  ввод N

  sum := 0

  нц пока N >= 9

    N := div(N, 10)

    sum := sum + 1
  
кц
  
вывод sum

кон

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

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)

Сегодня уже не имеет смысла рассуждать о плюсах и минусах экзамена в форме ЕГЭ, надо принять это как данность. Значение ЕГЭ трудно переоценить. Низкая оценка ЕГЭ может повлиять на всю дальнейшую судьб...