Экзамены и диагностики

10 005 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
20194#20194
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Паскаль Си
var x, cnt: integer; 
begin
(*)
(1)  readln(x);
(2)  cnt := 0;
(3)  while x > 0 do begin
(4)    cnt := cnt + 1;
(5)    x := x mod 2;
(6)  end;
(7)  writeln (cnt)
end.
#include<stdio.h>
main(){
  int x, cnt;
(*)
(1)  scanf("%d",&x);
(2)  cnt = 0;
(3)  while (x > 0) {
(4)    cnt = cnt + 1;
(5)    x = x % 2;
(6)  }
(7)  printf("%d", cnt);
}
 
 
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль
Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
20193#20193
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Паскаль Си
var x, cnt: integer; 
begin
(*)
(1)  readln(x);
(2)  cnt := 0;
(3)  while x > 0 do begin
(4)    cnt := cnt + x mod 2;
(5)    x := x div 10;
(6)  end;
(7)  writeln (cnt)
end.
#include<stdio.h>
main(){
  int x, cnt;
(*)
(1)  scanf("%d",&x);
(2)  cnt = 0;
(3)  while (x > 0) {
(4)    cnt = cnt + x % 2;
(5)    x = x / 10;
(6)  }
(7)  printf("%d", cnt);
}
 

Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 15.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 
20192#20192
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа.   Программист торопился и написал программу неправильно:
 
Паскаль Си
var N: longint;
    sum, d: integer; 
begin
(*)
(1)  readln(N);
(2)  sum := 1;
(3)  while N > 0 do begin
(4)    d := N mod 10;
(5)    N := N div 10;
(6)    sum := d;
(7)  end;
(8)  writeln ( sum )
end.
#include<stdio.h>
main(){
  int N;
  int sum, d;
(*)
(1)  scanf("%d",&N);
(2)  sum = 1;
(3)  while (N > 0) {
(4)    d = N % 10;
(5)    N = N / 10;
(6)    sum = d;
(7)  }
(8)  printf("%d", sum);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 256.
2.       Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 
20191#20191
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа.   Программист торопился и написал программу неправильно:
 
Паскаль Си
var N: longint;
    sum, d: integer; 
begin
(*)
(1)  readln(N);
(2)  sum := 1;
(3)  while N > 0 do begin
(4)    d := d mod 10;
(5)    N := N div 10;
(6)    sum := sum + 1;
(7)  end;
(8)  writeln ( sum )
end.
#include<stdio.h>
main(){
  int N;
  int sum, d;
(*)
(1)  scanf("%d",&N);
(2)  sum = 1;
(3)  while (N > 0) {
(4)    d = d % 10;
(5)    N = N / 10;
(6)    sum = sum + 1;
(7)  }
(8)  printf("%d", sum);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 256.
2.       Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.


В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20190#20190
На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел, кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, кратных трёх, программы должна вывести слово 'NO'. Для решения этой задачи ученик написал такую программу:
 
Паскаль Си
const n = 4;
var i, x: integer;
var maximum, count: integer;
begin
(*)
(1)  count := 0;
(2)  maximum := 999;
(3)  for i:=1 to n do begin
(4)    read( x );
(5)    if x mod 3 = 0 then begin
(6)      count := count + 1;
(7)      if x < maximum then
(8)         maximum := x;
(9)    end;
(10)  end;
(11)  if count > 0 then begin
(12)    writeln(count);
(13)    writeln(maximum);
(14)  end
(15)  else
(16)    writeln('NO');                 
end.
#include<stdio.h>
main(){
  conts int n=4;  
  int i, x;
  int maximum, count;
(*)
(1)  count = 0; 
(2)  maximum=999;
(3)  for(i=1;i<=n;i++){
(4)   scanf("%d",&x);
(5)   if (x % 3 == 0) {
(6)    count = count +1;
(7)    if (x < maximum)
(8)       maximum = x;
(9)    } 
(10)  }
(11) if (count>0) {
(12)    print("%d\n",count);
(13)    print("%d\n", maximum);
(14) } 
(15) else
(16)    printf("NO");
}
 

Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе чисел 2  9  4  3.
2.       Приведите пример такой последовательности, содержащей число, кратное 3, что, несмотря на ошибки, программа выдаст верный ответ.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20189#20189
Дано натуральное число N, не превосходящее 108. Необходимо найти и вывести число, которое получится при записи N справа налево и удалении всех единиц. Ведущие нули выводить не надо. Если в числе N нет цифр кроме единиц и нулей, необходимо вывести 0. Например, при вводе числа 1984 нужно вывести 489, а при вводе 2001 нужно вывести 2. Для решения этой задачи ученик написал такую программу:
 
Паскаль Си
var n, m: longint;
    d: integer;
begin
(*)
(1)  read(n);
(2)  m := 0;
(3)  while n>=1 do begin
(4)    d := n mod 10;
(5)    if d > 1 then begin
(6)      m := 10*d + m;
(7)    end;
(8)    n:= (n – d) div 10;
(9)  end;
(10)  write(m);
end.
#include<stdio.h>
main(){
  int n, m,d;
(*)
(1)  scanf("%d",&n);
(2)  m=0;
(3)  while (n >= 1) {
(4)    d = n % 10;
(5)    if (d > 1){
(6)       m = 10*d + m;
(7)    } 
(8)    n = (n-d) / 10;
(9)  }
(10)  printf("%d", m);
}
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 1984.
2.       Приведите пример числа, при вводе которого программа выдаст верный ответ.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20188#20188
Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, которое получается из N после удаления всех единиц; порядок остальных цифр при этом не меняется. Например, число 19520125 должно быть преобразовано в число 952025. Число, в котором все цифры – единицы и нули, должно быть преобразовано в 0. Незначащие нули в старших разрядах полученного числа печатать не нужно. Программист торопился и написал программу неправильно.
Паскаль Си
var N, R, T: longint;
   d: integer;
begin
(*)
(1)  readln(N);
(2)  R:=0;
(3)  T:=1;
(4)  while N>0 do begin
(5)    d := N mod 10;
(6)    if d<>1 then begin
(7)      R := R + d*T;
(8)      T := T+1
(9)    end;
(10)    N := N div 10;
(11)  end;
(12)  writeln(T);
end.
#include<stdio.h>
main(){
  int N, R, T;
  int d;
(*)
(1)  scanf("%d",&N);
(2)  R=0;
(3)  T=1;
(4)  while (N > 0) {
(5)    d = N % 10;
(6)    if (d!=1){
(7)       R = R + d*T;
(8)       T = T+1;
(9)    } 
(10)    N = N / 10;
(11)  }
(12)  printf("%d", T);
}

Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 314.
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) Выпишите строку, в которой сделана ошибка.
2) Укажите, как исправить ошибку – приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20187#20187
Требовалось написать программу, при выполнении которой с клавиатуры вводится натуральное число, не превосходящее 108, и выводится его первая (старшая) цифра. Ученик написал такую программу:
Паскаль Си
var n: longint;
begin
(*)
(1)  readln(n);
(2)  while n > 10 do begin
(3)    n := n mod 10
(4)  end;
(5)  writeln ( n )
end.
#include<stdio.h>
main(){
  int n;
(*)
(1)  scanf("%d",&n);
(2)  while (n > 10) {
(3)    n = n % 10;
(4)  }
(5)  printf("%d", n);
}
 
Последовательно выполните следующее.
1.       Напишите, что выведет эта программа при вводе числа 1984.
2.       Приведите пример числа, при вводе которого программа выдаст верный ответ.
3.       Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}

20186#20186
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа.   Программист торопился и написал программу неправильно:  
Паскаль Си
var N: longint;
    count: integer; 
begin
(*)
(1)  readln(N);
(2)  count := 1;
(3)  while N > 1 do begin
(4)    count := count + 1;
(5)    N := N div 10
(6)  end;
(7)  writeln ( count )
end.
#include<stdio.h>
main(){
  int N;
  int count;
(*)
(1)  scanf("%d",&N);
(2)  count = 1;
(3)  while (N > 1) {
(4)    count = count + 1;
(5)    N = N / 10;
(6)  }
(7)  printf("%d", count);
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 123.
2.       Укажите одно число, для которого программа выводит неверный результат.
3.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20185#20185
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальную цифру этого числа. Программист торопился и написал программу неправильно:
Паскаль Си
var N: longint;
    digit, min_digit: integer; 
begin
(*)
(1)  readln(N);
(2)  min_digit := 0;
(3)  while N > 0 do begin
(4)    digit := N mod 10;
(5)    if digit > min_digit then
(6)       min_digit := digit;
(7)    N := N div 10
(8)  end;
(9)  writeln ( min_digit)
end.
#include<stdio.h>
main(){
  int N;
  int digit, min_digit ;
(*)
(1)  scanf("%d",&N);
(2)  min_digit = 0;
(3)  while (N > 0) {
(4)    digit = N % 10;
(5)    if (digit > min_digit)
(6)       min_digit = digit;
(7)    N = N / 10;
(8)  }
(9)  printf("%d", min_digit );
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 532 (выполните устно).
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}
 

20184#20184
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа.   Программист торопился и написал программу неправильно:  
Паскаль Си
var N, product: longint;
    digit: integer; 
begin
(*)
(1)  readln(N);
(2)  product := N mod 10;
(3)  while N >= 10 do begin
(4)    digit := N mod 10;
(5)    product := product * digit;
(6)    N := N div 10
(7)  end;
(8)  writeln ( product )
end.
#include<stdio.h>
main(){
  int N, product;
  int digit;
(*)
(1)  scanf("%d",&N);
(2)  product = N % 10;
(3)  while (N >= 10) {
(4)    digit = N % 10;
(5)    product = product * digit;
(6)    N = N / 10;
(7)  }
(8)  printf("%d", product );
}
Последовательно выполните следующее:
1.       Определите, что выведет программа при вводе числа 532 (выполните задание устно).
2.       Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а)      выпишите строку, в которой сделана ошибка;
б)      укажите, как надо исправить ошибку -  приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

В качестве ответа загрузите исправленную программу, в которой добавлена строка на место (*). Строка должна содержать оператор вывода (с переходом на новую строку после выполнения) номеров строк, в которых допущена ошибка (выводить нужно ТОЛЬКО номера слитно без пробелов и запятых)
например:
Паскаль Си
...
begin
(*)  writeln('123');

... далее исправленная программа

end.
#include<stdio.h>
main(){
...
(*)  printf("123\n");
... далее исправленная программа
}

20183#20183
В корзине лежит a красных и b синих шаров. Из корзины наугад вынимают n шаров. Требовалось написать программу, которая определяет количество вариантов такого опыта (вариантом считаем пару чисел: количество вынутых красных и синих шаров). Программист торопился и написал программу неправильно: 

Паскаль Си
var n,a,b:integer;
begin
  readln(n, a, b);
  if a + b < n then writeln(0)
  else
    if a < b then
      if a < n then writeln(a+1)
    else
    if b < n then writeln(b+1)
    else writeln(n+1);
end.
#include<stdio.h>
main()
{
  int n,a,b;
  scanf("%d%d%d",&n,&a,&b);
  if (a + b < n) printf("0\n");
  else
    if (a < b) 
      if (a < n) printf("%d\n",a+1);
    else
    if (b < n) printf("%d\n",b+1);
    else printf("%d\n",n+1);
}

Последовательно выполните следующее:
1.       Определите, что выведет программа при n = 5, a = 3, b = 6 (выполните задание устно).
2.       Укажите значения n, a, b, при которых программа выдаёт неправильный ответ (выполните задание устно).
3.       Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы.

Доработанную программу прикрепите к ответу.

20142#20142
Для какого названия города истинно высказывание:
(Первая буква гласная /\ Последняя буква гласная) ~  Название содержит букву «м»)?
Знаком ~ обозначается операция эквивалентности (результат X ~ Y – истина, если значения X и Y совпадают).
1) Москва          2) Дюссельдорф            3) Амстердам  4) Атланта
20141#20141
Для какого названия станции метро истинно высказывание:
(Первая буква согласная Вторая буква согласная) ~  Название содержит букву «л»)? 
Знаком ~ обозначается операция эквивалентности (результат X ~ Y – истина, если значения X и Y совпадают).
1) Маяковская           2) Отрадное                     3) Волжская           4) Комсомольская
20137#20137
Для какого названия реки ложно высказывание:
 (Вторая буква гласная  → Предпоследняя буква согласная) /\   Первая буква стоит в алфавите раньше третьей?
1) ДУНАЙ           2) МОСКВА                       3) ДВИНА           4) ВОЛГА
20135#20135
Для какого имени истинно высказывание:
 (Первая буква согласная  → Вторая буква гласная) /\   Последняя буква согласная?
1) АЛИСА              2) МАКСИМ                3) СТЕПАН                    4) ЕЛЕНА
Поделиться
Класснуть