Демонстрационный вариант ЕГЭ 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 IF
|
N = 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.
|
C++ | |
#include <iostream> 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) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Демонстрационный вариант ЕГЭ 2017 г. – задание №24 — Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
Бейсик
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 END
Python
n = 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. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик
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 DIGIT
Python
N = 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); return0; }
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
ЕГЭ 16.06.2016 по информатике. Основная волна. Вариант 41 (Часть С)
Ученик написал программу, определяющую, какой степенью числа 4 является введенное. Например, для 16 это 2, так как 42 = 16. Если же такой степени нет, то необходимо вывести сообщение «Не существует». К сожалению, ученик написал программу неверно.
Паскаль
var n,k: longint; begin readln(n); k := 0; while k mod 4 = 0 do begin n := n div 4; k := k + 1; end; if n <= 4 then writeln(k) else writeln('Не существует'); end.
Последовательно выполните следующее.
1. Что выдаст программа при вводе числа 64?
2. При вводе какого числа программа выдаст верный ответ? Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Помните, что нужно исправить имеющуюся программу, а не писать свою, хоть и с лучшим алгоритмом.
Требовалось написать программу, которая определяет, лежит ли точка А(х0,у0) внутри треугольной области, ограниченной осями координат и прямой y=2-x («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
Паскаль
var x0, у0, у: real; begin readln (x0, y0); if (x0 < 2)then begin if (x0 > 0)then begin у := 2 – х0; if (y0 < у) then writeln ('точка лежит внутри области') else writein ('точка не лежит внутри области'); end else writeln ('точка не лежит внутри области'); end else writeln ('точка не лежит внутри области'); end.
Си
#include <stdio.h> int main(void) { float x0, y0, y; scanf (″%f %f″,x0, y0); if (x0 < 2) { if (x0 > 0) { y = 2 – x0; if (y0 < y) printf (″точка лежит внyтри области″); else printf (″точка не лежит внyтри области″); } else printf (″точка не лежит внyтри области″); } else printf (″точка не лежит внyтри области″); }
Последовательно выполните задания:
- Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу.
- Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).
- Укажите, как можно доработать программу, чтобы вместо вложенных операторов IF она содержала логическую операцию AND.
Требовалось написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами х, у, z. Программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
var х, у, z: real; begin readln (x, у, z); if (x + y > z) then begin if (x + z > y) then if (y + z > x) then writeln('треугольник построить можно'); end else writeln('треугольник построить нельзя'); end
#include <stdio.h> int main(void) { float x, y, z; scanf (″%f %f %f″, &x, &y, &z); if (x + y > z) { if (x + z > y) if (y + z > x) printf(″треyгольник построить можно″); } else printf(″треyгольник построить нельзя″); }
Последовательно выполните задания:
- Приведите пример таких чисел х, у, z, при которых программа неверно решает поставленную задачу.
- Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать один из способов доработки исходной программы).
- Укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию AND.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (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.
#include <stdio.h> int 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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы.
Программист торопился и написал программу неправильно. Вот она:
var 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.
#include <stdio.h> int main(void) { float x, y; scanf(″%f %f″, &x, &y); if (y >= x) if (y >= 0) if (y <= 2-x*x) printf(″принадлежит″); else printf(″не принадлежит″); }
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы.
Программист торопился и написал программу неправильно. Вот она:
var x, y: real; begin readln(x, y); if y <= 3-x*x then if y >= 0 then if y >= x+1 then write('принадлежит') else write('не принадлежит'); end.
#include <stdio.h> int main(void) { float x, y; scanf(″%f %f″, &x, &y); if (y <= 3-x*x) if (y >= 0) if (y >= x+1) printf(″принадлежит″); else printf(″не принадлежит″); }
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H). Точки, лежащие на границах областей, отдельно не рассматривать.
Область | y <= 3-x*x | y >= 0 | y >= x+1 | вывод | верно? |
A | |||||
B | |||||
C | |||||
D | |||||
E | |||||
F | |||||
G | |||||
H | |||||
J | |||||
K |
В столбцах условий укажите «да», если условие выполнится, «нет» если условие не выполнится, «—» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите «да» или «нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (х – действительное число) и определяется принадлежность этой точки одному из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.
var x: real; begin readln(x) ; if x<=l5 then if x<9 then if x<=3 then write('принадлежит') else write('не принадлежит') end.
#include <stdio.h> int main(void) { float x; scanf(″%f″, &x); if (x<=l5) if (x<9) if (x<=3) printf(″принадлежит″); else printf(″не принадлежит″); }
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки -3, 3, 9 и 15) принадлежат заштрихованным областям.
Область | (x<=15) | (х<9) | (х<=3) | Программа выведет | Область обрабатывается верно |
A | |||||
B | |||||
C | |||||
D | |||||
E |
В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «—» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)