Найдите все ошибки в программе

Предлагается некоторая задача и программа , которая должна решать поставленную задачу, но содержит ошибки. Требуется определить результаты работы программы на различных входных данных, указать ошибки в программе и предложить правильное решение.

В прошлые годы предлагалась следующая задача: «Дана точка. Требуется определить попадание точки в область, заданную графиком». Ошибочно написанная программа , как правило, содержала вложенный оператор if с пропущенными else ветвями, а также содержала ошибки в условиях, характеризующих выделенную область.

Задача допускала множество вариаций. Можно было варьировать сложностью графика , используя гармонические функции, прямые и параболы, что влияло на сложность условий для выделения требуемой области. Необходимо было проводить анализ попадания точки в различные области графика . Даже для «натасканного» на подобные задачи ученика можно было предложить задачу, требующую понимания, а не только знания выученного шаблона.

Исправляем все ошибки в Windows 10 в 2 клика.

В этом году предложенная задача была значительно упрощена. Задача состояла в разборе цифр десятичного числа. Для тех учеников, которые могут написать программу перевода десятичного числа в некоторую систему счисления, эта задача представляется элементарной. Выше эта задача была мною подробно рассмотрена. Задача не допускает особых вариаций.

Ошибок особых там сделать просто негде. Можно, конечно, неверно записать условие в цикле while или в условном операторе, можно неверно написать оператор присваивания . Но все эти ошибки достаточно очевидны и легко исправляются. Тем не менее задача оценивается в 3 балла, что выше баллов по задаче С2, требующей программирования.

Рассмотрим один из вариантов задачи С1.

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N , не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. Вот вариант этой программы на Паскале:

var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 0; while N > 0 do begin digit := N mod 10; if digit < min_digit then min_digit := digit; N := N div 10; end; writeln (digit); end.

Последовательно выполните следующее:

  1. Напишите, что выведет программа при вводе числа 862.
  2. Найдите все ошибки в программе (их может быть одна или несколько). Для каждой ошибки:
  • Выпишите строку, в которой сделана ошибка;
  • Укажите, как исправить ошибку, — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Задача сочетает разбор числа и нахождение минимума. Первая ошибка в программе – неверная инициализация переменной min_digit , хранящей минимальное значение . Вторая ошибка, которую скорее следует рассматривать как описку, связана с ошибкой вывода – на печать выводится не переменная min_digit , а переменная digit . Из-за первой ошибки условие в операторе if никогда выполняться не будет и переменная min_digit сохранит значение 0, полученное при инициализации. Из-за второй ошибки на печать будет выведено значение переменной digit , полученное на последнем шаге цикла — старшая цифра введенного числа.

Поиск и устранение всех ошибок Windows. Как исправить ошибку?

Вот ответ, который следует дать для этой задачи:

  1. 8
  2. Первая строка с ошибкой: min_digit := 0;

следует заменить: min_digit := 9;
следует заменить: writeln (min_digit);

Большинство школьников, представивших решение этой задачи, давало правильный ответ на все три вопроса.

Источник: intuit.ru

Поиск ошибок в программе. Часть 1

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

  • Решение: Первым делом смотрим в условие задания, а именно, как должна работать программа без ошибок. Программа должна выводить сумму цифр числа, меньших 7. Выполним задания последовательно.1. Что выведет программа при вводе числа 456. Рассмотрим алгоритм. 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) Первая строка — N = 456 Вторая строка — sum = 0 Начало цикла 1-я итерация:
  • 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)

Источник: egeikt.wordpress.com

Как исправить программу чтобы она решала поставленную перед программистом задачу

Вариант 1 1. Дан одномерный массив а из шести элементов: 1) Как объявить этот массив в программе, записанной на языке Паскаль? 2) Чему равно значение элемента массива с индексом 4? 3) Чему равно значение элемента массива а[а[4]]? 2. Программа обрабатывает одномерный целочисленный массив Dat: Заполните трассировочную таблицу и определите, какие числа будут выведены в результате …

На чтение 3 мин Просмотров 1.1к. Опубликовано 25.04.2021

Вариант 1

1. Дан одномерный массив а из шести элементов:

1) Как объявить этот массив в программе, записанной на языке Паскаль?

2) Чему равно значение элемента массива с индексом 4?

3) Чему равно значение элемента массива а[а[4]]?

2. Программа обрабатывает одномерный целочисленный массив Dat:

Заполните трассировочную таблицу и определите, какие числа будут выведены в результате выполнения следующего фрагмента программы.

3. Дополнительное задание. Программисту было поручено написать программу нахождения суммы отрицательных элементов одномерного целочисленного массива. Программист разработал программу, но допустил в ней одну ошибку. Текст программы с ошибкой представлен ниже:

Каким окажется ответ после исполнения этой программы, если в качестве элементов массива будут введены числа 1,

Как исправить программу, чтобы она решала поставленную перед программистом задачу?

Вариант 2

1. Дан одномерный массив а из семи элементов:

1) Как объявить этот массив в программе, записанной на языке Паскаль?

2) Чему равно значение элемента массива с индексом 5?

Читайте также:
Программа которая чистит оперативную память

3) Чему равно значение элемента массива а[а[5]]?

2. Программа обрабатывает одномерный целочисленный массив Dat:

Заполните трассировочную таблицу и определите, какие числа будут выведены в результате выполнения следующего фрагмента программы.

3. Дополнительное задание. В представленном фрагменте программы значения одномерного массива задаются с помощью следующего оператора цикла:

Какие значения будут присвоены элементам массива?

07.06.2019

5 июня Что порешать по физике

30 мая Решения вчерашних ЕГЭ по математике

На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран сумму всех отрицательных чисел последовательности и максимальное число в последовательности.

Известно, что вводимые числа по абсолютной величине не превышают 1000. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.

Бейсик Python

for i in range(1, 5):

Алгоритмический язык
Паскаль

нц для i от 1 до 4

var s,i,x,mx: integer;

for i := 1 to 4 do

using namespace std;

Последовательно выполните следующее.

1. Напишите, что выведет эта программа при вводе последовательности -5 2 -4 3.

2. Приведите пример такой последовательности, содержащей хотя бы одно неотрицательное число, что, несмотря на ошибки, программа печатает правильный ответ.

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

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.

Достаточно указать ошибки и способ их исправления для одного языка программирования.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Решение использует запись программы на Паскале. Допускается использование программы на трёх других языках.

1. Программа выведет два числа: -4 и 3.

2. Программа напечатает правильный ответ, например, для последовательности -4 7 8 9

3. Первая ошибка. Неверная инициализация максимума.

Строка с ошибкой:

Возможный вариант исправления:

4. Вторая ошибка. Неверно ведётся суммирование элементов.

int main() int n,m,k,cnt;
for (int i=0; i cout cout >n;
cout cin>>m; cnt=0;
for (int j=1; j cin>>k;
if (k>m) cnt++;
m=k;
>
cout >
system(«pause»);
return 0;
>

1) Как объявить этот массив в программе, записанной на языке Паскаль?

2) Чему равно значение элемента массива с индексом 4?

3) Чему равно значение элемента массива а[а[4]]?

2. Программа обрабатывает одномерный целочисленный массив Dat:

Заполните трассировочную таблицу и определите, какие числа будут выведены в результате выполнения следующего фрагмента программы.

3. Дополнительное задание. Программисту было поручено написать программу нахождения суммы отрицательных элементов одномерного целочисленного массива. Программист разработал программу, но допустил в ней одну ошибку. Текст программы с ошибкой представлен ниже:

Каким окажется ответ после исполнения этой программы, если в качестве элементов массива будут введены числа 1,

Как исправить программу, чтобы она решала поставленную перед программистом задачу?

Вариант 2

1. Дан одномерный массив а из семи элементов:

1) Как объявить этот массив в программе, записанной на языке Паскаль?

2) Чему равно значение элемента массива с индексом 5?

3) Чему равно значение элемента массива а[а[5]]?

2. Программа обрабатывает одномерный целочисленный массив Dat:

Заполните трассировочную таблицу и определите, какие числа будут выведены в результате выполнения следующего фрагмента программы.

3. Дополнительное задание. В представленном фрагменте программы значения одномерного массива задаются с помощью следующего оператора цикла:

Дан одномерный массив а из семи элементов25 24 10 60 4 100 -11

//Задача 1
var d:integer;
begin
readln(d);
if d mod 2 =0 then
Writeln(‘Четное’)
else
Writeln(‘Не четное’);
end.

//Задача 2
var d:integer;
begin
readln(d);
if d mod 3 =0 then
Writeln(‘Делится’) else
Writeln(‘Не делится’);
end.

Program Rick_and_Morty;
Var i: integer;

begin
write(‘Ваш год: ‘);
readln(i);

case i mod 12 of
0: writeln(‘Год обезьяны’);
1: writeln(‘Год петуха’);
2: writeln(‘Год собаки’);
3: writeln(‘Год кабана’);
4: writeln(‘Год крысы’);
5: writeln(‘Год быка’);
6: writeln(‘Год тигра’);
7: writeln(‘Год кролика’);
8: writeln(‘Год дракона’);
9: writeln(‘Год змеи’);
10: writeln(‘Год лошади’);
11: writeln(‘Год овцы’);

Читайте также:
Проектировка лестницы на второй этаж в программе 3д самостоятельно

ПОМОГИТЕ ПО ИНФОРМАТИКЕ

1.Дан одномерный массив а из семи элементов:
25 24 10 60 4 100 -11
1)Как объявить этот массив в программе, записанной на языке Паскаль?

2)Чему равно значение элемента массива с индексом 5?

3)Чему равно значение элемента массива а [а [5]]?

const a: array [1..7] of integer = (25, 24, 10, 60, 4, 100, -11);
begin
writeln (‘a[5] = ‘,a[5]);
writeln (‘a[a[5]] = ‘, a[a[5]]);
end.

1) const a: array [1..7] of integer = (25, 24, 10, 60, 4, 100, -11);
2) a[5]=4
3) a[a[5]] = 60

Порядок выполнения

  1. Зайти в Borland
    Pascal.
  2. Набрать текст программы
    для решения задачи № 1 и получить ответ
    (при
    и;и).
  3. Исправить программу так,
    чтобы она решала задачу без использования
    слова else.
  4. Набрать текст программы
    для решения задачи № 2 и получить ответ
    (при
    ;;;).
  5. Исправить программу так,
    чтобы она решала задачу без использования
    оператора case.

Примеры задач

.

Задача 2.
Вычислить величину
,
где
a и
c –
целые числа.

Дополнительное задание

  1. Вычислить
  2. Вычислить
    при
  3. Вычислить
    ,
    где
  4. Вычислить
    где.
  5. Вычислить
    ,
    где
  6. Вычислить
    .
  7. Найти
  8. Найти

Контрольные вопросы

  1. Что такое алгоритм
    линейной структуры? Перечислите
    операторы, реализующие этот алгоритм.
  2. Что такое алгоритм
    разветвляющейся структуры? Перечислите
    операторы, реализующие этот алгоритм.
  3. Какой вид имеют составной
    оператор и оператор присваивания, а
    также что они означают?
  4. Какой вид имеют операторы
    ввода и вывода, а также что они означают?
  5. Какой вид имеет оператор
    безусловного и условного перехода, а
    также что они означают?
  6. Какой вид имеет оператор
    варианта и что он означает?
  7. Что такое метка, условие
    и селектор? К каким типам данных
    относятся эти понятия?
  8. Напишите, что означает
    каждая строка в вышеприведённых
    программах.
  9. Напишите программу к одной
    из задач дополнительного задания.

Лабораторная работа № 3. Программирование циклов Алгоритм циклической структуры

Алгоритм
циклической структуры – алгоритм,
в котором производится многократное
повторение однотипных действий.

Цикл–
многократно повторяющийся участок
алгоритма. Цикл включает заголовок
цикла, тело цикла и конец цикла.

Циклы делятся
на:

1. Цикл
с предусловием(условие выхода из
цикла проверяется в начале перед
действиями в теле цикла).

2. Цикл
с постусловием(условие выхода из
цикла проверяется в конце после действий
в теле цикла).

3. Цикл
с параметром(цикл выполняется
фиксированное количество раз, определяемое
параметром цикла).

Для реализации
алгоритма циклической структуры в
языке Pascalиспользуются
следующие операторы:

1. Оператор
цикла с предусловиемимеет вид:

while
U
do
Op

где while– пока,do– делать, U– условие, Op– оператор.

Оператор
означает, что пока условие U
истинное, повторять оператор Op
в цикле; как только условие станет
ложным, выйти из цикла.

2. Оператор
цикла с постусловиемимеет вид:

Op1;

OpN

until
U

где repeat– повторять,until– до тех пор пока,
Op1– оператор 1-й,OpN– операторN-й,
U– условие.

Оператор
означает, что повторять операторы
Op1
и т.д., … OpN
в цикле до тех пор, пока условие U
не станет истинным; как только
условие станет истинным, выйти из цикла.

3. Оператор
цикла с параметром(при увеличении
параметра) имеет вид:

for Par
:= Nz
to Kz
do Op

где for– для,to– до,do– делать,Par– параметр цикла,Nz– начальное значение,Kz– конечное значение,Op– оператор.

Оператор
означает, что для параметра Par
, увеличивающегося от начального
значения Nz
до конечного значения Kz
с шагом 1,
повторять оператор Op
в цикле.

4. Оператор
цикла с параметром(при уменьшении
параметра) имеет вид:

for Par
:= Nz
downto Kz
do Op

где for– для,downto– вниз до,do– делать,Par– параметр цикла,Nz– начальное значение,Kz– конечное значение,Op– оператор.

Оператор
означает, что для параметра Par
, уменьшающегося от начального значения
Nz
до конечного значения Kz
с шагом (-1),
повторять оператор Op
в цикле.

Параметр
цикла (или счётчик циклов) –
переменная порядкового типа, которая
изменяется в цикле от начального до
конечного значения с каким-либо шагом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

Источник: oshibkami.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru