Виды ошибок в программах
Я учусь на своих ошибках. Ругаю себя за это, но продолжаю ошибаться. С другой стороны — это всё-таки лучше, чем не учиться совсем, и наступать на одни и те же грабли бесконечно.
При создании программ, даже простых, ошибки неизбежны. Поэтому для поиска ошибок во всех средствах разработки имеются особые инструменты для отладки. Но сегодня не об отладке и не о поиске ошибок. Сегодня о видах ошибок, которые встречаются в программах.
Итак, основных вида всего три:
- Синтаксические ошибки
- Логические ошибки
- Ошибки выполнения программы
Синтаксические ошибки в программах
Эти ошибки довольно распространены, особенно среди начинающих. Но эти ошибки — самые безобидные. Потому что компиляторы легко находят ошибки синтаксиса и указывают место в исходном коде, где обнаружена такая ошибка. Программисту остаётся только исправить её.
Синтаксические ошибки — это ошибки синтаксиса (а то бы вы не догадались))). То есть ошибки правил языка. Например, для Паскаля это будет синтаксической ошибкой:
WriteLn('Hello, World !!!') ReadLn;
Потому что после первой строки нет точки с запятой.
Подобные ошибки очень часто совершают новички. И это вгоняет их в ступор — они пугаются и не могут понять, что же не так с их кодом. Хотя если бы они внимательно его посмотрели и прочитали сообщение об ошибке, то легко могли бы исправить её:
Потому что в сообщении чётко сказано:
Syntax error, ";" expected but "identifier READLN" found
что можно перевести как
синтаксическая ошибка, ";" ожидалось, но "READLN" найден
То есть компилятор говорит нам: я ожидал увидеть точку с запятой, а нашёл идентификатор READLN
.
Логические ошибки в программах
Это самые противные и самые труднонаходимые ошибки. Программа может быть написана совершенно правильно с точки зрения синтаксиса языка, и при этом она будет неправильно работать. Потому что программист допустил где-то логическую ошибку.
И компилятор вам ничего об этой ошибке не расскажет, потому что правила языка не нарушены.
Поиски таких ошибок могут занять много времени и отнять у вас немало здоровья. Поэтому при разработке программ лучше не торопиться и стараться не допускать логических ошибок.
Пример логической ошибки:
for i := 1 to 10 do if i = 15 then WriteLn('i = 15');
Здесь мы сравниваем значение i
с числом 15, и выводим сообщение, если i = 15
.
Но фишка в том, что в данном цикле i
не будет равно 15 НИКОГДА, потому что в цикле переменной i
присваиваются значения от 1 до 10.
Эта ошибка довольно безобидная. Здесь мы имеем просто бессмысленный код, который не причинит никакого вреда.
Однако представьте, что программа должна выдавать какой-то сигнал тревоги, если i = 15
. Тогда получится, что никакого сигнала пользователь никогда не услышит, даже если случилось что-то страшное. А всё потому, что программист немного ошибся. Вот так вот и падают ракеты и самолёты…
Распространённые логические ошибки в С++ вы можете посмотреть здесь.
Ошибки времени выполнения программы
Даже если исходный код не содержит ни логических, не синтаксических ошибок, это ещё не означает, что ваша программа безупречна. Потому что ошибки могут возникнуть в ходе выполнения программы. Например, случайно будет удалён файл, который должна читать программа, и она не сможет его найти. Если не принять мер, то программа может завершиться аварийно. А пользователям такое поведение программ очень не нравится.
Одна из самых рапространённых ошибок времени выполнения — это неожиданное деление на ноль. Пример:
Write('y = '); ReadLn(y); x := 100 / y; WriteLn('100 / ', y, ' = ', x);
Что здесь такого? Всё правильно и с точки зрения логики, и с точки зрения синтаксиса. И в большинстве случаев программа отработает без каких-либо неожиданностей.
Но представьте, что пользователь введёт ноль. Что тогда будет? Правильно — попытка деления на ноль. А на ноль делить нельзя. Поэтому во время выполнения этой программы произойдёт ошибка, которая очень расстроит пользователя. Потому что в случае, например, с консольным приложением программа просто закроется, и пользователь не поймёт, что это было. Но зато поймёт, что программа — говно, и программы от этого разработчика лучше больше никогда не использовать.
В данном случае, если вы не уверены на 100%, что y будет отличаться от нуля, надо всегда делать проверку на ноль. И хороший код должен быть хотя бы таким:
Write('y = '); ReadLn(y); if y = 0 then WriteLn('ERROR: y = 0') else begin x := 100 / y; WriteLn('100 / ', y, ' = ', x); end;
Ну что же. На этом с видами ошибок пока всё. Изучайте программирование и поменьше ошибайтесь.
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Содержание
- помогите новичку pliiiz
- 14 ответов
- Syntax error expected but identifier readln found
- Виды ошибок в программах
- Подпишись на новости, чтобы ничего не пропустить
- Синтаксические ошибки в программах
- Логические ошибки в программах
- Ошибки времени выполнения программы
- Syntax error expected but identifier readln found
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Syntax error expected but identifier readln found
помогите новичку pliiiz
14 ответов
Не уверен, что Read без параметров прокатит. А ставить Паскаль влом. Вроде, надо или переменную типа char описывать, или использовать ReadLn.
Я Паскаль уже тоже не помню, но ReadLn b ввод Enter катит точно.
Так ReadLn означает ввод целой строки «в никуда». Можно вводить, что угодно, только Enter не забыть нажать. 😉
спасибо за ответы , да с ReadLn все работает по плану, но например ..такая прогр-ма >>>>
program koren;
var n,max:integer;
begin
writeln(‘число max ? ‘);
readln(max);
n:=2;
while n >16 . после нажатия на ввод , вместо етого она закривается
Originally posted by solinoid
спасибо за ответы , да с ReadLn все работает по плану, но например ..такая прогр-ма >>>>
program koren;
var n,max:integer;
begin
writeln(‘число max ? ‘);
readln(max);
n:=2;
while n >16 . после нажатия на ввод , вместо етого она закривается
Ну ты всегда в конце программы перед end. ставь ReadLn;
Ну ты всегда в конце программы перед end. ставь ReadLn; [/QUOTE]
Fatal:Syntax error,;expected but identifier READLN found
Еще один способ хороший есть:[COLOR=blue]
Program proga;
uses Crt;
var —-;
begin
—
—
—
Repeat until readkey=#27;
end.[/COLOR]
Программа не закроется пока не нажмешь на кнопку Esc.
Источник
Syntax error expected but identifier readln found
Кто может сказать как сделать теперь так.
Существует 3 edit(а)
1-Ввод х
2-Ввод n
3-Вывод S
Существует кнопка которая обрабатывает всю процедуру.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Ed_x: TEdit;
ed_n: TEdit;
Lb_sum: TLabel;
Label1: TLabel;
Btn_sum: TButton;
Lb_x: TLabel;
Lb_n: TLabel;
procedure Btn_sumClick(Sender: TObject);
procedure Ed_xKeyPress(Sender: TObject; var Key: Char);
procedure ed_nKeyPress(Sender: TObject; var Key: Char);
private
< Private declarations >
public
< Public declarations >
end;
var
Form1: TForm1;
function vstep(z:real;k:integer):real; // функция возведения в степень
begin
vstep:=exp(ln(z)*k);
end;
procedure TForm1.Btn_sumClick(Sender: TObject);
var eps:real;
i:integer;
s,x:real;
n:integer;
begin
x:=strtofloat(ed_x.Text);
if (x 0) then
begin
n:=0;
s:=1;
eps:=0.001;
i:=1;
while eps> 0.0001 do
begin
eps:=(i+1)*vstep(x,i);
s:=s+eps;
i:=i+1;
end;
end
else begin
if ed_n.Text=» then ed_n.Text=’0′;
n:=strtoint(ed_n.Text);
if (n 0) and (vrLength — vrPos > I) and (vrSelStart >= vrPos) then
Key := #0; //»погасить» клавишу
end;
‘,’, ‘.’:
begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
Key := #0 //»погасить» клавишу
else
Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей ‘Back Space’
else
Key := #0; //»погасить» все остальные клавиши
end;
end;
<запрет на ввод не целых чисел и букв>
procedure TForm1.ed_nKeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos, vrLength, vrSelStart: byte;
const
I: byte = 1;
//I+1 = количество знаков после запятой (в данном случае — 2 знака)
begin
with Sender as TEdit do
begin
vrLength := Length(Text); //определяем длину текста
vrPos := Pos(‘,’, Text); //проверяем наличие запятой
vrSelStart := SelStart; //определяем положение курсора
end;
‘0’..’9′:
begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength — vrPos > I) and (vrSelStart >= vrPos) then
Key := #0; //»погасить» клавишу
end;
#8: ; //позволить удаление знаков клавишей ‘Back Space’
else
Key := #0; //»погасить» все остальные клавиши
end;
end;
Источник
Виды ошибок в программах
Подпишись на новости, чтобы ничего не пропустить
Я учусь на своих ошибках. Ругаю себя за это, но продолжаю ошибаться. С другой стороны — это всё-таки лучше, чем не учиться совсем, и наступать на одни и те же грабли бесконечно.
При создании программ, даже простых, ошибки неизбежны. Поэтому для поиска ошибок во всех средствах разработки имеются особые инструменты для отладки. Но сегодня не об отладке и не о поиске ошибок. Сегодня о видах ошибок, которые встречаются в программах.
Итак, основных вида всего три:
Синтаксические ошибки в программах
Эти ошибки довольно распространены, особенно среди начинающих. Но эти ошибки — самые безобидные. Потому что компиляторы легко находят ошибки синтаксиса и указывают место в исходном коде, где обнаружена такая ошибка. Программисту остаётся только исправить её.
Синтаксические ошибки — это ошибки синтаксиса (а то бы вы не догадались))). То есть ошибки правил языка. Например, для Паскаля это будет синтаксической ошибкой:
Потому что после первой строки нет точки с запятой.
Подобные ошибки очень часто совершают новички. И это вгоняет их в ступор — они пугаются и не могут понять, что же не так с их кодом. Хотя если бы они внимательно его посмотрели и прочитали сообщение об ошибке, то легко могли бы исправить её:
Потому что в сообщении чётко сказано:
что можно перевести как
То есть компилятор говорит нам: я ожидал увидеть точку с запятой, а нашёл идентификатор READLN .
Логические ошибки в программах
Это самые противные и самые труднонаходимые ошибки. Программа может быть написана совершенно правильно с точки зрения синтаксиса языка, и при этом она будет неправильно работать. Потому что программист допустил где-то логическую ошибку.
И компилятор вам ничего об этой ошибке не расскажет, потому что правила языка не нарушены.
Поиски таких ошибок могут занять много времени и отнять у вас немало здоровья. Поэтому при разработке программ лучше не торопиться и стараться не допускать логических ошибок.
Пример логической ошибки:
Здесь мы сравниваем значение i с числом 15, и выводим сообщение, если i = 15 . Но фишка в том, что в данном цикле i не будет равно 15 НИКОГДА, потому что в цикле переменной i присваиваются значения от 1 до 10.
Эта ошибка довольно безобидная. Здесь мы имеем просто бессмысленный код, который не причинит никакого вреда. Однако представьте, что программа должна выдавать какой-то сигнал тревоги, если i = 15 . Тогда получится, что никакого сигнала пользователь никогда не услышит, даже если случилось что-то страшное. А всё потому, что программист немного ошибся. Вот так вот и падают ракеты и самолёты…
Распространённые логические ошибки в С++ вы можете посмотреть здесь.
Ошибки времени выполнения программы
Даже если исходный код не содержит ни логических, не синтаксических ошибок, это ещё не означает, что ваша программа безупречна. Потому что ошибки могут возникнуть в ходе выполнения программы. Например, случайно будет удалён файл, который должна читать программа, и она не сможет его найти. Если не принять мер, то программа может завершиться аварийно. А пользователям такое поведение программ очень не нравится.
Одна из самых рапространённых ошибок времени выполнения — это неожиданное деление на ноль. Пример:
Что здесь такого? Всё правильно и с точки зрения логики, и с точки зрения синтаксиса. И в большинстве случаев программа отработает без каких-либо неожиданностей.
Но представьте, что пользователь введёт ноль. Что тогда будет? Правильно — попытка деления на ноль. А на ноль делить нельзя. Поэтому во время выполнения этой программы произойдёт ошибка, которая очень расстроит пользователя. Потому что в случае, например, с консольным приложением программа просто закроется, и пользователь не поймёт, что это было. Но зато поймёт, что программа — говно, и программы от этого разработчика лучше больше никогда не использовать.
В данном случае, если вы не уверены на 100%, что y будет отличаться от нуля, надо всегда делать проверку на ноль. И хороший код должен быть хотя бы таким:
Ну что же. На этом с видами ошибок пока всё. Изучайте программирование и поменьше ошибайтесь.
Источник
Syntax error expected but identifier readln found
Анна Бак » 27.10.2014 17:40:51
Re: Ошибка в коде программы!
Дож » 27.10.2014 18:07:56
Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 20:02:42
Дож писал(а): Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.
Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.
Re: Ошибка в коде программы!
Little_Roo » 27.10.2014 20:40:10
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 21:35:18
Re: Ошибка в коде программы!
Little_Roo » 27.10.2014 21:38:27
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 22:11:59
Re: Ошибка в коде программы!
Дож » 27.10.2014 23:28:21
Дож писал(а): Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.
Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.
Источник
Syntax error expected but identifier readln found
Есть код. Говорит ошибка
строка 69 (предпоследняя строка)Ожидалось ‘;’
А действительно, что ты хотел сказать этим оператором?
Добавлено 17.04.11, 18:46
После строки
P.S. пиши код с отступами.
Код был написан с отступами. Только, чтобы это увидеть, надо использовать тэги подсветки, а не цитаты.
yana33311, кнопка «CODE=pas», а не QUOTE.
Этого недостаточно. Тут вся структура программы порушена. Что за переменная e в 25-ой строке, где она описана? Есть функция exp, переменной e готовой нет. Как может компилироваться строка №39 (Case K Of), когда K описана как Real? Что за описание переменных внутри Case-а (49 строка)?
Ошибок гораздо больше на самом деле (лень проверять в TP, проверил в FPC):
Источник
Adblock
detector
Please I Need Help Again — Keep getting this error please some help me the error and the pascal below
55 / 6 untitl~3.pas
Fatal: Syntax error, ; expected but identifier READLN found
program Untitled (input,output);
{decleration}
var
months:array[1..12] of string;
days:array[1..12] of integer;
begin
writeln(‘Enter Month 1’);
readln (months [1]);
writeln(‘Enter The Amount Of Days In The Month 1’);
readln (days[1]);
writeln(‘Enter Month 2’);
readln (months [2]);
writeln(‘Enter The Amount Of Days In The Month 2’);
readln (days[2]);
writeln(‘Enter Month 3’);
readln (months [3]);
writeln(‘Enter The Amount Of Days In The Month 3’);
readln (days[3]);
writeln(‘Enter Month 4’);
readln (months [4]);
writeln(‘Enter The Amount Of Days In The Month 4’);
readln (days[4]);
writeln(‘Enter Month 5’);
readln (months [5]);
writeln(‘Enter The Amount Of Days In The Month 5’);
readln (days[5]);
writeln(‘Enter Month 6’);
readln (months [6]);
writeln(‘Enter The Amount Of Days In The Month 6’);
readln (days[6]);
writeln(‘Enter Month 7’);
readln (months [7]);
writeln(‘Enter The Amount Of Days In The Month 7’);
readln (days[7]);
writeln(‘Enter Month 8’);
readln (months [8]);
writeln(‘Enter The Amount Of Days In The Month 8’);
readln (days[8]);
writeln(‘Enter Month 9’);
readln (months [9]);
writeln(‘Enter The Amount Of Days In The Month 9’);
readln (days[9]);
writeln(‘Enter Month 10’);
readln (months [10]);
writeln(‘Enter The Amount Of Days In The Month 10’);
readln (days[10]);
writeln(‘Enter Month 11’);
readln (months [11]);
writeln(‘Enter The Amount Of Days In The Month 11’);
readln (days[11]);
writeln(‘Enter Month 12’)
readln (months [12]);
writeln(‘Enter The Amount Of Days In The Month 12’)
readln (days[12]);
writeln(months[1],’has’,days[1],’days’);
writeln(months[2],’has’,days[2],’days’);
writeln(months[3],’has’,days[3],’days’);
writeln(months[4],’has’,days[4],’days’);
writeln(months[5],’has’,days[5],’days’);
writeln(months[6],’has’,days[6],’days’);
writeln(months[7],’has’,days[7],’days’);
writeln(months[8],’has’,days[8],’days’);
writeln(months[9],’has’,days[9],’days’);
writeln(months[10],’has’,days[10],’days’);
writeln(months[11],’has’,days[11],’days’);
writeln(months[12],’has’,days[12],’days’);
readln;
end.
люди помогите новичку, у меня такая проблема, все программы сделанные мною в Паскале выключаются (окно пропадает) при открытии или при нахождении правельного ответа…например >> program xxx;
begin
write (‘xxxx’)
end.
ета программа будет закрываться сразу после открития …как сделать что бы при окончании про-ма не закривалась сама ?
14 ответов
Цитата:
Originally posted by solinoid
люди помогите новичку, у меня такая проблема, все программы сделанные мною в Паскале выключаются (окно пропадает) при открытии или при нахождении правельного ответа…например >> program xxx;
begin
write (‘xxxx’)
end.
ета программа будет закрываться сразу после открития …как сделать что бы при окончании про-ма не закривалась сама ?
Код:
program xxx;
begin
write (‘xxxx’);
read;
end.
вставь реад и тогда она не закроется пока не введешь еникей.
10
28 декабря 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by AlexandrVSmirno
вставь реад и тогда она не закроется пока не введешь еникей.
Не уверен, что Read без параметров прокатит. А ставить Паскаль влом. Вроде, надо или переменную типа char описывать, или использовать ReadLn.
Код:
program xxx;
begin
write (‘xxxx’);
ReadLn;
end.
В данном примере «вводить» надо Enter.
Цитата:
Originally posted by smartsoft
Не уверен, что Read без параметров прокатит. А ставить Паскаль влом. Вроде, надо или переменную типа char описывать, или использовать ReadLn.
Код:
program xxx;
begin
write (‘xxxx’);
ReadLn;
end.
В данном примере «вводить» надо Enter.
Я Паскаль уже тоже не помню, но ReadLn b ввод Enter катит точно.
10
28 декабря 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by AlexandrVSmirno
Я Паскаль уже тоже не помню, но ReadLn b ввод Enter катит точно.
Так ReadLn означает ввод целой строки «в никуда». Можно вводить, что угодно, только Enter не забыть нажать.
9.3K
28 декабря 2004 года
solinoid
5 / / 28.12.2004
спасибо за ответы , да с ReadLn все работает по плану, но например ..такая прогр-ма >>>>
program koren;
var n,max:integer;
begin
writeln(‘число max ? ‘);
readln(max);
n:=2;
while n<=max do begin
writeln(n);
n:=n*2
end;
writeln(‘конец’)
end.
как толко я ввожу любое число (25 например) ,прог. должна выдать
ответ >>16 …после нажатия на ввод , вместо етого она закривается
Цитата:
Originally posted by solinoid
спасибо за ответы , да с ReadLn все работает по плану, но например ..такая прогр-ма >>>>
program koren;
var n,max:integer;
begin
writeln(‘число max ? ‘);
readln(max);
n:=2;
while n<=max do begin
writeln(n);
n:=n*2
end;
writeln(‘конец’)
end.
как толко я ввожу любое число (25 например) ,прог. должна выдать
ответ >>16 …после нажатия на ввод , вместо етого она закривается
Ну ты всегда в конце программы перед end. ставь ReadLn;
9.3K
29 декабря 2004 года
solinoid
5 / / 28.12.2004
Ну ты всегда в конце программы перед end. ставь ReadLn; [/QUOTE]
Fatal:Syntax error,;expected but identifier READLN found <<<вот что пишет Dev-Pascal ,что то сдесь не так …
10
29 декабря 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by solinoid
Fatal:Syntax error,;expected but identifier READLN found <<<вот что пишет Dev-Pascal ,что то сдесь не так …
Забыл точку с запятой:
Код:
writeln(‘конец’);
ReadLn;
9.3K
29 декабря 2004 года
solinoid
5 / / 28.12.2004
всё работает,спасибо большое!
7.0K
29 декабря 2004 года
senser
24 / / 22.10.2004
Цитата:
Originally posted by solinoid
люди помогите новичку, у меня такая проблема, все программы сделанные мною в Паскале выключаются (окно пропадает) при открытии или при нахождении правельного ответа…например >> program xxx;
begin
write (‘xxxx’)
end.
ета программа будет закрываться сразу после открития …как сделать что бы при окончании про-ма не закривалась сама ?
Еще один способ хороший есть:[COLOR=blue]
Program proga;
uses Crt;
var —-;
begin
—
—
—
Repeat until readkey=#27;
end.[/COLOR]
Программа не закроется пока не нажмешь на кнопку Esc.
247
29 декабря 2004 года
wanja
1.2K / / 03.02.2003
Закрывается после зауска из Паскаля, или прямо из виндов?
9.3K
29 декабря 2004 года
solinoid
5 / / 28.12.2004
Цитата:
Originally posted by wanja
Закрывается после зауска из Паскаля, или прямо из виндов?
в любом случае закрывается,если не написать перед end. readLn;
247
29 декабря 2004 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by solinoid
в любом случае закрывается,если не написать перед end. readLn;
Если из паскаля, то есть твакие клавиши Alt-F5. А еще есть NC или Far.
512
02 января 2005 года
bnm
124 / / 17.10.2004
Легче всего сделать так:
Program xxx;
uses crt;
begin
write(‘xxx’);
readkey {считывает любое нажатие}
end.
А если хочешь чтобы окно закрывалось при нажатии на определенную клавишу тогда:
Program xxx;
uses crt;
var a:char;
begin
write(‘xxx’);
a:=readkey;
case a of
‘1’:end. {При нажатии на ‘1’ =>закрытие окна}
Ошибка в коде программы!
Модератор: Модераторы
Ошибка в коде программы!
Всем доброго времени суток.
В книге Алексеев Е. Р., Чеснокова О. В., Кучер Т. В. — Free Pascal и Lazarus(2010), есть пример такой программы:
- Код: Выделить всё
var a, b, c, d, x1, x2: real;
begin
writeln (’Введите_коэффициенты_квадратного_уравнения’);
readln (a, b, c);
d:=b*b−4*a*c;
if d<0 then
begin
//Если дискриминант отрицателен, то вывод сообщения,
//что действительный корней нет и вычисление комплексных корней.
writeln (’Действительных_корней_нет’);
{Вычисление действительной части комплексных корней.}
x1:=−b/(2*a);
{Вычисление модуля мнимой части комплексных корней.}
x2:=sqrt(abs(d))/(2*a);
writeln ( ’Комплексные_корни_уравнения_’,
a:1:2, ’x^2+’ ,b:1:2, ’x+’ ,c:1:2, ’=0’ );
{Вывод значений комплексных корней в виде x1±ix2}
writeln (x1:1:2, ’+i*(’ ,x2:1:2, ’)’);
writeln (x1:1:2, ’−i*(’ ,x2:1:2, ’)’);
end
else
begin
{иначе вычисление действительных корней x1, x2}
x1:=(−b+sqrt(d))/2/a;
x2:=(−b−sqrt(d))/(2*a);
{и вывод их на экран.}
writeln ( ’Действительные_корни_уравнения_’ ,
a:1:2, ’x^2+’ ,b:1:2, ’x+’ ,c:1:2, ’=0’);
writeln (’X1=’ ,x1:1:2, ’X2=’ ,x2:1:2)
end end.
Когда я начинаю компилировать программу выходить такое сообщение об ошибке:
Fatal: Syntax error, «)» expected but «identifier B» found.
Не могу найти где эта ошибка
КТО-НИБУДЬ, ПОДСКАЖИТЕ!!!
- Анна Бак
- новенький
- Сообщения: 13
- Зарегистрирован: 11.02.2014 13:23:09
Re: Ошибка в коде программы!
Дож » 27.10.2014 18:07:56
Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.
-
Дож - энтузиаст
- Сообщения: 891
- Зарегистрирован: 12.10.2008 16:14:47
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 20:02:42
Дож писал(а):Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.
Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.
- Анна Бак
- новенький
- Сообщения: 13
- Зарегистрирован: 11.02.2014 13:23:09
Re: Ошибка в коде программы!
Little_Roo » 27.10.2014 20:40:10
какая строка с ошибкой?
-
Little_Roo - энтузиаст
- Сообщения: 632
- Зарегистрирован: 27.02.2009 19:56:36
- Откуда: Санкт-Петербург
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 21:35:18
Little_Roo писал(а):какая строка с ошибкой?
В этом-то и проблема. Я не могу найти строчку с ошибкой.
Полный текст ошибки такой:
Zero.pas (15,12) Fatal: Syntax error, «)» expected but «identifier B» found.
- Анна Бак
- новенький
- Сообщения: 13
- Зарегистрирован: 11.02.2014 13:23:09
Re: Ошибка в коде программы!
Little_Roo » 27.10.2014 21:38:27
Анна Бак писал(а):Zero.pas (15,12
Таки строка 15, позиция 12….
Но это в ПОЛНОМ тексте кода программы….
-
Little_Roo - энтузиаст
- Сообщения: 632
- Зарегистрирован: 27.02.2009 19:56:36
- Откуда: Санкт-Петербург
Re: Ошибка в коде программы!
Анна Бак » 27.10.2014 22:11:59
Little_Roo писал(а):Таки строка 15, позиция 12….
![]()
Но это в ПОЛНОМ тексте кода программы….
СПАСИБО БОЛЬШОЕ!!!
- Анна Бак
- новенький
- Сообщения: 13
- Зарегистрирован: 11.02.2014 13:23:09
Re: Ошибка в коде программы!
Дож » 27.10.2014 23:28:21
Анна Бак писал(а):
Дож писал(а):Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни.
Вместо короткого тире − должен знак минус -,
вместо обратной кавычки ’ — знак апострофа ‘.Я отсканировала текст только для того, чтобы задать вопрос.
А в Free Pascal вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.
Разумно приводить на форуме именно неработающий код, потому что приведённый в первом посте после замены указанных мною символов на правильные благополучно компилируется и запускается.
-
Дож - энтузиаст
- Сообщения: 891
- Зарегистрирован: 12.10.2008 16:14:47
Re: Ошибка в коде программы!
Анна Бак » 28.10.2014 13:48:34
Дож писал(а):Разумно приводить на форуме именно неработающий код, потому что приведённый в первом посте после замены указанных мною символов на правильные благополучно компилируется и запускается.
Спасибо. Постараюсь.
- Анна Бак
- новенький
- Сообщения: 13
- Зарегистрирован: 11.02.2014 13:23:09
Вернуться в Обучение Free Pascal
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
- Status
- Not open for further replies.
-
#1
Var
AppliName: array[1..99] of String;
SSnum: array[1..99] of Integer;
GSal: array[1..99] of Integer;
TSalD: array[1..99] of Integer;
Name, CC : String;
Rep,Exp, GS,NS,Sum,TSD , YS,SSN,i,C_Amt,PofIncome : integer ;
Begin
Writeln ( ‘Enter applicants who applied for a type of credit card’);
Readln (Rep,Exp,GS,YS,NS,Sum,TSD,SSN,CC,PofInco… ;
While ( Name <> ‘ Stop ‘ ) do
Begin
NS:= GS-TSD ;
Sum:= Exp + Rep ;
PofIncome:=(NS * 0.45);
Begin
If ( GS >4000) AND ( CC = ‘Bronze Card’ ) then
YS:= GS * 12 ;
C_Amt := YS * 0.25;
i:= i + 1;
AppliName := Name;
SSNum := SSN ;
GSal [ i]:= GS ;
TSalD := TSD ;
End ;
Begin
If (GS >= 7500) AND [CC= ‘Gold Card’] then
YS:= GS * 12 ;
C_Amt:= YS * 0.3;
i:= i + 1 ;
AppliName := Name;
SSnum:=SSN;
GSal:=GS;
TSalD:=TSD;
End;
Begin
If (GS>=10,000) AND ( CC = ‘ Platinum Card’) then
YS := GS * 12;
C_Amt: = YS * 0.4;
i:= i + 1;
A ppliName := Name;
SSNum := SSN;
GSal :=GS;
TSalD := TSD;
End if
End if
End if
End While
End.
The five errors are :
1. Error:Incompatible types: got «Boolean» expected «LongInt» — For this line : If (GS >= 7500) AND [CC= ‘Gold Card’] then
2.Error:Incompatible types: got » Set of Boolean» expected » LongInt» — for the same line (If (GS >= 7500) AND [CC= ‘Gold Card’] then )
3.Error:Incompatible types: got «single» expected «smallint» — for C_Amt := YS * 0.25 ; in Bronze Card
4.Error:Incompatible types: got «extended» expected «smallint» for C_Amt := YS * 0.3; in Gold Card
5.Fatal:syntax error , «)» expected but «,» found — (If GS >= 10000) AND [CC= ‘Platinum’] then )
Thanks for any help. I know my program is by no means perfect because I am awful at Pascal and desperately need help on fixing these things. So I am open to anything that will get this program running in Pascal. Thanks.
-
- Feb 10, 2006
-
- 713
-
- 0
-
- 19,460
- 95
-
#2
This: If (GS >= 7500) AND [CC= ‘Gold Card’] then
Should be this: If (GS >= 7500) AND (CC= ‘Gold Card’) then
3 & 4:
You have C_Amt and YS declared as integer yet you are multiplying by a real.
5: there should be no parenthesis at the end of that line.
Your code is hard to read. try indenting where needed. if it was already indented before you copied/pasted, then use the [code ] bbcodes in order to keep the formatting.
-
- Feb 10, 2006
-
- 713
-
- 0
-
- 19,460
- 95
-
#2
This: If (GS >= 7500) AND [CC= ‘Gold Card’] then
Should be this: If (GS >= 7500) AND (CC= ‘Gold Card’) then
3 & 4:
You have C_Amt and YS declared as integer yet you are multiplying by a real.
5: there should be no parenthesis at the end of that line.
Your code is hard to read. try indenting where needed. if it was already indented before you copied/pasted, then use the [code ] bbcodes in order to keep the formatting.
-
- Jan 27, 2006
-
- 724
-
- 0
-
- 19,210
- 64
-
#3
-
- Jan 13, 2011
-
- 4,165
-
- 4
-
- 35,260
- 1,357
-
#4
Program TypeofCreditCard;
Var
AppliName: array[1..99] of String;
SSnum: array[1..99] of Integer;
GSal: array[1..99] of Integer;
TSalD: array[1..99] of Integer;
Name, CC : String;
Rep,Exp, GS,NS,Sum,TSD , YS,SSN,i,C_Amt,PofIncome : integer ;
Begin
Writeln ( 'Enter applicants who applied for a type of credit card');
Readln (Rep,Exp,GS,YS,NS,Sum,TSD,SSN,CC,PofInco... ;
While ( Name <> ' Stop ' ) do
Begin
NS:= GS-TSD ;
Sum:= Exp + Rep ;
PofIncome:=(NS * 0.45);
Begin
If ( GS >4000) AND ( CC = 'Bronze Card' ) then
YS:= GS * 12 ;
C_Amt := YS * 0.25;
i:= i + 1;
AppliName := Name;
SSNum := SSN ;
GSal [ i]:= GS ;
TSalD := TSD ;
End ;
Begin
If (GS >= 7500) AND [CC= 'Gold Card'] then
YS:= GS * 12 ;
C_Amt:= YS * 0.3;
i:= i + 1 ;
AppliName := Name;
SSnum:=SSN;
GSal:=GS;
TSalD:=TSD;
End;
Begin
If (GS>=10,000) AND ( CC = ' Platinum Card') then
YS := GS * 12;
C_Amt: = YS * 0.4;
i:= i + 1;
AppliName := Name;
SSNum := SSN;
GSal :=GS;
TSalD := TSD;
End if
End if
End if
End While
End.
-
- Jan 13, 2011
-
- 4,165
-
- 4
-
- 35,260
- 1,357
-
#5
Appart from the errore already discussed, there are some more:
— there are not «end if» and «end while» operators in Pascal (OK, at least in the popular ones);
— your ReadLn statement probably won’t work — string variables will get empty values. Split it on several Write / ReadLn statements
— you have several arrays, but assignment statements are missing [Index] part of the array, e.g. AppliName := Name;
— you are not checking if one will enter more that 100 applicants
-
#6
By the way, I am using Free IDE Pascal .
-
- Jan 27, 2006
-
- 724
-
- 0
-
- 19,210
- 64
-
#7
-
#8
This is the error — Fatal:Syntax Error, «;» expected but «identifier Writeln found — Source of error- Writeln ( ‘Enter applicants who applied for a type of credit card’);
Is there some sort of documentation about what each error means??I want to learn.
-
- Jul 30, 2008
-
- 1,035
-
- 0
-
- 20,360
- 113
-
#9
-
#10
I’ve done nothing but do the changes I’ve been told to made.
-
- Jan 13, 2011
-
- 4,165
-
- 4
-
- 35,260
- 1,357
-
#11
that is, (omit ‘_’ from example below)
[_code_]
Program something;
…
end.
[_/code_]
-
- Jul 30, 2008
-
- 1,035
-
- 0
-
- 20,360
- 113
-
#13
-
#14
I inserted that beginning then one more error came up and it said
Fatal syntax error, «;’ expected but » BEGIN» found
-
- Jan 13, 2011
-
- 4,165
-
- 4
-
- 35,260
- 1,357
-
#15
On your program:
— Put a «Begin» before first «WriteLn»;
— Put «I := 0» before «while» statement
— change «while» to check that I is less than 100
— change internal «If» to check for «Name <> ‘Stop'»
— Remove last two «End;» before «End.»;
Probably there are more… Change your program, re-post it on PasteBin for further help
-
#16
Will it ever run or come off of this screen that it seems to be stuck on?
-
- Jan 13, 2011
-
- 4,165
-
- 4
-
- 35,260
- 1,357
-
#17
Try pressing <Ctrl>-<Break>, or <Ctrl>-C, to terminate your program. If you have a debugger in your environment, you can try to terminate your program from there as well.
And since we don’t know how your program looks now, noone can tell what will come out of it
-
- Jul 30, 2008
-
- 1,035
-
- 0
-
- 20,360
- 113
-
#18
As the previous poster said, just break into the program. How you do that depends upon your environment.
- Status
- Not open for further replies.
Thread starter | Similar threads | Forum | Replies | Date |
---|---|---|---|---|
B
|
Solved! Apple Community Reload Error | Apps General Discussion | 4 | Jun 14, 2022 |
K
|
Question cache deleted in error | Apps General Discussion | 1 | Apr 25, 2022 |
|
Question How do I update my computer because I have an error? | Apps General Discussion | 0 | Apr 12, 2022 |
C
|
Question Photoshop Elements 2021 error codes 81 and 501 won’t allow installation? How to fix. | Apps General Discussion | 1 | May 5, 2021 |
|
Question i need help in a simple pascal program | Apps General Discussion | 1 | Jun 18, 2020 |
|
Question How to fix“ ERROR-invalid argument/option — ‘Live’ ” in this code? | Apps General Discussion | 0 | Jul 21, 2019 |
|
Question PUBG Lite launcher error | Apps General Discussion | 2 | Jul 1, 2019 |
|
Question Win dos shell syntax error | Apps General Discussion | 2 | Apr 11, 2019 |
I
|
Solved! Getting error 502 Bad Gateway, is it proxy or website itself | Apps General Discussion | 5 | Jan 23, 2019 |
U
|
ASCII in Pascal programming | Apps General Discussion | 4 | Dec 13, 2015 |
A
|
Pascal homework help | Apps General Discussion | 2 | Mar 7, 2015 |
|
need help with pascal programming | Apps General Discussion | 4 | Feb 22, 2014 |
|
why wont this pascal program work? idk | Apps General Discussion | 18 | Dec 13, 2013 |
|
need help with this pascal programming. | Apps General Discussion | 3 | Dec 13, 2013 |
|
why doesnt this pascal program work? | Apps General Discussion | 1 | Dec 7, 2013 |
|
need help with pascal programming? | Apps General Discussion | 2 | Dec 7, 2013 |
|
i need help fixing this pascal program | Apps General Discussion | 13 | Dec 5, 2013 |
L
|
Which programming languages will I need to learn as an actuary? | Apps General Discussion | 2 | Dec 12, 2012 |
M
|
** A CHALLENGE ** UCSD P-sytem Pascal ** | Apps General Discussion | 7 | Oct 15, 2010 |
P
|
pascal quation.. | Apps General Discussion | 7 | Nov 13, 2008 |
- Advertising
- Cookies Policies
- Privacy
- Term & Conditions
- Topics