Pascal. Ошибка в простой задаче: пишет ожидался оператор, а встретил else.
program MaxIn_3;
var
x, y, z, res: real;
begin
writeln('Введите целые числа: X, Y, Z');
readln(x, y, z);
res := x + y + z;
if (res < 1) then
begin
if (x > y) and (x <> y) then
begin
y := (y + z) / 2;
writeln('X=', x, ',', 'Y=', y, ',', 'Z=', z, '.');
end
else
begin
if (y > x) and (x <> y) then
begin
x := (y + z) / 2;
writeln('X=', x, ',', 'Y=', y, ',', 'Z=', z, '.');
end
else
begin
Writeln('X=Y,',x,'=',y);
end;
**end;// - если убрать здесь ; то пишет MaxIn_3.pas(29) : Встречено 'else', а ожидалось ';'**
**else** //вот здеся ошибка, видимо мне мозгов не хватает понять
begin
if (x>y) and (x <> y) then
begin
x:=x*y;
writeln('X=', x, ',', 'Y=', y, ',', 'Z=', z, '.');
end
else
begin
if (y>x) and (x <> y) then
begin
y:=x*y;
writeln('X=', x, ',', 'Y=', y, ',', 'Z=', z, '.');
end
else
begin
Writeln('X=Y,',x,'=',y);
end;
end;
end;
end;
end.
Среда программирования PascalABC.NET, по моей блок-схеме все верно, разделы операторов вроде все на месте, в чем может быть ошибка? Или у меня косоглазие просто?
Пишет вот «Program1.pas(21) : Встречено ‘else’, а ожидался оператор»
program test;
var
sum: real;
percent: real;
period: integer;
profit: real;
result: real;
begin
writeln('Вычисление дохода по в кладу в банке');
writeln;
write('Сумма (руб.) ->');
readln(sum);
write('Срок вклада (дней) ->');
readln(period);
if sum > 5000 then
percent := 0.95;
else
pecent := 0.08;
profit := sum * percent/365 * period;
result := sum +profit;
writeln('Сумма в конце срока вклады: ',
result:6:2, руб.');
writeln('Доход: ', profit:6:2, ' руб.');
write('Для завершения работы нажмите <Enter>');
readln;
end.
почему?
-
Вопрос заданболее трёх лет назад
-
4422 просмотра
Пригласить эксперта
Как вы определили, что не работает?
У вас не Else не работает, а грамматических ошибок полно.
Не нужно ставить точку с запятой после первого
percent := 0.95
во втором pecent := 0.08; нужно писать percent а не pecent
в строке
writeln(‘Сумма в конце срока вклады: ‘,
result:6:2, руб.’);
у вас перед руб не хватает одинарной кавычки.
Неужели так сложно внимательнее быть?
if sum > 5000 then
percent := 0.95;
else
перед ‘else’ ‘;’ не ставится
-
Показать ещё
Загружается…
14 июн. 2023, в 01:02
5000 руб./за проект
13 июн. 2023, в 23:37
1000 руб./в час
13 июн. 2023, в 23:22
15000 руб./за проект
Минуточку внимания
FunduxYura 1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
||||
1 |
||||
14.09.2012, 09:10. Показов 10679. Ответов 11 Метки нет (Все метки)
Помогите! Не могу завершить прогу на Pascal ABC (да-да, тот самый). Делаю что-то вроде клавиатурного тренажёра… Код Паскаля АВС
Те символы-кракозябры — результат копирования Win1251 в UTF-8 форму, которые пропали на предварительном просмотре Код Program1.pas(46,1): Ожидался оператор Помогите, пожалуйста!
0 |
4 / 4 / 2 Регистрация: 27.07.2012 Сообщений: 59 |
|
14.09.2012, 09:20 |
2 |
Поставь ; после закрытой скобки.
0 |
1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
|
14.09.2012, 10:09 [ТС] |
3 |
Поставь ; после закрытой скобки. Строчку в исправленном виде покажи, а то я тебя не понял
0 |
vi fail 4 / 4 / 2 Регистрация: 27.07.2012 Сообщений: 59 |
||||
14.09.2012, 10:44 |
4 |
|||
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,551 Записей в блоге: 1 |
|
14.09.2012, 13:03 |
5 |
FunduxYura, до else убери ;
0 |
FunduxYura 1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
||||||||
14.09.2012, 15:19 [ТС] |
6 |
|||||||
FunduxYura, до else убери ; Убрал, теперь этот кусок выглядит так:
Ошибка та же — 1 символ, строка 45, ожидается ; Добавлено через 5 минут
Это сама ошибка, так что — nice joke
0 |
CodeR Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,551 Записей в блоге: 1 |
||||
14.09.2012, 15:19 |
7 |
|||
FunduxYura, Да потому что если вы хотите использовать в условие больше одного оператора то надо использовать операторные скобки Begin End
0 |
FunduxYura 1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
||||||||
14.09.2012, 15:27 [ТС] |
8 |
|||||||
FunduxYura, Да потому что если вы хотите использовать в условие больше одного оператора то надо использовать операторные скобки Begin End Ой, совсем забыл про них, я просто раньше кодил на AS, JS, VB .NET, а с паскалем впервые встретился, вот и тупанул… Но теперь ругается на
Говорит, что ожидался оператор, но ругань идёт в самое начало строчки с else… Код функции, которая не должна ничего возвращать, и нужна для удобства
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,551 Записей в блоге: 1 |
|
14.09.2012, 15:29 |
9 |
FunduxYura, ты посмотри на мой код а теперь на свой…
0 |
FunduxYura 1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
||||
14.09.2012, 15:42 [ТС] |
10 |
|||
FunduxYura, ты посмотри на мой код а теперь на свой… Спасибо, просто я уже жестоко туплю, теперь у меня ещё одна проблема… Не по теме: Я безнадёжен, да?
говорит, что = нельзя юзать с Text и string, но как мне ещё сравнивать?
0 |
Фрилансер 3417 / 2814 / 3000 Регистрация: 08.02.2012 Сообщений: 8,551 Записей в блоге: 1 |
|
14.09.2012, 16:03 |
11 |
FunduxYura, так потому что ты пытаешься переменную типа текстовый файл сравнить с типом string а чтобы понять как сравнивать надо понимать что ты хочешь сделать в проге…
0 |
1 / 1 / 0 Регистрация: 31.07.2012 Сообщений: 32 |
|
21.09.2012, 17:47 [ТС] |
12 |
Хм… Я решил проблему, но почему-то код работает ПОЛНОСТЬЮ только на PascalABC не .NET… В NET версии таймер не считает ничего…
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.09.2012, 17:47 |
Помогаю со студенческими работами здесь Ошибка в строке 97: «incompatible types», а в 99 ошибка: «identifier expected but ‘^’ found», как исправить? Вывести нечётные числа. Ошибка: оператор «%» невозможно применить к операнду типа «string» и «int» Поиск в массиве. Ошибка «Оператор «&&» не может применяться к операндам типа «bool» и «double»» Ошибка в коде «Ожидался оператор» Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
Ожидался оператор PASCAL
program kvadratn;
var A,B,C,x1,x2,D:integer;
begin;
Writeln(‘Дано уравнение вида Ax^2+Bx+C=0’);
Writeln(‘Задайте коэффициент A’);
Readln(A);
Writeln(‘Задайте коэффициент B’);
Readln(B);
Writeln(‘Задайте коэффициент C’);
Readln(C);
D:=B*B-4*A*C;
Write(‘Дискриминант равен: ‘);
Writeln(D);
x1:=((-B+sqrt(D))/2*A);
x2:=((-B-sqrt(D))/2*A);
Writeln(‘Корни: ‘);
if (D>=0) then writeln(x1); Writeln(x2);
else writeln(‘Корней нет’);
end.
Написал вот такую программку которая должна вычислять корни квадратного уравнения.
Но при запуске её, выдаёт ошибку и пишет что ожидался оператор и подчёркивает строчку «else writeln(‘корней нет’)
пожалуйста подскажите в чём проблема
Ошибок море.
После begin и перед else точка с занятой недопустима.
Недопустимо присвоение целочисленным переменным чисел с плавающей запятой, а извлечение квадратного корня возвращает действительное значение.
Неверно написаны формулы вычисления корней x1 и x2.
Если дискриминант меньше нуля, то всё равно будет выполняться извлечение корня из этого отрицательного значения, что вызовет runtime ошибку.
program kvadratn;
var A,B,C,x1,x2,D:real;
begin
Writeln(‘Дано уравнение вида Ax^2+Bx+C=0’);
Writeln(‘Задайте коэффициент A’);
Readln(A);
Writeln(‘Задайте коэффициент B’);
Readln(B);
Writeln(‘Задайте коэффициент C’);
Readln(C);
D:=B*B-4*A*C;
Write(‘Дискриминант равен: ‘);
Writeln(D);
if D 0 then Writeln(x2);
end;
end.
if D=0 then writeln(x1)
else if D>0
begin
Writeln(x1) ;
Writeln(x2) ;
end
else writeln(‘Корней нет’);
так правильнее будет . зачем тебе при D=0 выводить оба значения (они ведь одинаковые)
if (D>=0) then
begin
writeln(x1); Writeln(x2);
end;
else writeln(‘Корней нет’);
1000лет и один день не программировал на паскале!
Посмотри третью строку снизу: после тhen два writeln, это допускается? Попробуй сделать один writeln или если тебе очень надо, составной оператор.
Что значит ожидался оператор в паскале
Помогите пожалуйста не могу разобраться почему когда я добавила procedure r15(xa,xb,xc,xd,ya,yb,yc,yd:real);x 1,x2,x3,y1,y2,y3,pt1,pt2,pt3,s:real ;
unit Lib15;
interface
программа пишет «ожидался оператор»
var
xa,xb,xc,xd,ya,yb,yc,yd:real;
x1,x2,x3,y1,y2,y3:real;
pt1,pt2,pt3,s:real;
begin
write(‘Введите координаты точки А: ‘);
Readln(xa,ya);
write(‘Введите координаты точки B ‘);
Readln(xb,yb);
write(‘Введите координаты точки C ‘);
Readln(xc,yc);
write(‘Введите координаты точки D ‘);
Readln(xd,yd);
procedure r15(xa,xb,xc,xd,ya,yb,yc,yd:real);x 1,x2,x3,y1,y2,y3,pt1,pt2,pt3,s:real ;
unit Lib15;
interface
begin
x1:=xa;
if x1>xb then x1:=xb;
if x1>xc then x1:=xc;
if x1>xd then x1:=xd;
end;
begin
y2:=ya;
if y2<yb then y2:=yb;
if y2<yc then y2:=yc;
if y2<yd then y2:=yd;
end;
begin
x3:=xa;
if x3<xb then x3:=xb;
if x3<xc then x3:=xc;
if x3<xd then x3:=xd;
end;
begin
if x1=xa then y1:=ya;
if x1=xb then y1:=yb;
if x1=xc then y1:=yc;
if x1=xd then y1:=yd;
end;
begin
if y2=ya then x2:=xa;
if y2=yb then x2:=xb;
if y2=yc then x2:=xc;
if y2=yd then x2:=xd;
end;
begin
if x3=xa then y3:=ya;
if x3=xb then y3:=yb;
if x3=xc then y3:=yc;
if x3=xd then y3:=yd;
end;
pt1 := ((y2+(x2*((y3-y1)/(x3-x1))))-(y1+(x1*((y3-y1)/(x3-x1)))));
pt2 := ((x3+(y3*((y3-y1)/(x3-x1))))-(x1+(y1*((y3-y1)/(x3-x1)))));
pt3 := (sqr(x1-x3))/((sqr(y1-y3))+(sqr(x1-x3)));
s := pt1*pt2*pt3;
end;
writeln(‘Площать равна = ‘, s)
end.
Ошибка в простой задаче: пишет ожидался оператор, а встретил else
Pascal. Ошибка в простой задаче: пишет ожидался оператор, а встретил else.
Среда программирования PascalABC.NET, по моей блок-схеме все верно, разделы операторов вроде все на месте, в чем может быть ошибка? Или у меня косоглазие просто?
Перед ЭТИМ else, еще 1 end должен быть.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками pascal pascalabc.net или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Ошибок море.
После begin и перед else точка с занятой недопустима.
Недопустимо присвоение целочисленным переменным чисел с плавающей запятой, а извлечение квадратного корня возвращает действительное значение.
Неверно написаны формулы вычисления корней x1 и x2.
Если дискриминант меньше нуля, то всё равно будет выполняться извлечение корня из этого отрицательного значения, что вызовет runtime ошибку.
Исправленная программа:
program kvadratn;
var A,B,C,x1,x2,D:real;
begin
Writeln(‘Дано уравнение вида Ax^2+Bx+C=0’);
Writeln(‘Задайте коэффициент A’);
Readln(A);
Writeln(‘Задайте коэффициент B’);
Readln(B);
Writeln(‘Задайте коэффициент C’);
Readln(C);
D:=B*B-4*A*C;
Write(‘Дискриминант равен: ‘);
Writeln(D);
if D < 0 then writeln(‘Действительных корней нет’)
else
begin
x1:=(-B+sqrt(D))/2/A;
x2:=(-B-sqrt(D))/2/A;
Writeln(‘Корни: ‘);
writeln(x1);
if D > 0 then Writeln(x2);
end;
end.