Main pas 1 9 fatal syntax error identifier expected but ordinal const found

Free pascal fatal syntax error Анна Бак » 27.10.2014 17:40:51 Re: Ошибка в коде программы! Дож » 27.10.2014 18:07:56 Видимо, проблема в том, что Вы отсканировали текст и не почистили от фигни. Вместо короткого тире − должен знак минус -,вместо обратной кавычки ’ — знак апострофа ‘. Re: Ошибка в коде программы! Анна Бак […]

Содержание

  1. Free pascal fatal syntax error
  2. Re: Ошибка в коде программы!
  3. Re: Ошибка в коде программы!
  4. Re: Ошибка в коде программы!
  5. Re: Ошибка в коде программы!
  6. Re: Ошибка в коде программы!
  7. Re: Ошибка в коде программы!
  8. Re: Ошибка в коде программы!
  9. Отладка и выполнение программы
  10. unixforum.org
  11. FreePascal. Проблемма при компиляции
  12. FreePascal. Проблемма при компиляции
  13. Re: FreePascal. Проблемма при компиляции
  14. Re: FreePascal. Проблемма при компиляции

Free pascal fatal syntax error

Анна Бак » 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 вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.

Источник

Отладка и выполнение программы

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

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

Если программа набирается заново, то есть активное окно имеет имя noname01.pas, то при нажатии клавиши F2 выполнится команда File/ Save as. При этом появится диалоговое окно со списком файлов – программ из текущего раздела, с именами Files, как на рис.2.6.

Рис. 2.6. Сохранение программы в Free Pascal.

В окне Name набирается имя файла, с которым он будет сохранен на диске. Имя автоматически будет дополнено расширением .pas. После записи на диск имя в текущем окне редактора сменится на заданное в поле Name. После дальнейшего набора программы или ее корректировки при нажатии клавиши F2 будет выполняться команда File/ Save, и никаких дополнительных запросов происходить не будет.

При переходе к новой программе окно с текстом старой программы закрывают ( или Window / Close, хотя это и не обязательно) и открывают новое активное окно (File / New). При необходимости чтения другой, ранее набранной программы, выполняется команда File / Open. (F3), в появляющемся диалоговом окне в области Files перемещением маркера выбирается нужный файл и нажимается клавиша Enter, эквивалентная кнопке диалогового окна Open.

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

Рис. 2.7. Сообщение о наличии в программе синтаксических ошибок.

После того, как все ошибки устранены, появится следующее сообщение, как на рис. 2.8.: «Компиляция выполнена: нажмите любую клавишу».

Рис. 2.8. Компиляция завершена успешно.

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

Все ошибки программ делятся на два больших класса: ошибки компиляции (синтаксические) и ошибки выполнения (логические или алгоритмические). О первом типе ошибок сообщает компилятор до запуска программы на выполнение с указанием типа ошибки и предполагаемого ее места. К сожалению, ошибка может быть и не там, где стоит курсор; его положение – это фактически то место, где компилятор «осознает» ошибку. Например, если имеется лишний BEGIN в программе, то компилятор не поймет этого до тех пор, пока пары BEGIN. END не будут сбалансированы. На начальном этапе программирования большинство синтаксических ошибок происходит из-за невнимательности набора программы. Даже в первой строке могут делаться ошибки, см. рис.2.9.

Рис. 2.9. Ошибка в служебном слове

В первой строке сообщений компилятора появится сообщение: «Prim1.pas(1,9) Fatal: Syntax error, “BEGIN” expected but “identifier PROGRAMM” found».

Здесь Prim1.pas – имя программы, данное ей при записи на диск.

(1,9) – место, где обнаружена ошибка (строка, столбец). Не всегда совпадает с реальным местом ошибки.

Fatal: Syntax error – синтаксическая ошибка фатальная, дальнейшее выполнение невозможно.

“BEGIN” expected but “identifier PROGRAMM” found — ожидается BEGIN, но найден идентификатор PROGRAMM. Первое обязательное служебное слово – Begin, все остальные: заголовок, разделы описаний, можно и не писать. Все конструкции языка Паскаль, которые состоят из букв и цифр и начинаются с буквы, являются идентификаторами, за исключением служебных слов и некоторых директив. Так как слово PROGRAMM к служебным не относится, то оно определено как идентификатор, с которого не должна начинаться программа.

В данном примере пояснение причины ошибки не имеет особого смысла, – ожидается оператор BEGIN, – и такое случается довольно часто. Более осмысленное толкование происходит в следующем случае:

«Prim1.pas(1,14) Fatal: Syntax error, ”;”expected but “ordinal const” found» – перед порядковой константой (единицей) ожидается точка с запятой.

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

Довольно часто позиция указывается в строке, следующей за ошибочной:

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

В любом случае при непонимании ошибки следует обратиться к синтаксису отмеченной конструкции языка Турбо Паскаль, либо к предыдущей.

Ошибки выполнения появляются после компиляции и запуска программы на выполнение. На экране программы выдается сообщение вида, представленного на рис.2.10.

Рис. 2.10. Сообщение с кодом завершения 201.

Ошибки выполнения искать труднее, чем синтаксические. Это и ошибки на уровне ОС, и ошибки ввода — вывода, и критические ошибки, и фатальные ошибки. Но, хотя ошибок данного класса довольно много, в данном курсе лабораторных работ чаще всего появляются только три фатальные ошибки:

Exitcode = 200 – Деление на нуль.

Exitcode = 201 – превышение времени выполнения программой.

Exitcode = 207 – переполнение при операции с плавающей точкой.

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

Ошибки же по времени выполнения (зацикливания компьютера) возникают либо при неверно составленном алгоритме, а соответственно, и программе, либо при выходе за границы неконтролируемых величин. Так как циклы могут использовать 2 типа операторов, то в цикле FOR категорически запрещено принудительное изменение параметра цикла, так как он изменяется автоматически. В циклах While и Repeat, наоборот обязательно надо изменять параметр цикла принудительно, иначе он останется без изменения. В бесконечных циклах каждое последующее слагаемое должно уменьшаться. Пример последней ситуации приведен в примечании к лабораторной работе № 4.

ИСР Free Pascal имеет два экрана. На основном экране набираются, просматриваются и редактируются программы, отдаются команды ИСР, устанавливаются параметры работы и так далее. Но при запуске программы появляется другой экран – экран пользователя. Сюда помещаются результаты работы по программе, и он виден до тех пор, пока программа не перестанет выполняться. Так как в данном курсе лабораторных работ программы весьма просты, то они выполняются практически мгновенно, и снова появляется основной экран ИСР. Для просмотра экрана пользователя из меню выбирается Debug > User screen или нажимается комбинация клавиш .Для возврата к основному экрану можно нажать любую клавишу. Если в процессе запуска программы возникнет необходимость прервать ее работу, например в случае «зацикливания» программы, используют комбинацию клавиш .

На экране пользователя мы увидим либо сообщение об ошибке выполнения, либо результат (если пропущен оператор вывода, естественно, вывода результата не будет), например, как на рис.2.11.

Рис. 2.11. Результат по нажатию клавиш .

Здесь нам нужна только последняя строка:

Результат может быть и неверным как из-за неправильно составленного алгоритма, так и из-за ошибок в программе, которые формально, с точки зрения транслятора, ошибками не являются. Например, при вычислении суммы по следующему фрагменту программы

For I:=1 to 10 do;

результат вычислений будет равен 0.10000. Здесь после служебного слова DO стоит пустой оператор, поэтому именно он, то есть «ничто» будет выполняться десять раз. Затем к нулю прибавится одна десятая. Формально программа составлена правильно, и такую конструкцию иногда используют в качестве задержки по времени, но фактически десять раз должен выполняться оператор из третьей строки.

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

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

For i:=1 to 15 do

просто «зацикливается» (если не используются директивы контроля). Но если перед i:=i+1 поставить оператор

то после запуска программы появятся два столбика бегущих чисел. Если приостановить вывод информации на экран монитора клавишей Pause, то сразу будет видно, что i изменяется не с шагом 1, а 2. То есть параметр цикла изменяется и в операторе For, и в операторе присваивания.

Второй метод привлекает средства отладки ИСР. Предварительно установив программный счетчик на начало программы (Run > Program reset или ), открывается окно наблюдаемых переменных (Debug > Add Watch или ): в Watch-окне набирается имя первой контролируемой переменной, нажимается Enter. После этого появляется окно с именем Watches и значением этой переменной. Добавление переменных в окно выполняется необходимое количество раз. Для пооператорного выполнения программы предназначена «горячая» клавиша F7 (Run > Trace into). После каждого нажатия клавиши F7 выполняется один оператор. Если он производит изменение значения переменной, то это сразу отразится в окне наблюдения.

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

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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

Папиллярные узоры пальцев рук — маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

FreePascal. Проблемма при компиляции

FreePascal. Проблемма при компиляции

Сообщение serg_sk » 30.06.2005 18:06

Re: FreePascal. Проблемма при компиляции

Сообщение Golden » 30.06.2005 18:19

Re: FreePascal. Проблемма при компиляции

Сообщение serg_sk » 30.06.2005 18:37

Для Golden:
Ой еп точно

serg_sk добавил в 30.06.2005 18:33

Просто там предлагается перегнать двухмерный в одномерных, а потом отсортировать. Вот я и перепутал один с другим

serg_sk добавил в 30.06.2005 18:37

Все равно не работает.
Остались ошибки:

Источник

Topic: Newbie problem  (Read 10165 times)

Our teacher has given us an excerise to do at home, but this time it has to be made as a program and not application soo.. this is the error i am keep getting:
-project1.lpr(12,14) Fatal: Syntax error, «identifier» expected but «ordinal const» found

And this is the code i have:
type Velikost=(Velik,Srednji,Majhen);
type visina=(0..230); //This part is marked as an error
Var
a:visina;
b:velikost;
begin
  repeat
  writeln(‘Vpisi Stevilo =’);
  readln(a)
  until (a>=0) and (a<=230);
  for a:=0 to 230 do
      if a>=0 or a<=150 then
      b:=writeln(majhen)
      else if a>=150 or a<=185 then
      b:=writeln(srednji)
      else of a>=185 or a<=230 then
      b:=writeln(velik);
end.

It would be really helpfull if you could help me :)
Miha

« Last Edit: April 01, 2013, 04:31:54 pm by zidr12 »


Logged


but this time it has to be made as a program and not application

So why it has a *.lpr extension?  :)

OK. I didn’t test but I see obvious thing: Bad parenthesis and bad using of logical operators:
This condition is always True:

if a>=0 or a<=150 thenIt should be:

if (a>=0) and (a<=150) thenAnd similarly for others.
Also, I don’t know which line is no. 12. Is this a complete program?


Logged


oh.. fixed it right away. Hmm… well were trying to make a program using the Type’s like this one:
type Velikost=(Velik,Srednji,Majhen)
so what we have to do is the user has to enter a number betwen 0-230 and the program has to tell him if he is small/ medium or big size.


Logged



Logged

***Snorkel***
If I forget, I always use the latest stable 32bit version of Lazarus and FPC. At the time of this signature that is Laz 2.06 and FPC 3.0.4
OS: Windows 10 64 bit


I didn’t see this before:

type visina=(0..230); //This part is marked as an errorCompiler does not like the braces. Try simply:

type visina= 0..230;


Logged


Damn what can just the braces do :S fixed it and now it’s working added some more braces on the bottom side of the code aswell ;)


Logged


Ns1



Jun 17, 2001


55,386


1,525


126


  • #1

wtf is wrong with my code?

Const
NumberOfQuiz = 3; {Number of Quiz}
NumberOfHW = 3; {Number of HW Assignments}
NumberOfInClass = 2; {Number of In Class Assignments}
QuizWeight = .2; {Quiz Weight}
HWWeight = .2; {Homework Weight}
InClassWeight = .15; {In Class Weight}
MidtermWeight = .2; {Midterm Weight}
FinalWeight = .25; {Final Weight}
ECWeight = .5; {Extra Credit Weight}

When i try to compile, i get

104 / 22 homewo~1.pas
Error: Illegal expression

104 / 22 homewo~1.pas
Fatal: Syntax error, ; expected but ordinal const found

eh?

  • #2

well its been awhile since i have worked with pascal, but when you declare const do you need to declare it as some type. Example
Const
int NumberOfQuiz = 3;

like i said its been a while since i have worked with pascal, so the syntax might be wrong. But do you get the idea of declaring it as some type of const?

  • Advertising
  • Cookies Policies
  • Privacy
  • Term & Conditions
  • About us

  • This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.

Ошибка в коде программы!

Модератор: Модераторы

Ошибка в коде программы!

Всем доброго времени суток.
В книге Алексеев Е. Р., Чеснокова О. В., Кучер Т. В. — 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…. :shock:
Но это в ПОЛНОМ тексте кода программы….

Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 632
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Ошибка в коде программы!

Сообщение Анна Бак » 27.10.2014 22:11:59

Little_Roo писал(а):Таки строка 15, позиция 12…. :shock:
Но это в ПОЛНОМ тексте кода программы….

СПАСИБО БОЛЬШОЕ!!! :D :D :D

Анна Бак
новенький
 
Сообщения: 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

Понравилась статья? Поделить с друзьями:
  • Main libvlc error interface dbus none initialization failed
  • Mamibot exvac660 ошибка
  • Main java 7 error cannot find symbol
  • Mamibot error 03
  • Main java 45 error reached end of file while parsing