Решение. Задание 24. Досрочный ЕГЭ 2020 года, Информатика
Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее , и выводит число, равное количеству цифр 4 в десятичной записи числа N. Программист написал программу неправильно. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
DIM N AS LONG DIM R, d AS INTEGER INPUT N R = 0 WHILE N > 0 d = N MOD 10 IF d <> 4 THEN R = R + d END IF N = N \ 10 WEND PRINT R EN
N = int(input()) R = 0 while N > 0: d = N % 10 if d != 4: R = R + d N = N // 10 print(R)
алг нач цел N, R, d ввод N R := 0 нц пока N > 0 d := mod(N, 10) если d <> 4 то R := R + d все N := div(N, 10) кц вывод R кон
var N: longint; R, d: integer; begin readln(N); R := 0; while N > 0 do begin d := N mod 10; if d <> 4 then R := R + d; N := N div 10; end; writeln(R); end
#include using namespace std; int main() < long int N; int R, d; cin >> N; R = 0; while (N > 0) < d = N % 10; if (d != 4) < R = R + d; >N = N / 10; > cout
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 241.
2. Приведите пример входного числа N, при котором приведённая программа, несмотря на ошибки, выдаёт верный ответ.
3. Найдите допущенные программистом ошибки и исправьте их.
Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Известно, что в тексте программы нужно исправить не более двух строк так, чтобы она стала работать правильно.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения
1. 3
2. 401 (подойдет любое число, у которого сумма цифр, не равных 4, равна количеству четверок)
3.
Строка с ошибкой if d<>4 then R:=R+d; |
Исправленная строка if d=4 then R:=R+1; |
Благодарим за то, что пользуйтесь нашими статьями. Информация на странице «Решение. Задание 24. Досрочный ЕГЭ 2020 года, Информатика» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам. Чтобы успешно сдать необходимые и поступить в ВУЗ или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими статьями из разделов нашего сайта.
Публикация обновлена: 15.09.2023
Chapter 6: Возвращение к циклам
Игры включают в себя много сложных циклов. Эта глава должна послужить вызовом для того, чтобы вы могли стать экспертом по циклам. Если вы можете понять материал в этой главе от начала до её конца, вы можете называться экспертом по циклам.
Если стать экспертом по циклом не является вашей целью, хотя бы убедитесь, что вы можете написать ответы к первым восьми задачам. Это даст вам достаточно знаний для продолжения работы с этой книгой. И, к тому же, пребытие экспертом по циклам всё равно никогда не помогало никому пойти на свидание. (Поверьте мне, я проверял.)
Существуют видео объяснения с ответами, и код ответа “анимируется”. Просто нажмите на кнопку “шаг” и вы увидите, как действует код.
6.1 Последний символ функции Print
По умолчанию, функция print выводит символ возвращения каретки в конце только что напечатаной строки. Этот символ двигает вывод следующей строки на следующую линию. Чаще всего, это то, что нам нужно. Но иногда это не так. Если мы хотим продолжать выводить текст на той же строке, мы можем поменять стандартный последний символ, выводимый в конце. Например:
print ("Розовый") print ("Осьминог")
Это выведет:
Розовый
Осьминог
И, используя новую опцию установки последнего(end) символа, мы можем создать код:
print ("Розовый", end="") print ("Осьминог")
Это выведет:
РозовыйОсьминог
Мы также можем поставить пробел, вместо пустого символа:
print ("Розовый", end=" ") print ("Осьминог")
Это выведет:
Розовый Осьминог
Вот ещё один пример, используя переменную:
i=0 print (i, end=" ") i=1 print (i, end=" ")
Это выведет:
0 1
6.2 Продвинутые задачи циклов
- Напишите код, выводящий на экран десять звёздочек (*):
Используйте цикл for внутри которого будет помещён print, выводящий звёздочки по одной, вместо того чтобы сразу вывести все десять с помощью одного print’a за раз. Это можно сделать с помощью двух строк кода, цикла for и выражения print .
Это то же самое, что и предыдущая проблема, к которой добавился вывод пяти и двадцати звёзд. Скопируйте код предыдущего решения, меняя циклы for по надобности.
Поработайте над этим хотя бы 10 минут, прежде чем подсмотреть ответ. Посмотрите на задачу 1. Код в задаче Problem 1, генерирующий одну строчку звёздочек, должен повториться 10 раз.
Это очень похоже на предыдущую проблемы. Экспериментируйте со значениями внутри циклов, чтобы определить, что конкретно контролируется каждой функцией range.
Опять же, схоже с задачами 3 и 4, но с другим диапазоном циклов.
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Используйте два цикла. Первую строчку выведите циклом, а не через:
print("0 1 2 3 4 5 6 7 8 9")
Подсказка: сначала создайте цикл, выводящий первую строчку. Затем поместите его внутри цикла, посторяющегося 10 раз. Используйте переменные i или j . Этот и следующий примеры помогут осознать, что эти переменные делают.
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 5 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9
Подсказка: это — то же самое, что и задача 6, но цикл внутри цикла повторяется не фиксированное количество раз. Не используйте range(10) , пытайтесь задавать его ситуационно.
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
Подсказка: тут будет посложнее. Понадобятся два внутренних цикла. Один выводит пробелы, другой — числа. Для начала, попробуйте написать цикл, делающий следующее:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
После того, как это работает, напишите цикл внутри внешнего, но перед другим внутренним циклом. Используйте новый цикл для вывода достаточного количества пробелов на экран, чтобы выравнивание цифр теперь происходило по правому краю.
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Подсказка: попытайтесь изменить код из первой задачи, чтобы вывести:
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27 0 4 8 12 16 20 24 28 32 36 0 5 10 15 20 25 30 35 40 45 0 6 12 18 24 30 36 42 48 54 0 7 14 21 28 35 42 49 56 63 0 8 16 24 32 40 48 56 64 72 0 9 18 27 36 45 54 63 72 81
Затем измените код для вывода:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
В конце концов, используйте if для вывода пробелов, если печатаемое число меньше 10.
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
Подсказка, сначала напишите код, выводящий:
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9
Затем напишите код, выводящий:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
Затем закончите добавлением пробелов для достижения финального результата.
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1
Это может быть достигнуто, комбинируя 9 и 11 задачи.
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1
6.3 Повторение пройденного
-
Что выведет эта программа?
x=0 while x < 10: print (x) x=x+2
x=1 while x < 64: print (x) x=x*2
x=5 while x >= 0: print (x) if x == "1": print ("Полетели!") x=x-1
x=input("Введите число, которое больше нуля: ") while xx=10 while x < 0: print (x) x-1 print ("Полетели")print (3==1+2) x=5 print (x==5) print (3<4) print (4<4) print ("Hi" == "Hi") print ("hi" == "Hi") print ("a" < "b") t=5==5 print (t) done=False if done: print ("I am done.") else: print ("I am not done.")You are not logged in. Log in here and track your progress.
Copyright © 2017
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai LinЧто выведет эта программа
В решении задания есть видеоразбор
- digit := 456 mod 10 = 6
- 6 < 7 — условие выполняется, следовательно sum := sum + 1 = 0 + 1 = 1
- N := N div 10 = 456 div 10 = 45
writeln(digit) — digit в последней итерации равна 4, то есть выводится 4.
Ответ: 4
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
Пожалуй, самая сложная часть задания. Сначала давайте определим, что вообще выводит неверно написанная программа. Как мы видим, выводится значение digit. В цикле операция digit := N mod 10; выполняется каждый повтор цикла, в последнем повторе переменная digit равна первому (старшему) разряду числа. Проще говоря, мы ввели 456 — программа вывела 4, введём 389 — программа выведет 3.
Требовалось написать программу, которая выводит сумму цифр числа, меньших 7, то есть мы должны подобрать такое трёхзначное число, чтобы старший разряд этого числа был равен сумме цифр числа, которые меньше 7. Примером может быть, к примеру, число 936 — сумма разрядов, меньших 7 равна 9-ти, на экран выводится старший разряд, то есть 9.
Ответ: 936
3. Найдите все ошибки в этой программе.
Ошибка 1. Каждый повтор цикла при выполнении условия к переменной sum прибавляется единица. Программа должна искать сумму разрядов, а не их количество, то есть к переменной sum должна прибавляться переменная digit. Значит строку
нужно заменить на
sum := sum + digit;
Ошибка 2. Программа выводит значение переменной digit, должна же выводить значение переменной sum. Заменим строку
Ответ: sum := sum + 1; -> sum := sum + digit; и writeln(digit) -> writeln(sum)
Видеоразбор задания:
Поделиться:
Комментарии ( 2 )
Хочу задать вопрос по второму пункту задания. Любое трехзначное число в котором старший разряд равен сумме двух младших подойдет? Например, 734, 211, 523.
Мне кажется, что подходят только числа, которые начинаются с 7,8,9 (т.к. в последних твоих двух примерах сумма цифр, меньших 7, будет 2+1+1=4 и 5+2+3=10 соответственно, т.е не будут подходить по заданию).
Подходят числа: 963,936,954,945, 862,826,853,835,844, 761,716,752,725,743,734.
При подготовке материала использовались источники:
http://programarcadegames.com/index.php?chapter=back_to_looping&lang=ru
http://infbu.ru/catalog/item141.html