presently learning how to code in pascal and vba. Assisting my daughter who is preparing for examinations next year. I am stuck on a problem concerning her present assignment. After running the code the following errors were received:
main.pas(1,2) Fatal: Syntax error, «BEGIN» expected but «identifier N» found
Fatal: Compilation aborted
Tried fixing the code, but as i said I have just started learning to code.
n: integer; (*n is ID number for each candidate*)
DV: integer; (*DV is the number of district votes available*)
VR: integer; (*VR is the number of votes received by the candidate in
the district*)
x: integer;
y: integer;
Divide: integer;
found: Boolean;
n: array[1..10] of integer; (*n is an array of 10 integers*)
Names: array[1…10] of string = (‘Richards’, ‘Gumbs’, ‘Carty’,
‘Fleming’, ‘Jones’, ‘Amorowat’, ‘De la cruz’, ‘Walker’,
‘Brooks’, ‘Baker’);
DV: array[1…10] of integer = (‘200’, ‘900’, ‘700’, ‘100’, ‘80’, ‘15’,
‘6, ‘20’, ‘50’, ‘1’);
VR: array[1…10] of integer = (‘50’, ‘700’, ‘600’, ‘20’, ‘30’, ‘2’,
‘6, ‘3’, ‘30’, ‘2’);
For x := 1 to 10 do
Begin
Repeat
Found:=false;
writeln('Enter Candidate ID Number: ’);
readln(n);
For y:= 1 to 10 do
if n = n[y] then
Found = true;
writeln(‘Name of Candidate is’ Names: array[1] ‘.’);
readln;
writeln(‘Number of votes available in the District is’
DV: array[1] ‘.’);
readln;
writeln(‘Number of votes received by the Candidate in the
District is’ VR: array[1] ‘.’);
readln;
Endif;
For y:= 1 to 10 do
if n = n[y] then
Divide:= (DV: array[1] DIV VR: array[1]);
Result:= Divide;
writeln(‘The percentage of votes received by’ Names:
array[1] ‘is’ Result ‘.’);
readln;
if Result:>= 0.20 then
writeln(‘The candidate,’ Names: array[1] ‘is to receive a
refund.’);
readln;
Elseif
writeln(‘The candidate,’ Names: array[1] ‘will not receive
a refund.’);
readln;
Endif;
Endif;
End;
The expected result is to choose a candidate by his ID number which would lead to his name, the number of vote available in a district and the number of votes the candidate obtained being displayed. it would then result in a calculation between the two vote counts (division) and if the percentage is greater than 20% he would receive a refund, if less than 20% he would not receive a refund. either result should be displayed.
demon05500 0 / 0 / 0 Регистрация: 14.11.2013 Сообщений: 43 |
||||
1 |
||||
10.09.2014, 13:52. Показов 5975. Ответов 8 Метки нет (Все метки)
Добрый день! пишу программу по методичке, выдает вот такие ошибки:
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
10.09.2014, 13:52 |
Ответы с готовыми решениями: Ошибка: project1.lpr(1,1) Fatal: Syntax error, «BEGIN» expected but «end of file» found Fatal: Syntax error, «BEGIN» expected but «end of file» found Ошибка: Fatal: Syntax error, «;» expected but «identifier Mas» found. procedure TForm1.Button1Click(Sender: TObject);
8 |
Модератор 3488 / 2611 / 741 Регистрация: 19.09.2012 Сообщений: 7,971 |
|
10.09.2014, 14:21 |
2 |
var где?
0 |
0 / 0 / 0 Регистрация: 14.11.2013 Сообщений: 43 |
|
10.09.2014, 14:25 [ТС] |
3 |
а что нужно написать в var?
0 |
Модератор 3488 / 2611 / 741 Регистрация: 19.09.2012 Сообщений: 7,971 |
|
10.09.2014, 14:26 |
4 |
Его самого и нужно написать)
0 |
0 / 0 / 0 Регистрация: 14.11.2013 Сообщений: 43 |
|
10.09.2014, 14:28 [ТС] |
5 |
перед вот этим:Bitmap: HBitmap ; тогда выдает кучу ошибок еще
0 |
Модератор 3488 / 2611 / 741 Регистрация: 19.09.2012 Сообщений: 7,971 |
|
10.09.2014, 14:30 |
6 |
Каких?
0 |
0 / 0 / 0 Регистрация: 14.11.2013 Сообщений: 43 |
|
10.09.2014, 14:32 [ТС] |
7 |
вот Миниатюры
0 |
volvo Супер-модератор 32592 / 21061 / 8134 Регистрация: 22.10.2011 Сообщений: 36,332 Записей в блоге: 8 |
||||
10.09.2014, 15:10 |
8 |
|||
РешениеА, так у тебя в секции Uses нет модуля Windows. Добавь:
1 |
0 / 0 / 0 Регистрация: 14.11.2013 Сообщений: 43 |
|
10.09.2014, 15:15 [ТС] |
9 |
Спасибо огромное!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
10.09.2014, 15:15 |
Помогаю со студенческими работами здесь
Ошибка: Syntax error, «;» expected but «BEGIN» found тут в строке с сообщением в комментарие, строка 40. Не понимаю почему. Unit1.pas(66,4) Fatal: Syntax error, «;» expected but «.» found {$mode objfpc}{$H+} interface uses Ошибка Fatal: Syntax error, «;» expected but «is» found Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
Содержание
- Отладка и выполнение программы
- Fatal syntax error begin expected but identifier programm found
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Re: Ошибка в коде программы!
- Fatal: Syntax error, «.» expected but «;» found
- 1 Answer 1
Отладка и выполнение программы
После того, как программа набрана и поставлена заключительная точка после слова 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 выполняется один оператор. Если он производит изменение значения переменной, то это сразу отразится в окне наблюдения.
Таким образом, анализируя изменение значений переменных при пооператорном выполнении программы, легко найти ошибку в алгоритме, и соответственно в программе.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.
Источник
Анна Бак » 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 вводила все в ручную и все знаки переписывала уже несколько раз, ничего не помогает.
Источник
Fatal: Syntax error, «.» expected but «;» found
1 Answer 1
The reason for this is that your begin s and end s are not balanced; disregarding the opening begin and closing end. for the program’s syntax to be correct, you should have equal numbers of each, but you have 4 begin s and 8 end s.
Obviously, your code is to compute the solutions of a quadratic equation. What I think you should do is to adjust the layout of your code so that it reflects that and then correctly the begin s and end s. In particular, your program is trying to detect whether any of a, b and d is zero and, if so, write a diagnostic message, otherwise calculate the roots by the usual formula.
Unfortunately, your begin s and end s do not reflect that. Either the whole of the block starting d := . needs to be executed or none of it does, so the else on the line before needs to be followed by a begin , as in
(You don’t say which Pascal compiler you are using, but the above fixes two points which are flagged as errors in FreePascal.
If you need more help than that, please ask in a comment.
Btw, there are some grammatical constructs in Pascal implementations where an end can appear without a matching preceding begin such as case . of . end .
Источник
program Hello;
uses crt;
d,i,vt,dem:integer;
begin
clrscr;
write(‘nhap xau S:’); readln(s);
d:=length(s);
st:=»»;
for i:=1 to d do
if s[i] in [‘0’..’9′] then st:=st+s[i];
writeln(‘Xau moi vua duoc tao la: ‘,st);
for i:=1 to d do
if (s[i]<>’a’) and (s[i]<>’b’) then write(s[i]);
writeln;
st1:=’tin’;
vt:=pos(st1,s);
if vt=0 then writeln(s)
else
begin
inc(dem);
a[dem]:=vt;
end;
if dem>0 then
begin
for i:=1 to dem do
begin
delete(s,a[i],3);
insert(‘pascal’,s,a[i]);
end;
writeln;
end;
readln;
end.
Формулировка задачи:
Подключаю SysUtils дабы использовать ф-ции
и
, но выдает ошибку Fatal: Syntax Error, «BEGIN» expected but «identifier SYSUTILS». Вот части кода:
В чем может быть проблема?
Код к задаче: «USES SysUtils и ошибка Syntax Error, «BEGIN» expected but «identifier SYSUTILS»»
textual
uses SysUtils,crt; var a:integer; s:string; begin clrscr; a:=123; s:=inttostr(a); writeln(s); a:=strtoint(s); writeln(a); readln end.
Полезно ли:
15 голосов , оценка 4.067 из 5