Найди ошибку в коде паскаль

![введите сюда описание изображения]1

с шестой строки выдает ошибку, хотя пишу с учебника, в чем проблема?
Паскаль абсNET. Использование вещественных числе с целыми.

b:=n; writeln ('b=',b);
n:=trunk(a);writeln ('trunk'(3.6)=',n);

Anton Shchyrov's user avatar

Anton Shchyrov

33k2 золотых знака29 серебряных знаков59 бронзовых знаков

задан 1 дек 2016 в 13:10

GProst's user avatar

11

После третьей строки должен быть begin, на 7 строке второй апостроф — лишний.

A K's user avatar

A K

28.5k19 золотых знаков54 серебряных знака130 бронзовых знаков

ответ дан 1 дек 2016 в 13:21

Anton Shchyrov's user avatar

Anton ShchyrovAnton Shchyrov

33k2 золотых знака29 серебряных знаков59 бронзовых знаков

3

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

  1. Создайте пустую программу
  2. Запустите — запустилось — хорошо, не запустилось ищите ошибку.
  3. Добавляйте по одной строчке из вашего примера и запускайте — таким образом вы увидите какую строку перепечатали неверно!

ответ дан 1 дек 2016 в 13:23

JVic's user avatar

JVicJVic

3,2691 золотой знак15 серебряных знаков35 бронзовых знаков

1

shyrik2014

3 / 3 / 2

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

Сообщений: 112

1

Найти ошибку в коде

05.04.2010, 21:50. Показов 868. Ответов 10

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


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

Pascal
1
2
3
4
5
6
7
procedure form_menu;
var
  i:byte;
  sizeof:integer;
begin
  ramka(x,y,Size Of menu([1]+2),(n+2),colt,colt);
  gotoxy(2,2);

Компилятор ругается в этой строке ramka(x,y,Size Of menu([1]+2),(n+2),colt,colt);. Помогите устранить ошибку!



0



Эксперт по компьютерным сетямЭксперт Pascal/Delphi

4188 / 1289 / 237

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

Сообщений: 3,961

05.04.2010, 21:52

2

в паскале нет такой ф-ции как ramka



0



24 / 24 / 18

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

Сообщений: 229

05.04.2010, 21:53

3

А можно полность код.



0



Law[L]esS

05.04.2010, 21:54

Не по теме:

ошибки не устраняют, а исправляют :D



0



3 / 3 / 2

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

Сообщений: 112

05.04.2010, 21:54

 [ТС]

5

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

в паскале нет такого ф-ции как ramka

Это моя функция, которая отрабатывает раньше в программе



0



Эксперт по компьютерным сетямЭксперт Pascal/Delphi

4188 / 1289 / 237

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

Сообщений: 3,961

05.04.2010, 21:55

6

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

Это моя функция, которая отрабатывает раньше в программе

тогда покажи ее. откуда мы знаем что ты там в своей ф-ции понаписал.



0



shyrik2014

3 / 3 / 2

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

Сообщений: 112

05.04.2010, 21:56

 [ТС]

7

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
procedure ramka;
var
  i:byte;
begin
  window(x,y,x+m,y+n);
  textcolor(colt);
  textbackground(colf);
  clrscr;
  write(#201);
  for i:=1 to m-1 do
    write(#205);
    write(187);
    for i:=2 to n-1 do
      begin
        gotoxy(1,i);
        write(#186);
        gotoxy(m,i);
        write(#186);
      end;
        gotoxy(1,n);
        write(#200);
        for i:=1 to m-2 do
          write(#205);
          write(#188);
end;
 
 
procedure form_menu;
var
  i:byte;
  sizeof:integer;
begin
  ramka(x,y,SizeOf(menu([1]+2),(n+2),colt,colt);
  gotoxy(2,2);
  highvideo;
  write(menu[i]);
  lowvideo;
  for i:=1 to n do
    begin
      gotoxy(2,i+1);
      write(menu[i]);
    end;
end;

В процедуре рамка прорисовываю рамку, а в form_menu формирую менюшку, которая будет находиться в сворфмированной рамке!



0



Эксперт по компьютерным сетямЭксперт Pascal/Delphi

4188 / 1289 / 237

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

Сообщений: 3,961

05.04.2010, 21:58

8

shyrik2014, ну дык у тебя процедура не принимает ни каких параметров, а ты в нее пытаешься что-то передать.



0



shyrik2014

3 / 3 / 2

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

Сообщений: 112

05.04.2010, 22:00

 [ТС]

9

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
[PROLOG][QUOTE=TAVulator;642964][b]shyrik2014[/b], ну дык у тебя процедура не принимает ни каких параметров, а ты в нее пытаешься что-то передать.[/QUOTE]
unit modmenu;
interface
Uses crt;
type
  TM=array [1..5] of string [10];
  procedure ramka (x,y,m,n,colt,colf:byte);
  procedure form_menu (menu:TM; x,y,n,colt,colf:byte);
  function move_menu (menu:TM; x,y,n,colt,colf:byte):byte;
 
implementation[/PROLOG]

Это всё идёт до этого что я писал, все процедуры с параметрами описаны тут!



0



3 / 3 / 2

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

Сообщений: 112

05.04.2010, 22:11

 [ТС]

10

может кто растолкавать что не так сделано?



0



Mawrat

13095 / 5876 / 1706

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

Сообщений: 8,808

05.04.2010, 23:56

11

shyrik2014, по крайней мере ошибка в том, что количество открывающих скобок не равно количеству закрывающих скобок:

Pascal
1
2
3
4
5
  (*Заменить:
  ramka(x,y,SizeOf(menu([1]+2),(n+2),colt,colt);
  *)
  (*На:*)
  ramka(x,y,SizeOf(menu([1]+2)),(n+2),colt,colt);

Если вопрос задаётся об ошибке, то надо код ошибки указывать. Так было бы легче разбираться.



0



program errorinmatrix;
uses
  crt;
const
  nmax=100;
var
   a:array[1..nmax,1..nmax] of real;
   n,i,j:integer;
begin
  write('Введите n, не более чем ',nmax,' n=');
  readln(n);
  writeln('Исходная матрица:');
  for i:=1 to n do
    begin
      for j:=1 to n do
        begin
          a[i,j]:=i-j;
          write(a[i,j]:8:2);
        end;
      writeln;
    end;
  readln;
end.

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

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

Найдите ошибки в операторах на языке Паскаль и запишите правильный вариант и составьте блок-схему



Задание 185. Найдите ошибки в операторах на языке Паскаль и запишите правильный вариант и составьте блок-схему.


Ошибки:
а) Неправильно записано условие; не ставится знак «;» перед else и перед end.
б) Неправильно записано условие — простые условия следует взять в круглые скобки; не использован составной оператор после then и else.

Блок-схема:

Правильный фрагмент программы:
if (x>1) and (x<2) then
begin
x:=x+1;
y:=0
end
else

begin
x:=0;
y:=y+1
end;

Понравилась статья? Поделить с друзьями:
  • Найди ошибку в каждой строчке и вычеркни лишнюю фигуру
  • Найди ошибку в итальянском тексте
  • Найди ошибку в диктанте 3 класс
  • Найди ошибку в детском рисунке
  • Найди ошибку в вычислении 43000 8000