Исправить ошибки в программе паскаль задачи

Автор материалов — Лада Борисовна Есакова.
Самая распространенная ошибка, которую нужно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).

Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.

Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.

Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.

Особого внимания требует инициализация переменных.

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

Пример 1.

На об­ра­бот­ку по­сту­па­ет по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 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 DIGIT

N = int(input())

sum = 0

while N > 0:

digit = N % 10

if digit < 7:

sum = sum + 1

N = N // 10

print(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.

алг

нач

цел N, digit, sum

ввод N

sum := 0

нц пока N > 0

digit := mod(N,10)

если digit < 7 то

sum := sum + 1

все

N := div(N,10)

кц

вывод digit

кон

Си

#include

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) ука­жи­те, как ис­пра­вить ошиб­ку, т.е. при­ве­ди­те пра­виль­ный ва­ри­ант стро­ки.

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

Решение:

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

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

2. При­мер числа, при вводе ко­то­ро­го про­грам­ма выдаёт вер­ный ответ: 835.

Про­грам­ма ра­бо­та­ет не­пра­виль­но из-за не­вер­ной вы­во­ди­мой на экран пе­ре­мен­ной и не­вер­но­го уве­ли­че­ния суммы. Со­от­вет­ствен­но, про­грам­ма будет ра­бо­тать верно, если в числе стар­шая цифра (край­няя левая) равна сумме цифр, мень­ших 7.

3. В про­грам­ме есть две ошиб­ки.

Пер­вая ошиб­ка. Не­вер­ное уве­ли­че­ние суммы.

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

sum := sum + 1;

Вер­ное ис­прав­ле­ние:

sum := sum + digit;

Вто­рая ошиб­ка. Не­вер­ный вывод от­ве­та на экран.

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

writeln(digit)

Вер­ное ис­прав­ле­ние:

writeln(sum)

Пример 2.

Для за­дан­но­го по­ло­жи­тель­но­го ве­ще­ствен­но­го числа A не­об­хо­ди­мо найти мак­си­маль­ное целое число K, при ко­то­ром вы­пол­ня­ет­ся не­ра­вен­ство

(при K = 0 сумма счи­та­ет­ся рав­ной 0).

Для ре­ше­ния этой за­да­чи уче­ник на­пи­сал такую про­грам­му.

 Бей­сик

Python

DIM A, S AS DOUBLE

DIM K AS INTEGER

INPUT A

K = 1

S = 1

WHILE S < A

S = S + 1.0/K

K = K + 1

WEND

PRINT K

END

a = float(input())

k = 1

s = 1

while s < a:

s = s + 1.0/k

k = k + 1

print(k)

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

Пас­каль

алг

нач

вещ a, s

цел k

ввод a

k := 1

s := 1

нц пока s<a

s := s + 1.0/k

k := k + 1

кц

вывод k

кон

var a, s: real;

k: integer;

begin

read(a);

k := 1;

s := 1;

while s<a do begin

s := s + 1.0/k;

k := k + 1;

end;

write(k);

end.

Си

#include <stdio.h>

int main(){

double a, s;

int k;

scanf(«%lf»,&a);

k = 1;

s = 1;

while (s<a) {

s = s + 1.0/k;

k = k + 1;

}

printf(«%d», k);

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 боль­ше пра­виль­но­го зна­че­ния.

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

s := 1;

Пра­виль­ная стро­ка:

s := 0;

2) Не­вер­ное опре­де­ле­ние от­ве­та. При­ведённая про­грам­ма на­хо­дит не мак­си­маль­ное K, при ко­то­ром вы­пол­ня­ет­ся не­ра­вен­ство, а ми­ни­маль­ное, при ко­то­ром оно не вы­пол­ня­ет­ся, то есть уве­ли­чи­ва­ет вер­ное зна­че­ние на 1.

Кроме того, ис­поль­зо­ван­ный по­ря­док дей­ствий в цикле (уве­ли­че­ние K после уве­ли­че­ния S) при­во­дит к уве­ли­че­нию ещё на 1. Это можно было бы ис­пра­вить, из­ме­нив по­ря­док дей­ствий в цикле и умень­шив K после за­вер­ше­ния цикла, но эти дей­ствия не раз­ре­ше­ны по усло­вию за­да­чи.

По­это­му для ис­прав­ле­ния ошиб­ки можно про­сто скор­рек­ти­ро­вать зна­че­ние при вы­во­де.

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

write(k);

Пра­виль­ная стро­ка:

write(k-2);

Спасибо за то, что пользуйтесь нашими материалами.
Информация на странице «Задача №24. Исправление ошибок в программе.» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
Чтобы успешно сдать нужные и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими статьями из разделов нашего сайта.

Публикация обновлена:
07.06.2023

товарищи мозги дайте пожалуста правельное решение по паскалю помогите исправеть ошибки напешите как надо пожалуста а не посвоему. ребят зарание вам БОЛЬШОЕ СПАСИБО надеюсь на вас мои дорогие друзь

+7. Найти все различающиеся элементы целочисленной квадратной матрицы размерностью nxn.
+9. Записать в текстовый файл N символов. Выполнить следующие операции с созданным файлом:
— Выяснить, чего в нем больше: русских букв или цифр;
— Выяснить, вхо¬дит ли данное слово в указанный текст, и если да, то сколько раз;
— Составить в ал¬фавитном порядке список всех слов, встречающихся в этом тексте.

+10. Составить программу, вычеркивающую любую букву из данного текста.
у восьмой нет условия

program p71;
const
n=10;// n только от 2 до 15!
var
Matrix:array[1..n,1..n]of byte;//только byte!
uni:set of byte;
i,j:byte;
begin
randomize;//инициализация генератора случайных чисел
uni:=[];
//создание матрицы
for i:=1 to n do
begin
for j:=1 to n do
begin
Matrix[i,j]:=Random(128);//генератор случайных чисел
write(Matrix[i,j]:3,' ');
end;
writeln;
end;
//поиск уникальных элементов
writeln;
writeln;
for i:=1 to n do
for j:=1 to n do uni:=uni + [Matrix[i,j]];
write('Unikalnye chisla: ');
for i:=0 to 255 do
if i in uni then write(i:3,' ');
writeln;
readln;
end.
program p9;
uses crt;
const
CEndOfFile='@';//Символ конца файла. Можно задать любой символ или их комбинацию
type
TPDict=^TDict;
TDict=record
data:string;
next:TPDict;
end;
var
f:text;
s,n,w:string;
RusLet,Nums,Words:integer;
Dict:TPDict;
//функция подсчёта цифр
function CountNums(data:string):integer;
var
res,i:integer;
begin
res:=0;
for i:=1 to length(data) do
if data[i] in ['0'..'9'] then inc(res);
CountNums:=res;
end;
 
//функция подсчёта русских букв
function CountRusLet(data:string):integer;
var
res,i:integer;
begin
res:=0;
for i:=1 to length(data) do
if byte(data[i]) in [128..255] then inc(res);//считаем НЕанглийские буквы
//Если надо считать другие символы - их коды ввести в квадратных скобках вместо [128..255]
CountRusLet:=res;
end;
 
//функция, приводящая все английские буквы к верхнему регистру
function UpCaseStr(data:string):string;
var
i:integer;
begin
for i:=1 to length(data) do data[i]:=UpCase(data[i]);
UpCaseStr:=data;
end;
 
//функция подсчёта вхождения слов
function CountWords(data,wrd:string):integer;
var
n,res,i:integer;
s:string;
begin
res:=0;
data:=UpCaseStr(data);
wrd:=UpCaseStr(wrd);
s:='';
for i:=1 to length(data) do
if byte(data[i]) > 32 then s:=s+data[i] else
begin
if s <> '' then
begin
if s=wrd then inc(res);
s:='';
end;
end;
if s=wrd then inc(res);
CountWords:=res;
end;
 
//функция проверяет наличие заданного слова в словаре
function IsWordExist(pdict:TPDict;wrd:string):boolean;
var
res:boolean;
begin
res:=false;
while pdict <> nil do
begin
if UpCaseStr(pdict^.data)=UpCaseStr(wrd) then
begin
res:=true;
break;
end;
pdict:=pdict^.next;
end;
IsWordExist:=res;
end;
 
//процедура создания словаря (если существует - дополняет)
//строка не обрабатывается
procedure CreateDict(var pdict:TPDict;dat:string);
var
wlist:TPDict;
begin
if pdict = nil then
begin
new(pdict);
pdict^.data:=dat;
pdict^.next:=nil;
end else
begin
wlist:=pdict;
while wlist^.next <> nil do wlist:=wlist^.next;
new(wlist^.next);
wlist:=wlist^.next;
wlist^.next:=nil;
wlist^.data:=dat;
end;
end;
 
//процедура пополнения словаря (если не существует - создаёт)
//автоматически разделяет строку на слова
procedure StrToDict(var pdict:TPDict;data:string);
var
s:string;
i:integer;
begin
s:='';
for i:=1 to length(data) do
if byte(data[i]) > 32 then s:=s+data[i] else
begin
if s <> '' then
begin
if not IsWordExist(pdict,s) then CreateDict(pdict,s);
s:='';
end;
end;
if s <> '' then
if not IsWordExist(pdict,s) then CreateDict(pdict,s);
end;
 
//процедура сортировки слов в словаре
procedure SortDict(var pdict:TPDict);
var
head,tmp1,tmp2,nf:TPDict;
n:string;
begin
head:=nil;
nf:=pdict;
repeat
tmp1:=nf;
tmp2:=tmp1;
n:=tmp1^.data;
while tmp1 <> nil do
begin
if UpCaseStr(tmp1^.data) < UpCaseStr(n) then
begin
tmp2:=tmp1;
n:=tmp1^.data;
end;
tmp1:=tmp1^.next;
end;
tmp1:=nf;
if tmp1 = tmp2 then nf:=tmp2^.next else
begin
while tmp1 <> nil do
begin
if tmp1^.next <> tmp2 then tmp1:=tmp1^.next else
begin
tmp1^.next:=tmp2^.next;
break;
end;
end;
end;
tmp2^.next:=nil;
if head=nil then head:=tmp2 else
begin
tmp1:=head;
while tmp1^.next <> nil do tmp1:=tmp1^.next;
tmp1^.next:=tmp2;
end;
until nf=nil;
pdict:=head;
end;
 
//процедура сохранения словаря в файл
procedure WriteDict(pdict:TPDict;path:string);
var
f:text;
begin
assign(f,path);
rewrite(f);
while pdict <> nil do
begin
writeln(f,pdict^.data);
pdict:=pdict^.next;
end;
close(f);
end;
 
//Освобождение памяти от нашего словарика
//(мы ж культурные и должны за собой прибраться )
procedure DestroyDict(var pdict:TPDict);
var
tmp1, tmp2:TPDict;
begin
tmp1:=pdict;
pdict:=nil;
while tmp1 <> nil do
begin
tmp2:=tmp1^.next;
Dispose(tmp1);
tmp1:=tmp2;
end;
end;
 
begin
//инициализация переменных
Nums:=0;
RusLet:=0;
Words:=0;
Dict:=nil;
//ввод пути и создание файла
clrscr;
write('Vvedite put k failu: ');
readln(n);
assign(f,n);
rewrite(f);
clrscr;
//ввод текста и запись его в файл
writeln('Vvedite tekst.');
writeln('Dlja okonchania vvedite na novoj stroke "@" (bez kavychek).');
writeln;
readln(s);
while s<>CEndOfFile do
begin
writeln(f,s);
readln(s);
end;
close(f);
//ввод слова для поиска
clrscr;
write('Vvedite slovo dlja poiska: ');
readln(w);
//открытие только что записанного файла на чтение
//и его анализ в соответствии с заданием
assign(f,n);
reset(f);
while not eof(f) do
begin
readln(f,s);
Nums:=Nums+CountNums(s);
RusLet:=RusLet+CountRusLet(s);
Words:=Words+CountWords(s,w);
StrToDict(Dict,s);
end;
close(f);
SortDict(Dict);
clrscr;
if Nums > RusLet then writeln('Tsyfr bolshe, chem russkih bukv') else
if Nums < RusLet then writeln('Russkih bukv bolshe, chem tsyfr') else writeln('Russkih bukv i tsyfr porovnu');
writeln('Slovo "',w,'" vhodit v tekst ',Words,' raz.');
write('Vvedite put k failu slovarja: ');
readln(s);
WriteDict(Dict,s);
DestroyDict(Dict);
writeln;
writeln('Press [Enter] for exit.');
readln;
end.
program p10;
var
s:string;
c:char;
n:integer;
f,h:text;
begin
//начало основной программы
write('Type path to input file: ');
readln(s);
assign(f,s);
reset(f);
write('Type path to output file: ');
readln(s);
assign(h,s);
rewrite(h);
writeln;
write('Input letter: ');
readln(c);
while not eof(f) do
begin
readln(f,s);
n:=Pos(c,s);
while n > 0 do
begin
Delete(s,n,1);
n:=Pos(c,s);
end;
writeln(h,s);
end;
writeln;
writeln('Finished. Press [Enter] for exit.');
readln;
end.

1. Задания ЕГЭ. Часть 6

24 Исправление ошибок в программе
25 Алгоритмы обработки массивов
26 Выигрышная стратегия
27 Программирование

2. 24-2

Требовалось написать программу, при выполнении которой с клавиатуры вводится последовательность из шести неотрицательных
целых чисел, не превышающих 106, подсчитывается и выводится сумма введённых чётных
чисел или 0, если чётных чисел в последовательности нет. Ученик написал такую
программу:

3. 24-2 программа

var n, s: longint; i: integer;
Begin
s:=1;
for i:=1 to 6 do
begin
readln(n);
if i mod 2 = 0 then s := s + n;
end;
write(s);
end.

4. 24-2 задание к программе

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

5. 24-2 Решение

Первая строка с ошибкой:
s:=1;
Исправленная строка:
s:=0;
Вторая строка с ошибкой:
if i mod 2 = 0 then
Исправленная строка:
if n mod 2 = 0 then

6. 24-3

Дано целое положительное число N. Необходимо определить наименьшее целое число K, для
которого выполняется неравенство:
1 + 2 + … + K > N.
Для решения этой задачи ученик написал
программу, но, к сожалению, его программа
неправильная.

7. 24-3 Программа

var n, k: integer;
begin
read(n);
k := 1;
while n>0 do
begin
n := n-k;
end;
writeln(k)
end.
k := k+1;

8. 24-3 Задание

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

9. 24-3 Решение

• 1. Примеры чисел, при вводе которых
программа выводит неверный ответ:
Значение N
2
4
5
7
Верный ответ
2
3
3
4
Ответ программы
3
4
4
5

10. 24-3 Решение

2. Примеры чисел, при вводе которых программа
выводит верный ответ:
Значение N
Верный ответ
Ответ программы
1
2
2
3
3
3
6
4
4
10
5
5
Заметим, что программа выдаёт верный ответ для тех
значений N, которые можно представить в виде
суммы 1 + 2 + … + K. При K = 1, 2, 3, 4 получим
примеры, приведённые в таблице. Во всех остальных
случаях программа выдаёт неверный ответ.

11. 24-3 Решение

3. Программа содержит две ошибки:
1) неверное условие цикла;
2) неверный вывод результата (выводится значение, на 1
превышающее верное).
Пример исправления для языка Паскаль:
Первая ошибка:
while n>0 do begin
Исправленная строка:
while n>=0 do begin
Вторая ошибка:
writeln(k)
Исправленная строка:
writeln(k-1)
Незначительной опиской, не влияющей на оценку, следует считать
отсутствие служебных слов и знаков после содержательной части
исправления.

12. 24-1

• На обработку поступает последовательность
из четырёх неотрицательных целых чисел
(некоторые числа могут быть одинаковыми).
Нужно написать программу, которая выводит
на экран количество чётных чисел в исходной
последовательности и максимальное чётное
число. Если чётных чисел нет, требуется на
экран вывести «NO». Известно, что вводимые
числа не превышают 1000. Программист
написал программу неправильно. Ниже эта написанная им программа для Вашего удобства
приведена на пяти языках программирования.

13.

const n = 4;
var i, x: integer; maximum, count: integer;
begin
count := 0; maximum := 1000;
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.

14.

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

15. Решение

1. Программа выведет 2 1000.
2. Например, набор 2 4 5 1000.
3. Пример исправлений для языка Паскаль
Первая ошибка:
maximum := 1000;
Исправленная строка: maximum := -1;
Вторая ошибка: maximum := i
Исправленная строка: maximum := x

16. 24-4

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

17. 24-4 Программа

var a, s: real; k: integer;
Begin
read(a);
k := 1;
s := 1;
while s<a do
begin
s := s + 1.0/k; k := k + 1;
end;
write(k);
end.

18. 24-4 Задание к программе

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

19. 24-4 Решение

Решение использует запись программы на Паскале.
Допускается использование программы на других
языках.
1. При вводе числа 1.2 программа выведет число 2.
2. Примеры чисел, при вводе которых программа выводит верный ответ: 1.6, 2.05.
Примечание для проверяющего. Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.
В некоторых случаях эти ошибки компенсируют друг
друга, и ответ оказывается правильным. Это
происходит, если значение A попадает в один из следующих диапазонов: 1.5 < A < 1.83, 2 < A < 2.08.

20. 24-4 Решение (продолжение)

3. Программа содержит две ошибки.
1) Неверная инициализация. Начальное значение S должно быть равно нулю.
В приведённом варианте вычисленная сумма оказывается на 1 больше правильного
значения.
Строка с ошибкой:
s := 1;
Правильная строка:
s := 0;
2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не
выполняется, то есть увеличивает верное значение на 1.
Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив
порядок действий в цикле и уменьшив K после завершения цикла, но эти действия
не разрешены по условию задачи.
Поэтому для исправления ошибки можно просто скорректировать значение при
выводе.
Строка с ошибкой:
write(k);
Правильная строка:
write(k-2);

21. 25-1 Условие

Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –
10 000 до 10 000 включительно. Опишите на одном из
языков программирования алгоритм, позволяющий
найти и вывести количество пар элементов массива, в
которых сумма элементов делится на 3, но не делится
на 9. В данной задаче под парой подразумеваются два
соседних элемента массива.
Исходные данные объявлены так, как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые
из описанных переменных.

22. 25-1 Начало программы

const N = 20;
var a: array [1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]); …
end.

23. 25-1 условие (продолжение)

В качестве ответа Вам необходимо привести
фрагмент программы, который должен находиться на месте многоточия. Вы можете записать
решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free
Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и
переменные, какие были предложены в
приведённых фрагментах.

24. 25-1 Решение

k := 0;
for i := 1 to N-1 do
if ((a[i]+a[i+1]) mod 3=0) and ((a[i]+a[i+1]) mod
9<>0) then k:=k+1;
writeln(k);

25. 25-2 Условие

Дан целочисленный массив из 20 элементов. Элементы
массива могут принимать целые значения от 0 до 10 000
включительно. Опишите на естественном языке или на
одном из языков программирования алгоритм,
позволяющий найти и вывести количество пар элементов
массива, в которых оба числа являются чётными. В данной
задаче под парой подразумевается два подряд идущих
элемента массива.
Например, для массива из пяти элементов: 6; 1; 4; 6; 10 –
ответ: 2. Исходные данные объявлены так, как показано
ниже на примерах для некоторых языков
программирования и естественного языка. Запрещается
использовать переменные, не описанные ниже, но
разрешается не использовать некоторые из описанных
переменных.

26. 25-2 Условие (начало программы)

const N = 20;
var a: array [1..N] of integer; i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]); …
end.
В качестве ответа Вам необходимо привести
фрагмент программы, который должен
находиться на месте многоточия.

27. 25-2 Решение

k := 0;
for i := 1 to N — 1 do
if (a[i] mod 2 = 0) and (a[i + 1] mod 2 = 0) then
k:=k+1;
writeln(k);

28. 25-3 Условие

Дан массив, содержащий 2017 положительных
целых чисел, не превышающих 1000.
Необходимо найти и вывести максимальный из
тех элементов этого массива, восьмеричная
запись которых содержит не менее четырёх
цифр и оканчивается цифрой 4. Если таких чисел
в массиве нет, ответ считается равным нулю.
Исходные данные объявлены так, как показано
ниже. Запрещается использовать переменные,
не описанные ниже, но разрешается не
использовать часть из описанных.

29. 25-3 Пример начала программы

const N = 2017;
var a: array [1..N] of integer;
i, m, k: integer;
begin
for i := 1 to N do
readln(a[i]); …
end.
В качестве ответа Вам необходимо привести
фрагмент программы (или описание алгоритма
на естественном языке), который должен
находиться на месте многоточия.

30. 25-3 Решение

m := 0;
for i := 1 to N do
if (a[i] >= 512) and (a[i] mod 8 = 4) and
(a[i] > m) then m := a[i];
writeln(m);

31. 26-1

Два игрока, Петя и Ваня, играют в следующую игру.
Перед ними лежат две кучки камней, в первой из
которых 2, а во второй — 3 камня. У каждого игрока
неограниченно много камней. Игроки ходят по
очереди, первый ход делает Петя. Ход состоит в том,
что игрок или утраивает число камней в какой-то куче,
или добавляет 4 камня в какую-то кучу.
Игра завершается в тот момент, когда общее число
камней в двух кучах становится не менее 31. Если в
момент завершения игры общее число камней в двух
кучах не менее 40, то выиграл Петя, в противном
случае — Ваня. Кто выигрывает при безошибочной
игре обоих игроков? Каким должен быть первый ход
выигрывающего игрока? Ответ обоснуйте.

32.

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

33. 26-2

Два игрока, Петя и Вася, играют в следующую
игру. Перед ними лежат две кучки камней, в первой из которых 2, а во второй — 1 камень. У каждого игрока неограниченно много камней. Игроки ходят по очереди, первым ходит Петя.
Ход состоит в том, что игрок или увеличивает в 3
раза число камней в какой-то куче, или добавляет 3 камня в какую-то кучу.
Выигрывает игрок, после хода которого в одной
из куч становится не менее 24 камней. Кто выигрывает при безошибочной игре? Каким должен
быть первый ход выигрывающего игрока?

34.

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

35. 26-3

Два игрока играют в следующую игру. На координатной
плоскости стоит фишка. Игроки ходят по очереди. В начале
игры фишка находится в точке с координатами (3, 2). Ход
состоит в том, что игрок перемещает фишку из точки с
координатами (x, y) в одну из трёх точек: или в точку с
координатами (x + 3, y), или в точку с координатами (x, y +
2), или в точку с координатами (x, y + 4). Выигрывает игрок,
после хода которого расстояние по прямой от фишки до
точки с координатами (0, 0) больше 12 единиц. Кто
выиграет при безошибочной игре обоих игроков —
игрок, делающий первый ход, или игрок, делающий
второй ход? Как должен ходить выигрывающий игрок?
Постройте дерево партии для выигрышной стратегии
(в виде рисунка или таблицы).

36. 26-3 Решение

Квадрат расстояния от фишки до точки с координатами
(0, 0): r2 = x2 + y2. Побеждает игрок, после хода которого r2> 144.
Алгоритм выигрышной стратегии определим при помощи дерева
всех возможных партий. Не будем приводить здесь полное
дерево, отметим лишь, что при ходе первого игрока в точку (3, 4)
первый игрок при любом ответе противника имеет выигрышный
набор ходов.
Построим дерево партии для выигрышной стратегии первого
игрока: в узлах будем указывать координаты фишки и квадрат
расстояния до начала координат. Зелёным отмечены позиции, в
которых выигрывает первый игрок.
Дерево содержит все возможные варианты ходов второго игрока.
Из него видно, что при любом ответе второго игрока у первого
имеется ход, приводящий к победе.

37. 26-3Решение

38. 27-1 Условие

На спутнике «Фотон» установлен прибор, предназначенный для измерения энергии космических лучей. Каждую
минуту прибор передаёт по каналу связи неотрицательное
вещественное число — количество энергии, полученной за
последнюю минуту, измеренное в условных единицах.
Временем, в течение которого происходит передача,
можно пренебречь. Необходимо найти в заданной серии
показаний прибора минимальное произведение двух
показаний, между моментами передачи которых прошло
не менее 6 минут. Количество энергии, получаемое прибором за минуту, не превышает 1000 условных единиц.
Общее количество показаний прибора в серии не превышает 10 000. Напишите на любом языке программирования программу для решения поставленной задачи.

39. 27-1 Условие (продолжение)

Вам предлагаются два задания, связанные с этой
задачей: задание А и задание Б. Вы можете решать
оба задания А и Б или одно из них по своему выбору.
Итоговая оценка выставляется как максимальная
из оценок за задания А и Б. Если решение одного из
заданий не представлено, то считается, что
оценка за это задание составляет 0 баллов.
Задание Б является усложненным вариантом
задания А, оно содержит дополнительные
требования к программе. Перед программой
укажите версию языка программирования.

40. 27-1 Условие (продолжение)

А. Напишите на любом языке программирования программу
для решения поставленной задачи, в которой входные
данные будут запоминаться в массиве, после чего будут
проверены все возможные пары элементов.
Обязательно укажите, что программа является
решением задания А.
Максимальная оценка за выполнение задания А – 2 балла.
Б. Напишите программу для решения поставленной задачи,
которая будет эффективна как по времени, так и по памяти
(или хотя бы по одной из этих характеристик).
Программа считается эффективной по времени, если время
работы программы пропорционально количеству элементов
последовательности N, т.е. при увеличении N в k раз время
работы программы должно увеличиваться не более чем в k
раз.
Обязательно укажите, что программа является
решением задания Б.

41. 27-1 Условие (продолжение)

Перед программой укажите версию языка и кратко опишите использованный
алгоритм. В первой строке задаётся число N — общее количество показаний прибора.
Гарантируется, что N > 6. В каждой из следующих N строк задаётся одно неотрицательное вещественное число — очередное показание прибора.
Пример входных данных:
11
12
45
5
4
25
23
21
20
10
12
26
Программа должна вывести одно число — описанное в условии произведение.
Пример выходных данных для приведённого выше примера входных данных:
48

42. 27-1 Решение

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

43. 27-1 Решение

program c4;
const s = 6; {требуемое расстояние между показаниями}
Var N: integer;
a: array[0..s — 1] of real; {хранение показаний прибора}
{k-е введенное число записываем в ячейку a[k mod 6]}
a_: real; {ввод очередного показания}
mn: real; {минимальное введенное число}
{не считая 6 последних}
m: real; {минимальное значение произведения}
i: integer;
begin
readln(N);
{ Пролог. Ввод первых шести чисел}
for i:=1 to s do
begin
readln(a_);
a[i mod s] := a_
end;
{Ввод остальных значений, поиск минимального произведения}
mn := 1001; m := 1000 * 1000+1;
for i := s + 1 to N do
begin
readln(a_);
if a[i mod s] < mn then mn := a[i mod s];
if a_ * mn < m then m := a_ * mn;
a[i mod s] := a_
end;
writeln(m)
end.
27-1 Решение

44. Успеха, Вам на экзамене!

dimayudin

2 / 2 / 2

Регистрация: 18.12.2014

Сообщений: 72

1

Пожалуйста, исправьте ошибки в программе

18.09.2016, 20:44. Показов 1637. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var 
n:integer;
 
a:array[1..100] of string; //Переменная типа string, который будет пройден в след. уроке
buf: string[20];
i,j:integer;
begin
readln(n);
writeln('Введите ',n,' слов латинским алфавитом:');
for i:=1 to n do
 begin
  write('Слово ',i,'  ');
  readln(a[i]);
  end;
 i:=0;
 for i:=1 to length(a[i]) do 
 case a[i] of
  'Ю': write (' 1 ');  
  'Д': write (' 2 ');
  'И': write (' 3 ');
  'Н': write (' 4 ');
  'ю': write (' 1 ');
  'д': write (' 2 ');
  'и': write (' 3 ');
  'н': write (' 4 ');
 end;
 writeln;
 begin
    for i:=1 to n do 
        readln(str[i]);
        
  for i:=1 to n do write(str[i], ' ');
    for i:=1 to n-1 do
    for j:=1 to n-i do 
      if str[j][1]>str[j+1][1] then 
        begin
          buf:=str[j]; 
          str[j]:=str[j+1]; 
          str[j+1]:=buf;
        end;
     writeln;
    for i:=1 to n do write(str[i], ' ');
    writeln;
end;
end.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

18.09.2016, 20:44

Ответы с готовыми решениями:

Исправьте, пожалуйста, ошибки
Нужно вычислить A,B,C. d ввести с клавиатуры.
известно, что d&gt;0, при x=…, y=…, z=…, и d&lt;=0,…

Исправьте пожалуйста некоторые недочеты в программе по решению СЛАР методом Гаусса
Нашел программку для решения сист.лин.уравнений размерности n методом Гаусса, но нужно еще сделать…

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

Исправьте ошибки
я вот вложил две програмки bulat77 и крутоо!!bulat77 вот её надо сделать!доделать!!надо её сделать…

4

Почетный модератор

64288 / 47587 / 32739

Регистрация: 18.05.2008

Сообщений: 115,181

18.09.2016, 20:47

2

Цитата
Сообщение от dimayudin
Посмотреть сообщение

writeln(‘Введите ‘,n,’ слов латинским алфавитом:’);

Цитата
Сообщение от dimayudin
Посмотреть сообщение

case a[i] of
* ‘Ю’: write (‘ 1 ‘); *
* ‘Д’: write (‘ 2 ‘);
* ‘И’: write (‘ 3 ‘);
* ‘Н’: write (‘ 4 ‘);
* ‘ю’: write (‘ 1 ‘);
* ‘д’: write (‘ 2 ‘);
* ‘и’: write (‘ 3 ‘);
* ‘н’: write (‘ 4 ‘);

И что? Глазки строить будем или что? Это по Вашему буквы латинского алфавита?



0



2 / 2 / 2

Регистрация: 18.12.2014

Сообщений: 72

18.09.2016, 20:52

 [ТС]

3

это мой собственный алфавит по нему нижен сортироватьи каждому букве присваивать соответствующее значение



0



ZX Spectrum-128

Эксперт Pascal/Delphi

6806 / 4565 / 4817

Регистрация: 05.06.2014

Сообщений: 22,438

19.09.2016, 10:42

4

Синтаксические ошибки я исправил. Вроде.
Так как текст задания не указан, то далее не занимался.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var
  n: integer;
 
  st,a: array[1..100] of string; //Переменная типа string, который будет пройден в след. уроке
  buf: string[20];
  i, j: integer;
 
begin
  readln(n);
  writeln('Введите ', n, ' слов латинским алфавитом:');
  for i := 1 to n do
  begin
    write('Слово ', i, '  ');
    readln(a[i]);
  end;
  i := 0;
  for i := 1 to length(a[i]) do
    case a[i,1] of
      'Ю': write(' 1 ');
      'Д': write(' 2 ');
      'И': write(' 3 ');
      'Н': write(' 4 ');
      'ю': write(' 1 ');
      'д': write(' 2 ');
      'и': write(' 3 ');
      'н': write(' 4 ');
    end;
  writeln;
  begin
    for i := 1 to n do
      readln(st[i]);
 
    for i := 1 to n do
      write(st[i], ' ');
    for i := 1 to n - 1 do
      for j := 1 to n - i do
        if st[j][1] > st[j + 1][1] then
        begin
          buf := st[j];
          st[j] := st[j + 1];
          st[j + 1] := buf;
        end;
    writeln;
    for i := 1 to n do
      write(st[i], ' ');
    writeln;
  end;
end.



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

Регистрация: 22.11.2013

Сообщений: 12,588

Записей в блоге: 1

19.09.2016, 16:12

5

ZX Spectrum-128,

Pascal
18
19
20
21
22
23
    case a[i,1] of
      'Ю','ю': write(' 1 ');
      'Д','д': write(' 2 ');
      'И','и': write(' 3 ');
      'Н','н': write(' 4 ');
    end;



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

19.09.2016, 16:12

Помогаю со студенческими работами здесь

исправьте пожалуйста!
что я делаю неправильно? я хочу вывести рэндомно два числа три раза, а затем сумму каждой пары, но…

Исправьте, пожалуйста
Не понимаю в чем ошибка

uses crt;
var
f1,f2: text;
st1,st2: string;
M: integer;

Исправьте ошибку в моей программе
var st,str:string;
i,summ,b,f,a:integer;
begin
readln(str);
i:=1;
while str&lt;&gt;’=’ do…

Исправьте ошибки в коде
var mas:array of real;
k,n,m,q,w,s,a,b:real;
i:byte;
begin
writeln (‘vvedite razmernost…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

5

  • Задание: На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран количество разрядов числа, имеющих четные значения. Программист написал программу неправильно. Ниже эта программа приведена на языке Pascal:
Паскаль
var N, digit, sum: longint;
begin
readln(N);
sum := 1;
while N > 0 do
begin
digit := N mod 10;
if digit mod 2 = 0 then
sum := sum + digit;
N := N div 10;
end;
writeln(sum)
end.

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

  • Решение: Для решения таких заданий очень важно понимать, как должна выглядеть правильно написанная программа. Давайте разберёмся.В программу вводится число N. Далее проверяется каждый разряд числа, и если он кратен 2, то значение переменной sum должно увеличиваться на 1.

    Выполним задания последовательно.

    1. Напишите, что выведет эта программа при вводе числа 128.

    Переменная sum изначально равна 1. Рассмотрим каждый повтор цикла:

    1 повтор цикла:

    digit := n mod 10 = 128 mod 10 = 8

    условие digit mod 2 = 0 выполняется, к переменной sum прибавляется значение digit, то есть sum := 1 + 8 = 9

    N := N div 10 = 128 div 10 = 12

    2 повтор цикла:

    digit := n mod 10 = 12 mod 10 = 2

    условие digit mod 2 = 0 выполняется, к переменной sum прибавляется значение digit, то есть sum := 9+2 = 11

    N := N div 10 = 12 div 10 = 1

    3 повтор цикла:

    digit := n mod 10 = 1 mod 10 = 1

    условие digit mod 2 = 0 не выполняется

    N := N div 10 = 1 div 10 = 0

    Цикл завершен, на экран вывелось значение sum, то есть 11.

    Ответ: 11

    2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.

    Разберемся, как на самом деле работает программа. Во-первых, переменная sum изначально равна 1, во-вторых, к sum прибавляются все четные цифры числа. То есть мы должны найти такое число, количество четных разрядов которого равно сумме четных разрядов +1. Казалось бы, задача невыполнимая, но не стоит забывать, что цифра 0 четна, и мы можем её использовать в числе.

    Нам нужно трёхзначное число, значит максимальный результат, который может быть выведен при его вводе — 3, то есть все разряды должны быть четные. Для этого отлично подходит число 200, так как 1+2+0+0 = 3, и число 200 содержит ровно три четных разряда.

    Ответ: 200

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

    Так как мы ищем количество, то переменная sum изначально должна быть равна 0, а не 1. То есть строку

    sum := 1;

    нужно заменить на

    sum := 0;

    Так как мы ищем количество, то каждый раз, когда выполняется условие, переменная должна увеличиваться на 1, а не на разряд числа. То есть строку

    sum := sum + digit;

    нужно заменить на

    sum := sum + 1;

    Ответ:

    sum := 1; ===> sum := 0;

    sum := sum + digit; ===> sum := sum + 1;

Возможно, вам также будет интересно:

  • Исправить ошибки в программе python
  • Исправить ошибки в office 2007
  • Исправить ошибки в предложении люди посадили
  • Исправить ошибки в avi файле
  • Исправить ошибки в предложении карточки

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии