Задание найти ошибку в тексте программы c
Обновлено: 07.07.2024
Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.
Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.
Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.
Особого внимания требует инициализация переменных.
Формат книги не позволяет рассмотреть все основные типы задач 2 части, рассмотрим лишь те, которые встречались на проверочных и экзаменационных работах последних двух лет.
На обработку поступает положительное целое число, не превышающее 10 9 . Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик
Python
INPUT N
WHILE N > 0
DIGIT = N MOD 10
IF DIGIT < 7 THEN
END IF
WEND
Паскаль
Алгоритмический язык
begin
readln(N);
while N > 0 do
begin
digit := N mod 10;
if digit < 7 then
N := N div 10;
end;
writeln(digit)
нач
цел N, digit, sum
ввод N
нц пока N > 0
если digit < 7 то
все
кц
вывод digit
Си
int main()
int N, digit, sum;
while (N > 0)
if (digit < 7)
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков.
1. Программа выведет число 4.
2. Пример числа, при вводе которого программа выдаёт верный ответ: 835.
Программа работает неправильно из-за неверной выводимой на экран переменной и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе старшая цифра (крайняя левая) равна сумме цифр, меньших 7.
3. В программе есть две ошибки.
Первая ошибка. Неверное увеличение суммы.
Строка с ошибкой:
sum := sum + digit;
Вторая ошибка. Неверный вывод ответа на экран.
Строка с ошибкой:
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство
(при K = 0 сумма считается равной 0).
Для решения этой задачи ученик написал такую программу.
Бейсик
Python
DIM K AS INTEGER
INPUT A
WHILE S < A
WEND
PRINT K
Алгоритмический язык
Паскаль
нач
вещ a, s
цел k
ввод a
нц пока s<a
кц
вывод k
k: integer;
begin
read(a);
while s<a do begin
end;
write(k);
Си
int main()
double a, s;
int k;
while (s<a)
return 0;
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа даст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только исправлять ошибочные строки; удалять строки или добавлять новые строки нельзя. Постарайтесь также не внести новые ошибки – за это оценка снижается.
Решение использует запись программы на Паскале. Допускается использование программы на других языках.
1. При вводе числа 1.2 программа выведет число 2.
2. Примеры чисел, при вводе которых программа выводит верный ответ: 1.6, 2.05.
Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.
В некоторых случаях эти ошибки компенсируют друг друга, и ответ оказывается правильным. Это происходит, если значение A попадает в один из следующих диапазонов: 1.5 < A < 1.83, 2 < A < 2.08.
3. Программа содержит две ошибки.
1) Неверная инициализация. Начальное значение S должно быть равно нулю.
В приведённом варианте вычисленная сумма оказывается на 1 больше правильного значения.
Строка с ошибкой:
2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1.
Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив порядок действий в цикле и уменьшив K после завершения цикла, но эти действия не разрешены по условию задачи.
Поэтому для исправления ошибки можно просто скорректировать значение при выводе.
Искать ошибки в программах — непростая задача. Здесь нет никаких готовых методик или рецептов успеха. Можно даже сказать, что это — искусство. Тем не менее есть общие советы, которые помогут вам при поиске. В статье описаны основные шаги, которые стоит предпринять, если ваша программа работает некорректно.
Шаг 1: Занесите ошибку в трекер
После выполнения всех описанных ниже шагов может так случиться, что вы будете рвать на себе волосы от безысходности, все еще сидя на работе, когда поймете, что:
- Вы забыли какую-то важную деталь об ошибке, например, в чем она заключалась.
- Вы могли делегировать ее кому-то более опытному.
Трекер поможет вам не потерять нить размышлений и о текущей проблеме, и о той, которую вы временно отложили. А если вы работаете в команде, это поможет делегировать исправление коллеге и держать все обсуждение в одном месте.
Вы должны записать в трекер следующую информацию:
- Что делал пользователь.
- Что он ожидал увидеть.
- Что случилось на самом деле.
Шаг 3: Найдите строку, в которой проявляется ошибка
Если ошибка вызывает падение программы, попробуйте запустить её в IDE под отладчиком и посмотрите, на какой строчке кода она остановится. Совершенно необязательно, что ошибка будет именно в этой строке (см. следующий шаг), но, по крайней мере, это может дать вам информацию о природе бага.
Шаг 4: Найдите точную строку, в которой появилась ошибка
Как только вы найдете строку, в которой проявляется ошибка, вы можете пройти назад по коду, чтобы найти, где она содержится. Иногда это может быть одна и та же строка. Но чаще всего вы обнаружите, что строка, на которой упала программа, ни при чем, а причина ошибки — в неправильных данных, которые появились ранее.
Если вы отслеживаете выполнение программы в отладчике, то вы можете пройтись назад по стектрейсу, чтобы найти ошибку. Если вы находитесь внутри функции, вызванной внутри другой функции, вызванной внутри другой функции, то стектрейс покажет список функций до самой точки входа в программу (функции main() ). Если ошибка случилась где-то в подключаемой библиотеке, предположите, что ошибка все-таки в вашей программе — это случается гораздо чаще. Найдите по стектрейсу, откуда в вашем коде вызывается библиотечная функция, и продолжайте искать.
Шаг 5: Выясните природу ошибки
Ошибки могут проявлять себя по-разному, но большинство из них можно отнести к той или иной категории. Вот наиболее частые.
Если ваша ошибка не похожа на описанные выше, или вы не можете найти строку, в которой она появилась, переходите к следующему шагу.
Шаг 6: Метод исключения
Если вы не можете найти строку с ошибкой, попробуйте или отключать (комментировать) блоки кода до тех пор, пока ошибка не пропадет, или, используя фреймворк для юнит-тестов, изолируйте отдельные методы и вызывайте их с теми же параметрами, что и в реальном коде.
Попробуйте отключать компоненты системы один за другим, пока не найдете минимальную конфигурацию, которая будет работать. Затем подключайте их обратно по одному, пока ошибка не вернется. Таким образом вы вернетесь на шаг 3.
Шаг 7: Логгируйте все подряд и анализируйте журнал
Ваша задача состоит в том, чтобы вернуться к шагу 3, обнаружив, где проявляется ошибка. Также это именно тот случай, когда стоит использовать сторонние библиотеки для более тщательного логгирования.
Шаг 8: Исключите влияние железа или платформы
Замените оперативную память, жесткие диски, поменяйте сервер или рабочую станцию. Установите обновления, удалите обновления. Если ошибка пропадет, то причиной было железо, ОС или среда. Вы можете по желанию попробовать этот шаг раньше, так как неполадки в железе часто маскируют ошибки в ПО.
Если ваша программа работает по сети, проверьте свитч, замените кабель или запустите программу в другой сети.
Ради интереса, переключите кабель питания в другую розетку или к другому ИБП. Безумно? Почему бы не попробовать?
Если у вас возникает одна и та же ошибка вне зависимости от среды, то она в вашем коде.
Шаг 9: Обратите внимание на совпадения
- Ошибка появляется всегда в одно и то же время? Проверьте задачи, выполняющиеся по расписанию.
- Ошибка всегда проявляется вместе с чем-то еще, насколько абсурдной ни была бы эта связь? Обращайте внимание на каждую деталь. На каждую. Например, проявляется ли ошибка, когда включен кондиционер? Возможно, из-за этого падает напряжение в сети, что вызывает странные эффекты в железе.
- Есть ли что-то общее у пользователей программы, даже не связанное с ПО? Например, географическое положение (так был найден легендарный баг с письмом за 500 миль).
- Ошибка проявляется, когда другой процесс забирает достаточно большое количество памяти или ресурсов процессора? (Я однажды нашел в этом причину раздражающей проблемы «no trusted connection» с SQL-сервером).
Шаг 10: Обратитесь в техподдержку
Наконец, пора попросить помощи у того, кто знает больше, чем вы. Для этого у вас должно быть хотя бы примерное понимание того, где находится ошибка — в железе, базе данных, компиляторе. Прежде чем писать письмо разработчикам, попробуйте задать вопрос на профильном форуме.
Ошибки есть в операционных системах, компиляторах, фреймворках и библиотеках, и ваша программа может быть действительно корректна. Но шансы привлечь внимание разработчика к этим ошибкам невелики, если вы не сможете предоставить подробный алгоритм их воспроизведения. Дружелюбный разработчик может помочь вам в этом, но чаще всего, если проблему сложно воспроизвести вас просто проигнорируют. К сожалению, это значит, что нужно приложить больше усилий при составлении багрепорта.
Полезные советы (когда ничего не помогает)
Что вам точно не поможет
- Паника
Не надо сразу палить из пушки по воробьям. Некоторые менеджеры начинают паниковать и сразу откатываться, перезагружать сервера и т. п. в надежде, что что-нибудь из этого исправит проблему. Это никогда не работает. Кроме того, это создает еще больше хаоса и увеличивает время, необходимое для поиска ошибки. Делайте только один шаг за раз. Изучите результат. Обдумайте его, а затем переходите к следующей гипотезе. - «Хелп, плиииз!»
Когда вы обращаетесь на форум за советом, вы как минимум должны уже выполнить шаг 3. Никто не захочет или не сможет вам помочь, если вы не предоставите подробное описание проблемы, включая информацию об ОС, железе и участок проблемного кода. Создавайте тему только тогда, когда можете все подробно описать, и придумайте информативное название для нее. - Переход на личности
Если вы думаете, что в ошибке виноват кто-то другой, постарайтесь по крайней мере говорить с ним вежливо. Оскорбления, крики и паника не помогут человеку решить проблему. Даже если у вас в команде не в почете демократия, крики и применение грубой силы не заставят исправления магическим образом появиться.
Ошибка, которую я недавно исправил
Это была загадочная проблема с дублирующимися именами генерируемых файлов. Дальнейшая проверка показала, что у файлов различное содержание. Это было странно, поскольку имена файлов включали дату и время создания в формате yyMMddhhmmss . Шаг 9, совпадения: первый файл был создан в полпятого утра, дубликат генерировался в полпятого вечера того же дня. Совпадение? Нет, поскольку hh в строке формата — это 12-часовой формат времени. Вот оно что! Поменял формат на yyMMddHHmmss , и ошибка исчезла.
Если блоки команд состоят только из одного оператора каждый, то использовать операторные скобки begin . end не обязательно:
Конструкции циклов в языке Паскаль
Цикл с предусловием:
Цикл с постусловием:
Цикл со счётчиком:
Операторы досрочного завершения цикла
Оператор языка Паскаль
Оператор продолжения — выполнение данного оператора прекращает текущее выполнение тела цикла и передает управление на проверку условия цикла
Оператор прерывания — выполнение данного оператора прекращает выполнение цикла и передает управление на следующий оператор после цикла
Разбор типовых задач
Задача 1. На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество нечётных чисел в исходной последовательности и максимальное нечётное число. Если нечётных чисел нет, требуется на экран вывести “NO”. Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе последовательности: 2 9 4 3.
2. Приведите пример такой последовательности, содержащей хотя бы одно нечётное число, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
1) Начинаем с общего анализа алгоритма, помня, что в нем возможны отдельные ошибки. (Что делает программа, описано в условии, но умение анализа алгоритма требуется нам как для поиска ошибок в нем, так и потому, что в последующих вариантах ЕГЭ назначение программы в условии может быть не указано — в качестве дополнительного усложнения задания.)
• В начале программы инициализируются (получают начальные значения) две переменных — count (обнуляется) и maximum (приравнивается 999). Уже из названия этих переменных можно предположить, что count — это счётчик чего-либо, а переменная maximum предназначена для определения максимального значения.
• Далее следует цикл с параметром, выполняемый 4 раза (константное значение п задается равным 4):
— считывается очередное значение х,
— проверяется его нечётность (неравенство нулю остатка при делении на 2): если х нечётно, то счётчик увеличивается на 1, а конструкция
— это хорошо знакомый приём определения максимума,
— случай чётного х не обрабатывается (ветвь else отсутствует), проход цикла завершается;
Итак, назначение и общие принципы работы программы ясны. Принимая на входе последовательность чисел, она должна определять максимальное значение среди нечётных таких чисел и одновременно подсчитывать количество нечётных чисел.
2) Сразу же можно понять скрытые в тексте программы ошибки (тем самым отвечая на третий вопрос в задании).
Первая ошибка — в определении максимума:
В типовом алгоритме поиска максимума (и аналогично для минимума) если текущее значение последовательности больше предполагаемого максимума, то предполагаемому максимуму присваивается это большее него текущее значение. То есть х. А здесь переменной maximum присваивается значение i.
Строка с ошибкой: maximum : = i
Правильная строка: maximum : = х
Согласно условию, в качестве ошибочной можно указать только одну строку. Поэтому оператор if х > maximum then (формально правильный) в запись ответа не входит.
Вторая ошибка — в начальном присваивании переменной maximum значения 999. В качестве исходного значения предполагаемого максимума нужно брать число, меньшее самого меньшего возможного числа в последовательности или в массиве. В условии указано, что числа вводимой последовательности — неотрицательные, значит, в качестве изначального предполагаемого максимума можно взять число 0 или любое отрицательное значение.
Строка с ошибкой: maximum := 999;
Правильная строка: maximum : = 0 ;
3) Что программа выведет при вводе последовательности 2 9 4 3?
Программа, несмотря на ошибки, верно выполняет подсчет количества нечётных чисел (в строках с переменной count ошибок нет). Поэтому значение count (первое выводимое на экран число) определится верно и будет равно 2 (так как в последовательности — два нечётных числа).
Что же касается поиска максимума, нетрудно догадаться: из-за того, что первоначально переменной maximum присвоено значение, заведомо большее любого из введённых чисел, условие х > maximum никогда не будет истинным. Так что значение maximum так и останется равным 999 и будет выведено на экран вторым числом.
Теперь мы можем дать ответ на первый вопрос задания. При вводе последовательности чисел 2 9 4 3 программа выведет два числа: 2 и 999.
4) Определить, в каком случае программа, несмотря на ошибки, выдаст правильный ответ, лишь немного сложнее.
Так как строки с переменной count не содержат ошибок, количество нечётных чисел определяется верно. Следовательно, в вводимой последовательности может быть любое количество нечётных значений. Возможно даже, что все числа последовательности — чётные, например: 2 4 6 8. В этом случае count окажется равно нулю, программа выдаст ответ “NO”, а ошибки в определении максимума будут просто “обойдены”.
Если же в введённой последовательности есть хотя бы одно нечётное число, то нужно “подогнать” эту последовательность так, чтобы выводимое значение maximum, равное 999, было правильным. Очевидно, это возможно, если в последовательности действительно будет иметься хотя бы одно число (нечётное!), которое равно 999, и причём это число действительно будет максимальным среди прочих нечётных значений. А значит, правильными будут, например, следующие последовательности:
2 4 6 999 (единственное нечётное число равно 999),
2000 4444 88888 999 (хотя остальные числа превышают 999, они — чётные, поэтому в определении максимума среди нечётных чисел не участвуют),
1 3 5 999 (999 — максимальное значение среди всех нечётных),
999 999 999 999 (все числа равны 999, следовательно, и максимум тоже равен 999).
Любой такой ответ (равно как и последовательность только из чётных чисел) — правилен.
В качестве ответа на второй вопрос задания можно записать любую последовательность, в которой максимальное нечётное значение равно 999, либо в которой нет ни одного нечётного значения.
1) При вводе последовательности 2 9 4 3 программа выведет два числа: 2 и 999.
2) Программа выдает правильный результат, например, при вводе последовательности 1 2 3 999.
3) Ошибки в программе и их исправление (по порядку следования строк в программе):
Строка с ошибкой: maximum := 999;
Правильная строка: maximum : = 0 ;
Строка с ошибкой: maximum : = i
Правильная строка: maximum : = х
В подобных заданиях важно не только указать все имеющиеся ошибки, но и не указать в качестве “ошибочной” правильную строку.
Как правило, в таких задачах под ошибками понимаются существенные искажения алгоритма, приводящие к тому, что программа не выполняет заявленное для неё предназначение. Искомыми ошибками не являются:
• использование оператора write или read вместо writeln или readln соответственно и прочие необязательные элементы функционала программы, связанные с выводом ответа на экран (кроме, например, указания в операторе вывода не той переменной, которая нужна);
• отсутствие точки с запятой в конце оператора и т.д.
Задача 2. Требовалось написать программу, при выполнении которой с клавиатуры считывается положительное целое число N, не превосходящее 10 9 , и определяется сумма цифр этого числа. Программист торопился и написал программу неправильно.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 256.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
1) Анализируем алгоритм.
• Вводится число N.
• Инициализируется переменная sum, в которой будет накапливаться искомая сумма (ей присваивается значение 1).
• Цикл выполняется, пока значение N остается больше нуля:
— оператор d : = N mod 10; — в переменную d заносится последняя цифра числа N,
— оператор N : = N div 10; — отбрасывание последней цифры числа,
— оператор sum : = d; — записывает в переменную sum очередную цифру числа;
• После выполнения цикла значение sum выводится на экран.
2) Очевидна первая ошибка: значение суммы цифр должно накапливаться в переменной sum, т.е. соответствующий оператор должен иметь вид:
sum := sum + d;, а не sum := d;.
Строка с ошибкой: sum := d;
Правильная строка: sum := sum + d;
Вторая ошибка тоже понятна: при инициализации переменной, в которой накапливается сумма, эту переменную нужно обнулять (единица — это инициализационное значение для произведения).
Строка с ошибкой: sum : = 1 ;
Правильная строка: sum : = 0 ;
3) При вводе числа 256 программа разобьёт его на отдельные цифры: 6, 5 и 2. Поскольку на каждом проходе цикла в переменную sum записывается очередная цифра, после выполнения цикла значение sum будет равно последней обработанной цифре. Цифры отделяются и обрабатываются по порядку справа налево, поэтому sum после выполнения цикла будет равно 2, это число и будет выведено на экран.
4) Выданный программой результат будет правильным, если последняя обработанная цифра числа будет в точности равна сумме цифр этого числа. Следовательно, все остальные цифры (кроме самой первой в числе) должны быть нулевыми. Количество же цифр в числе может быть любым. Например, это могут быть числа: 2, 30, 4000 и т.д. Однако поскольку значение sum изначально инициализируется неверно (этой переменной присваивается значение 1 вместо 0) вводимое число не может быть нулём (в этом случае программа выведет неправильный ответ 1 вместо правильного 0).
1) При вводе числа 256 программа выведет число 2.
2) Вводимое число, при котором программа выдаёт правильный ответ, может быть, например, равно 100.
3) Ошибки в программе и их исправление (по порядку следования строк в программе):
Строка с ошибкой: sum : = 1 ;
Правильная строка: sum : = 0;
Строка с ошибкой: sum := d;
Правильная строка: sum := sum + d;
Библиотека образовательных материалов для студентов, учителей, учеников и их родителей.
Наш сайт не претендует на авторство размещенных материалов. Мы только конвертируем в удобный формат материалы из сети Интернет, которые находятся в открытом доступе и присланные нашими посетителями.
Если вы являетесь обладателем авторского права на любой размещенный у нас материал и намерены удалить его или получить ссылки на место коммерческого размещения материалов, обратитесь для согласования к администратору сайта.
Разрешается копировать материалы с обязательной гипертекстовой ссылкой на сайт, будьте благодарными мы затратили много усилий чтобы привести информацию в удобный вид.
в программе осуществлен ввод лишних данных; ошибка в операторе условия (> вместо <, + вместо -) или в условии выхода из области; несоответствие количества «скобок» в условии (while и if, ошибка до или после else); возможно строки в программе поменяны местами (или строка удалена) ВОЗМОЖНЫЕ ВАРИАНТЫ ОШИБОК:
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите "да", если условие выполнится, "нет", если условие не выполнится, "—" (прочерк), если условие не будет проверяться, "не изв.", если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите "не изв". В последнем столбце укажите "да" или "нет". Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.) Последовательно выполните следующее:
Элементы ответа: Показать график Область Условие 1 (y<=x) Условие 2 (y<=-x) Условие 3 (y>=x*x-2) Программа выведет Область обрабатываетсяверно A нет — — — нет В нет — — — нет С нет — — — нет D да да да принадлежит да Е да нет — — нет F да нет — — нет G да да нет не принадлежит да
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки: Последовательно выполните следующее. Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей. 2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. Область Условие1 (у >=x+1) Условие 2 (y <=2−2*x*x) Условие 3 (y >= x*x−5) Вывод Верно — принадлежит нет не принадлежит да — да
Задача№4 Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа 584. 3. Укажите одно число для которого эта программа будет работать верно. 2. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Программа выведет число 2. Программа работает верно для всех чисел, начинающихся на 9. в том числе для числа 9. [Достаточно указать любое такое число.] В качестве ответа для остальных чисел программа выдаёт число на 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. Пояснение
Читайте также: