ЕГЭ, вопрос 24: Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки
Проверяемые элементы содержания по спецификации (2019): Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки.
Кодификатор 1.7.2/1.1.4. Уровень сложности П, 3 балла.
Время выполнения — 30 минут. [Можно сделать за 5, но может не хватить и 45 минут! Авторы вопросов иногда используют «бредовые идеи».]
Учите тригонометрию!
Задание разбивается на несколько ответов за каждый из которых (кроме первого) вы получите баллы.
Не приступайте к заданию, если не видите ошибки сразу (после первого прочтения, то есть осмысления действий программы).
Задания
- Демо 2020 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран минимальную чётную цифру этого числа.
Если в числе нет чётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик Python DIM N, DIGIT, MINDIGIT AS LONG
INPUT N
MINDIGIT = N MOD 10
WHILE N > 0
DIGIT = N MOD 10
IF DIGIT MOD 2 = 0 THEN
IF DIGIT < MINDIGIT THEN
MINDIGIT = DIGIT
END IF
END IF
N = N \ 10
WEND
IF MINDIGIT = 0 THEN
PRINT "NO"
ELSE
PRINT MINDIGIT
END IFN = int(input())
minDigit = N % 10
while N > 0:
digit = N % 10
if digit % 2 == 0:
if digit < minDigit:
minDigit = digit
N = N // 10
if minDigit == 0:
print("NO")
else:
print(minDigit)Алгоритмический язык Паскаль алг
нач
цел N, digit, minDigit
ввод N
minDigit := mod(N,10)
нц пока N > 0
digit := mod(N,10)
если mod(digit, 2) = 0 то
если digit < minDigit то
minDigit := digit
все
все
N := div(N,10)
кц
если minDigit = 0 то
вывод "NO"
иначе
вывод minDigit
все
кон
var N,digit,minDigit: longint;
begin
readln(N);
minDigit := N mod 10;
while N > 0 do
begin
digit := N mod 10;
if digit mod 2 = 0 then
if digit < minDigit then
minDigit := digit;
N := N div 10;
end;
if minDigit = 0 then
writeln('NO')
else
writeln(minDigit)
end.Си++ #include <iostream>
using namespace std;
int main() {
long N, digit, minDigit;
cin >> N;
minDigit = N % 10;
while (N > 0) {
digit = N % 10;
if (digit % 2 == 0)
if (digit < minDigit)
minDigit = digit;
N = N / 10;
}
if (minDigit == 0)
cout << "NO" << endl;
else
cout << minDigit << endl;
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 231.
2. Приведите пример такого трёхзначного числа, при вводе которого приведённая программа, несмотря на ошибки, выдаёт верный ответ.
3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
- Демо 2019 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран минимальную чётную цифру этого числа.
Если в числе нет чётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик Python DIM N, DIGIT, MAXDIGIT AS LONG
INPUT N
MAXDIGIT = N MOD 10
WHILE N > 0
DIGIT = N MOD 10
IF DIGIT MOD 2 = 0 THEN
IF DIGIT > MAXDIGIT THEN
MAXDIGIT = DIGIT
END IF
END IF
N = N \ 10
WEND
IF MAXDIGIT = 0 THEN
PRINT "NO"
ELSE
PRINT MAXDIGIT
END IFN = int(input())
maxDigit = N % 10
while N > 0:
digit = N % 10
if digit % 2 == 0:
if digit > maxDigit:
maxDigit = digit
N = N // 10
if maxDigit == 0:
print("NO")
else:
print(maxDigit)Алгоритмический язык Паскаль алг
нач
цел N, digit, maxDigit
ввод N
maxDigit := mod(N,10)
нц пока N > 0
digit := mod(N,10)
если mod(digit, 2) = 0 то
если digit > maxDigit то
maxDigit := digit
все
все
N := div(N,10)
кц
если maxDigit = 0 то
вывод "NO"
иначе
вывод maxDigit
все
кон
var N,digit,maxDigit: longint;
begin
readln(N);
maxDigit := N mod 10;
while N > 0 do
begin
digit := N mod 10;
if digit mod 2 = 0 then
if digit > maxDigit then
maxDigit := digit;
N := N div 10;
end;
if maxDigit = 0 then
writeln('NO')
else
writeln(maxDigit)
end.Си++ #include <iostream>
using namespace std;
int main() {
long N, digit, maxDigit;
cin >> N;
maxDigit = N % 10;
while (N > 0) {
digit = N % 10;
if (digit % 2 == 0)
if (digit > maxDigit)
maxDigit = digit;
N = N / 10;
}
if (maxDigit == 0)
cout << "NO" << endl;
else
cout << maxDigit << endl;
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 231.
2. Приведите пример такого трёхзначного числа, при вводе которого приведённая программа, несмотря на ошибки, выдаёт верный ответ.
3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
- Демо 2018 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 5.
Если в числе нет цифр, кратных 5, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Напоминание: 0 делится на любое натуральное число.Бейсик Python DIM N, DIGIT, MAXDIGIT AS LONG
INPUT N
MAXDIGIT = N MOD 10
WHILE N > 0
DIGIT = N MOD 10
IF DIGIT MOD 5 = 0 THEN
IF DIGIT > MAXDIGIT THEN
MAXDIGIT = DIGIT
END IF
END IF
N = N \ 10
WEND
IF MAXDIGIT = 0 THEN
PRINT "NO"
ELSE
PRINT MAXDIGIT
END IFN = int(input())
maxDigit = N % 10
while N > 0:
digit = N % 10
if digit % 5 == 0:
if digit > maxDigit:
maxDigit = digit
N = N // 10
if maxDigit == 0:
print("NO")
else:
print(maxDigit)Алгоритмический язык Паскаль алг
нач
цел N, digit, maxDigit
ввод N
maxDigit := mod(N,10)
нц пока N > 0
digit := mod(N,10)
если mod(digit, 5) = 0 то
если digit > maxDigit то
maxDigit := digit
все
все
N := div(N,10)
кц
если maxDigit = 0 то
вывод "NO"
иначе
вывод maxDigit
все
кон
var N,digit,maxDigit: longint;
begin
readln(N);
maxDigit := N mod 10;
while N > 0 do
begin
digit := N mod 10;
if digit mod 5 = 0 then
if digit > maxDigit then
maxDigit := digit;
N := N div 10;
end;
if maxDigit = 0 then
writeln('NO')
else
writeln(maxDigit)
end.Си++ #include
using namespace std;
int main() {
long N, digit, maxDigit;
cin >> N;
maxDigit = N % 10;
while (N > 0) {
digit = N % 10;
if (digit % 5 == 0)
if (digit > maxDigit)
maxDigit = digit;
N = N / 10;
}
if (maxDigit == 0)
cout << "NO" << endl;
else
cout << maxDigit << endl;
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 132.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
- D2018 (24). На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран
количество делящихся нацело на 4 чисел в исходной последовательности и максимальное делящееся нацело на 4 число. Если делящихся нацело на 4 чисел нет, требуется на экран вывести «NO».
Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
Бейсик Python CONST n = 4
count = 0
maximum = 1000
FOR I = 1 TO n
INPUT x
IF x mod 4 = 0 THEN
count = count + 1
IF x < maximum THEN
maximum = x
END IF
END IF
NEXT I
IF count > 0 THEN
PRINT count
PRINT maximum
ELSE
PRINT "NO"
END IFn = 4
count = 0
maximum = 1000
for i in range (1, n+1):
x = int(input())
if x % 4 == 0:
count += 1
if x < maximum:
maximum = x
if count > 0:
print (count)
print (maximum)
else:
print ("NO")Алгоритмический язык Паскаль алг
нач
цел n = 4
цел i, x
цел maximum, count
count := 0
maximum := 1000
нц для i от 1 до n
ввод x
если mod(x, 4) = 0 то
count := count + 1
если x < maximum то
maximum := x
все
все
кц
если count > 0 то
вывод count, нс
вывод maximum
иначе
вывод "NO"
все
конconst n = 4;
var i, x: integer;
var maximum, count: integer;
begin
count := 0;
maximum := 1000;
for i := 1 to n do
begin
read(x);
if x mod 4 = 0 then
begin
count := count + 1;
if x < maximum then
maximum := x
end
end;
if count > 0 then
begin
writeln(count);
writeln(maximum)
end
else
writeln('NO')
end.C++ #include <iostream>
using namespace std;
int main() {
const int n = 4;
int x, maximum, count;
count = 0;
maximum = 1000;
for (int i = 1; i <= n; i++) {
cin >> x;
if (x % 4 == 0) {
count++;
if (x < maximum)
maximum = x;
}
}
if (count > 0) {
cout << count << endl;
cout << maximum << endl;
}
else
cout << "NO" << endl;
return 0;
}
- R2018 (24). На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел,
не кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, не кратных трёх, программа должна вывести слово «NO». Программист написал программу неправильно.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 7 15 8 21.
2. Приведите пример такой последовательности, содержащей число, кратное 3, при вводе которой программа выведет правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.Бейсик Python COUNT = 0
MAXIMUM = 1000
FOR I = 1 TO 4
INPUT X
IF X MOD 3 <> 0 THEN
COUNT = COUNT + 1
IF X > MAXIMUM THEN
MAXIMUM = I
END IF
END IF
NEXT I
IF COUNT > THEN
PRINT COUNT
PRINT MAXIMUM
ELSE
PRINT “NO”
END IFcount = 0
maximum = 1000
for i in range(4):
x = int(input())
if x % 3 != 0:
count = count + 1
if x > maximum:
maximum = i
if count > 0:
print(count)
print(maximum)
else:
print("NO")Си++ Паскаль #include <iostream>
int main(){
int i, x, maximum;
count = 0;
maximum = 1000;
for (i=1; i<= 4; i++) {
std::cin >> x;
if (x % 3 != 0) {
count = count + 1;
if (x > maximum) maximum = i;
}
}
if (count > 0) {
std::cout << count << endl;
std::cout << maximum
else
std::cout << "NO";
return 0;
}var i, x: integer;
var maximum, count: integer;
begin
count := 0;
maximum := 1000;
for i:=1 to 4 do begin
read(x);
if x mod 3 <> 0 then begin
count := count + 1;
if x > maximum then
maximum := i;
end;
end;
if count > 0 then begin
writeln(count);
writeln(maximum);
end
else
writeln('NO');
end.
- Демо 2017 (24). Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется
определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.Бейсик Python DIM N, K AS INTEGER
INPUT N
K = 0
WHILE K MOD 3 = 0
K = K + 1
N = N \ 3
WEND
IF N > 0 THEN
PRINT K
ELSE
PRINT "Не существует"
END IF
ENDn = int(input())
k = 0
while k%3 == 0:
k = k + 1
n = n // 3
if n > 0:
print(k)
else:
print("Не существует")Алгоритмический язык Паскаль алг
нач
цел n, k
ввод n
k := 0
нц пока mod(k, 3)=0
k := k + 1
n := div(n,3)
кц
если n > 0
то вывод k
иначе вывод "Не существует"
все
конvar n, k: integer;
begin
read(n);
k := 0;
while k mod 3 = 0 do begin
k := k + 1;
n := n div 3;
end;
if n > 0 then
writeln(k)
else
writeln('Не существует')
end.Си #include <stdio.h>
int main(){
int n, k;
scanf("%d",&n);
k = 0;
while (k%3 == 0) {
k = k + 1;
n = n / 3;
}
if (n > 0)
printf("%d", k);
else
printf("Не существует");
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 9.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
- Демо 2016 (24). На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7.
Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик Python DIM N, DIGIT, SUM AS LONG
INPUT N
SUM = 0
WHILE N > 0
DIGIT = N MOD 10
IF DIGIT < 7 THEN
SUM = SUM + 1
END IF
N = N \ 10
WEND
PRINT DIGITN = int(input())
sum = 0
while N > 0:
digit = N % 10
if digit < 7:
sum = sum + 1
N = N // 10
print(digit)Алгоритмический язык Паскаль алг
нач
цел N, digit, sum
ввод N
sum := 0
нц пока N > 0
digit := mod(N,10)
если digit < 7 то
sum := sum + 1
все
N := div(N,10)
кц
вывод digit
конvar N, digit, sum: longint;
begin
readln(N);
sum := 0;
while N > 0 do
begin
digit := N mod 10;
if digit < 7 then
sum := sum + 1;
N := N div 10;
end;
writeln(digit)
end.Си #include <stdio.h>
int main()
{
int N, digit, sum;
scanf("%d", &N);
sum = 0;
while (N > 0)
{
digit = N % 10;
if (digit < 7)
sum = sum + 1;
N = N / 10;
}
printf("%d",digit);
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
- Демо 2015 (24). На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран
количество нечётных чисел в исходной последовательности и максимальное нечётное число. Если нечётных чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не
превышают 1000. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик Python CONST n = 4
count = 0
maximum = 999
FOR I = 1 TO n
INPUT x
IF x mod 2 <> 0 THEN
count = count + 1
IF x > maximum THEN
maximum = I
END IF
END IF
NEXT I
IF count > 0 THEN
PRINT count
PRINT maximum
ELSE
PRINT "NO"
END IFn = 4
count = 0
maximum = 999
for i in range(1, n + 1):
x = int(input())
if x % 2 != 0:
count += 1
if x > maximum:
maximum = i
if count > 0:
print(count)
print(maximum)
else:
print("NO")Алгоритмический язык Паскаль алг
нач
цел n = 4
цел i, x
цел maximum, count
count := 0
maximum := 999
нц для i от 1 до n
ввод x
если mod(x, 2) <> 0 то
count := count + 1
если x > maximum то
maximum := i
все
все
кц
если count > 0 то
вывод count, нс
вывод maximum
иначе
вывод "NO"
все
конconst n = 4;
var i, x: integer;
var maximum, count: integer;
begin
count := 0;
maximum := 999;
for i := 1 to n do
begin
read(x);
if x mod 2 <> 0 then
begin
count := count + 1;
if x > maximum then
maximum := i
end
end;
if count > 0 then
begin
writeln(count);
writeln(maximum)
end
else
writeln('NO')
end.Си #include <stdio.h> int main(void)
{
const int n = 4;
int i, x, maximum, count;
count = 0;
maximum = 999;
for (i = 1; i <= n; i++) {
scanf("%d",&x);
if (x % 2 != 0) {
count++;
if (x > maximum)
maximum = i;
}
}
if (count > 0) {
printf("%d\n", count);
printf("%d\n", maximum);
}
else
printf("NO\n");
}
- Демо 2014 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число 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
ENDvar 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<stdio.h>
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) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
- Демо 2013 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (x — действительное число) и определяется принадлежность этой точки одному
из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.
Бейсик Паскаль INPUT x
IF x>=-3 THEN
IF x<=9 THEN
IF x>1 THEN
PRINT "не принадлежит"
ELSE
PRINT "принадлежит"
ENDIF
ENDIF
ENDIF
ENDvar x: real;
begin
readln(x);
if x>=-3 then
if x<=9 then
if x>1 then
write('не принадлежит')
else
write('принадлежит')
end.Си Алгоритмический язык void main(void)
{
float x;
scanf("%f",&x);
if(x>=-3)
if(x<=9)
if(x>1)
printf("не принадлежит");
else
printf("принадлежит");
}алг
нач
вещ x
ввод x
если x>=-3 то
если x<=9 то
если x>1 то
вывод 'не принадлежит'
иначе
вывод 'принадлежит'
все
все
все
кон
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D и E). Границы (точки –3, 1, 5 и 9) принадлежат заштрихованным областям (B и D соответственно).Область Условие 1 (x >= –3) Условие 2 (x <= 9) Условие 3 (x > 1) Программа выведет Область обрабатывается верно A B C D E
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
- Демо 2012 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа)
и определяется принадлежность этой точки заданной закрашенной области (включая границы).
Программист торопился и написал программу неправильно.
Бейсик Паскаль INPUT x, y
IF y>=x THEN
IF y>=0 THEN
IF y<=2-x*x THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF
ENDvar x,y: real;
begin
readln(x,y);
if y>=x then
if y>=0 then
if y<=2-x*x then
write('принадлежит')
else
write('не принадлежит')
end.Си Алгоритмический язык void main(void){
float x,y;
scanf("% f % f",&x,&y);
if (y>=x)
if (y>=0)
if (y<=2-x*x)
printf("принадлежит");
else
printf("не принадлежит");
}алг
нач
вещ x,y
ввод x,y
если y>=x то
если y>=0 то
если y<=2-x*x то
вывод 'принадлежит'
иначе
вывод 'не принадлежит'
все
все
все
кон
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H).
Точки, лежащие на границах областей, отдельно не рассматривать.Область Условие 1 (y>=x) Условие 2 (y>=0) Условие 3 (y<=2–x*x) Программа выведет Область обрабатывается верно A B C D E F G H
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
- Демо 2011 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действиительные числа) и определяется принадлежность
этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно.
Паскаль Бейсик Си var x,y: real;
begin
readln(x,y);
if y<=x then
if y<=-x then
if yy>=x*x-2 then
write('принадлежит')
else
write('не принадлежит')
end.INPUT x, y
IF y<=x THEN
IF y<=-x THEN
IF yy>=x*x-2 THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF
ENDvoid main(void)
{ float x,y;
scanf("%f%f",&x,&y);
if (y<=x)
if (y<=-x)
if (y>=x*x-2)
printf("принадлежит");
else
printf("не принадлежит");
}
1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой правильный способ доработки исходной программы.)
- Демо 2010 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (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
ENDvoid 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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы).
- Демо 2009 (C1). Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (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
ENDvoid main(void)
{ float x,y;
scanf("%f%f",&x,&y);
if (y<=1)
if (x>=0)
if (y>=sin(x))
printf("принадлежит");
else
printf("не принадлежит");
}
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы.)
- Демо 2008 (C1). Требовалось написать программу, которая решает уравнение «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
ENDvoid 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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
- (т2-2012/1)
- (т2-2012/2)
- с114 (24). Дано натуральное число A > 0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + … + K*(K+1) окажется больше A.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.Бейсик Python DIM A,S,K AS INTEGER
INPUT A
S = 0
K = 1
WHILE S <= A
K = K + 1
S = S + K*(K+1)
WEND
PRINT K
ENDa = int(input())
s = 0
k = 1
while s <= a:
k = k + 1
s = s + k*(k+1)
print(k)Алгоритмический язык Паскаль алг
нач
цел a, s, k
ввод a
s := 0
k := 1
нц пока s <= a
k := k+1
s := s+k*(k+1)
кц
вывод k
конvar a, s, k: integer;
begin
read(a);
s := 0;
k := 1;
while s <= a do begin
k := k+1;
s := s+k*(k+1);
end;
writeln(k)
end.Си #include <stdio.h>
int main(){
int a, s, k;
scanf("%d", &a);
s = 0;
k = 1;
while (s <= a) {
k = k+1;
s = s+k*(k+1);
}
printf("%d", k);
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 15.
2. Укажите два наименьших значения A, при которых программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
- с124 (24). Дано натуральное число A>0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + … + K*(K+1) окажется больше A.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.Бейсик Python DIM A, S, K AS INTEGER
INPUT A
S = 0
K = 1
WHILE S <= A
S = S + K*(K+1)
K = K + 1
WEND
PRINT K
ENDa = int(input())
s = 0
k = 1
while s <= a:
s = s + k*(k+1)
k = k + 1
print(k)Алгоритмический язык Паскаль алг
нач
цел a, s, k
ввод a
s := 0
k := 1
нц пока s <= a
s := s+k*(k+1)
k := k+1
кц
вывод k
конvar a, s, k: integer;
begin
read(a);
s := 0;
k := 1;
while s <= a do begin
s := s+k*(k+1);
k := k+1;
end;
writeln(k)
end.Си #include <stdio.h>
int main() {
int a, s, k;
scanf("%d", &a);
s = 0;
k = 1;
while (s <= a) {
s = s+k*(k+1);
k = k+1;
}
printf("%d", k);
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 15.
2. Укажите два наименьших значения A, при которых программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
- с113 (24). Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ … + K2 окажется больше A.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.Бейсик Python DIM A, S, K AS INTEGER
INPUT A
S = 0
K = -1
WHILE S < A
K = K + 1
S = S + K*K
WEND
PRINT K
ENDa = int(input())
s = 0
k = -1
while s < a:
k = k + 1
s = s + k*k
print(k)Алгоритмический язык Паскаль алг
нач
цел a, s, k
ввод a
s := 0
k := -1
нц пока s < a
k := k+1
s := s + k*k
кц
вывод k
конvar a, s, k: integer;
begin
read(a);
s := 0;
k := -1;
while s < a do begin
k := k+1;
s := s + k*k;
end;
writeln(k)
end.Си #include <stdio.h>
int main(){
int a, s, k;
scanf("%d", &a);
s = 0;
k = -1;
while (s < a) {
k = k+1;
s = s + k*k;
}
printf("%d", k);
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 11.
2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки. За исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
- с123 (24). Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ … + K2 окажется больше A.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.Бейсик Python DIM A, S, K AS INTEGER
INPUT A
S = 0
K = 1
WHILE S <= A
S = S + K*K
K = K + 1
WEND
PRINT K
ENDa = int(input())
s = 0
k = 1
while s <= a:
s = s + k*k
k = k + 1
print(k)Алгоритмический язык Паскаль алг
нач
цел a, s, k
ввод a
s := 0
k := 1
нц пока s <= a
s := s + k*k
k := k+1
кц
вывод k
конvar a, s, k: integer;
begin
read(a);
s := 0;
k := 1;
while s <= a do begin
s := s + k*k;
k := k+1;
end;
writeln(k)
end.Си #include <stdio.h>
int main(){
int a, s, k;
scanf("%d", &a);
s = 0;
k = 1;
while (s <= a) {
s = s + k*k;
k = k+1;
}
printf("%d", k);
return 0;
}
1. Напишите, что выведет эта программа при вводе числа 11.
2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки. За исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
- (т2-2012/2)