Страница 1 из 1
Помогите с ошибкой в программе
Добавлено: 30.05.2014 17:28:57
pishite
Заранее прошу прощение если публику не в той теме. Начал учить паскаль по этой замечательной книжки, но столкнулся с проблемой помогите её найти и объясните где я допустил ошибку.
Код: Выделить всё
{ программа бортовой пк }
var
S: string ;
A, B, C, D, E, F, G : Boolean;
begin
Write('Улица A:'); Readln(S); A:=S='1';
Write('Улица B:'); Readln(S); B:=S='1';
Write('Шлагбаум F:'); Readln(S); F:=S='1';
Write('Улица С: '); Readln(S); C:=S='1';
Write('Улица D:'); Readln(S); D:=S='1';
Write('Улица E:'); Readln(S); E:=S='1';
Write('Шлагбаум G:'); Readln(S); G:=S='1';
if A and B not F or C and D or E not G
then S:='Поехали'
else S:='Постоим';
Writeln(S); Readln;
end.
Выводит ошибки при компиляции:
First compilation of c:\fpc\programm\z_p_13_1.pas
Z_P_13_1.pas(13,22) Fatal: Syntax error, "THEN" expected but "not" found
Z_P_13_1.pas(0) Fatal: Compilation aborted
Re: Помогите с ошибкой в программе
Добавлено: 30.05.2014 17:35:24
скалогрыз
"Песни о Паскале"?

вспоминается анекдот "Индусы не пишут код, они его поют и танцуют"
Есть мнение, что это не просто "перепеши" програмку, а задача - "расставить правильно скобки в if " (либо октровенная безалаберность редактора)
Попробуй так
Код: Выделить всё
{ программа бортовой пк }
var
S: string ;
A, B, C, D, E, F, G : Boolean;
begin
Write('Улица A:'); Readln(S); A:=S='1';
Write('Улица B:'); Readln(S); B:=S='1';
Write('Шлагбаум F:'); Readln(S); F:=S='1';
Write('Улица С: '); Readln(S); C:=S='1';
Write('Улица D:'); Readln(S); D:=S='1';
Write('Улица E:'); Readln(S); E:=S='1';
Write('Шлагбаум G:'); Readln(S); G:=S='1';
if A and B and not F or C and D or E and not G
then S:='Поехали'
else S:='Постоим';
Writeln(S); Readln;
end.
Re: Помогите с ошибкой в программе
Добавлено: 30.05.2014 17:51:46
pishite
По ответу книги программа должна выглядеть так:

Спасибо помогли люди добрые на ответах маил.ру
Код: Выделить всё
{ программа бортовой пк }
var
S: string ;
A, B, C, D, E, F, G : Boolean;
begin
Write('Улица A:'); Readln(S); A:=S='1';
Write('Улица B:'); Readln(S); B:=S='1';
Write('Шлагбаум F:'); Readln(S); F:=S='1';
Write('Улица С:'); Readln(S); C:=S='1';
Write('Улица D:'); Readln(S); D:=S='1';
Write('Улица E:'); Readln(S); E:=S='1';
Write('Шлагбаум G:'); Readln(S); G:=S='1';
[b] if ((A and B) and not F) or (C and D) or (E and not G)[/b] - Вот как надо было писать решение в книги опечатка!!! Спасибо пользователю с маил.ру Женёк Мастер
then Writeln('Поехали')
else Writeln('Постоим');
Writeln(S); Readln;
end.
Re: Помогите с ошибкой в программе
Добавлено: 30.05.2014 18:40:57
скалогрыз
pishite, ты не начал учить паскаль, ты начал изучать социальные сети.
я уже написал тебе в личку, но заодним скажу здесь:
изначально ты невнимательно переписал "решающий оператор" (если он был дан в книге).
Как итог, программа отказалась компилироватся.
Обратившись за помощью (вместо того чтобы себя перепроверить), ты получил решение задачи.
Как результат, задачку ты сам не решил.
Вывод: логические выражения не поняты и не выучены. Но ничего, впереди ещё будет шанс исправится... на крайняк Женёк поможет

Re: Помогите с ошибкой в программе
Добавлено: 30.05.2014 20:09:32
pishite
скалогрыз писал(а):pishite, ты не начал учить паскаль, ты начал изучать социальные сети.
я уже написал тебе в личку, но заодним скажу здесь:
изначально ты невнимательно переписал "решающий оператор" (если он был дан в книге).
Как итог, программа отказалась компилироватся.
Обратившись за помощью (вместо того чтобы себя перепроверить), ты получил решение задачи.
Как результат, задачку ты сам не решил.
Вывод: логические выражения не поняты и не выучены. Но ничего, впереди ещё будет шанс исправится... на крайняк Женёк поможет

действительно это мне минус прошу прощения за свою невнимательность.
Добавлено спустя 11 минут 35 секунд:Решил провести работу по ошибкам и написал аналогичную программу не подглядывая в книгу.
Код: Выделить всё
{ программа - дорога на работу! }
const
center='Через центр пройти:';
avto='Через автовокзал пройти:';
vino='Через Винзавод пройти:';
var
S1, S2, S3: string;
A, B, C, D, E, F, G : boolean;
begin
Write('Центр:'); Readln(S1); A:=S1='да';
Write('Набережная:'); Readln(S1); B:=S1='да';
Write('Открыт шлагбаум?'); Readln(S1); F:=S1='да';
Write('Автовокзал:'); Readln(S2); C:=S2='да';
Write('Набережная:'); Readln(S2); D:=S2='да';
Write('Винзавод:'); Readln(S3); E:=S3='да';
Write('Открыт шлагбаум?'); Readln(S3); G:=S3='да';
if ((A and B) and not F) or (C and D) or (E and not G)
then Writeln('Вас ждет работа')
else Writeln('Ищите другие пути');
Writeln(center, '',S1);
Writeln(avto, '',S2);
Writeln(vino, '',S3);
Readln;
end.
Re: Помогите с ошибкой в программе
Добавлено: 30.05.2014 22:37:40
Oleg_D
pishite писал(а): if ((A and B) and not F) or (C and D) or (E and not G) - Вот как надо было писать решение в книги опечатка!!!
Это выражение эквивалентно тому же, но без скобок, как в книге:
if A and B and not F or C and D or E and not G
Лишние скобки - это не ошибка, конечно, но немного засоряют текст.
А в вашем первом решении так было, напомню:
if A and B not F or C and D or E not G
Разберитесь ещё раз с приоритетом операций:
1. not
2. and
3. or
скалогрыз писал(а):"Песни о Паскале"? вспоминается анекдот "Индусы не пишут код, они его поют и танцуют"

Re: Помогите с ошибкой в программе
Добавлено: 31.05.2014 01:28:32
скалогрыз
reshite, вот тебе задание на закрепление материала.
Попробуй в этот раз Женька не привлекать!

Re: Помогите с ошибкой в программе
Добавлено: 31.05.2014 14:12:21
pishite
Код: Выделить всё
{ программа - дорога в школу! }
var
S:string;
A, B, C, D, E, F, G:boolean;
begin
Writeln('Введите "да" если проезд открыт и "нет" если проезд закрыт');
Write('Шлагбаум F:'); Readln(S); F:=S='да';
Write('Улица A:'); Readln(S); A:=S='да';
Write('Улица С:'); Readln(S); C:=S='да';
Write('Улица B:'); Readln(S); B:=S='да';
Write('Улица E:'); Readln(S); E:=S='да';
Write('Шлагбаум G:'); Readln(S); G:=S='да';
Write('Улица D:'); Readln(S); D:=S='да';
if not F and A or C and B or E and not G and D
then Writeln('Проезд свободен!')
else Writeln('Ищите другие пути!');
Writeln(S);
Writeln('Нажмите "Enter"');
Readln;
end.
Вот готово, но при вводе значения ''да'' у меня почему-то выводиться - else Writeln('Ищите другие пути!');
Приоритеты поставлены вроде как правильно, пробовал и со скобками и без них. Сначала Выполняется "not" потом "and",а после "or". Или тут проблемы при при образовании строковой переменой в нулевую?
Добавлено спустя 3 минуты 12 секунд:Все я понял я заношу данные в 1 переменную и они теряется при вводе новых параметров. Я должен назначить несколько переменных и будет все хорошо.
Код: Выделить всё
{ программа - дорога в школу! }
var
S, Q, W:string;
A, B, C, D, E, F, G:boolean;
begin
Writeln('Введите "да" если проезд открыт и "нет" если проезд закрыт');
Write('Шлагбаум F:'); Readln(S); F:=S='да';
Write('Улица A:'); Readln(S); A:=S='да';
Write('Улица С:'); Readln(Q); C:=Q='да';
Write('Улица B:'); Readln(Q); B:=Q='да';
Write('Улица E:'); Readln(W); E:=W='да';
Write('Шлагбаум G:'); Readln(W); G:=W='да';
Write('Улица D:'); Readln(W); D:=W='да';
if not F and A or C and B or E and not G and D
then Writeln('Проезд свободен!')
else Writeln('Ищите другие пути!');
Writeln('*************************************');
Writeln('Через 1 дорогу:',S, 'Через 2 дорогу:', Q, 'Через 3 дорогу:', W);
Writeln('Нажмите "Enter"');
Readln;
end.
Добавлено спустя 4 минуты 1 секунду:Ура сработало!!!!!

Re: Помогите с ошибкой в программе
Добавлено: 31.05.2014 19:51:15
скалогрыз
зачёт! с заданием справился!
но если попробуешь переписать на 1 или 0 вместо, "да" и "нет", всё может лучше получится. Да и дополнительные переменные не понядобятся.
Re: Помогите с ошибкой в программе
Добавлено: 01.06.2014 00:19:17
Little_Roo
Тег [code] снова не в чести???

Re: Помогите с ошибкой в программе
Добавлено: 03.06.2014 15:11:12
pishite
Переменные M1, M2 и M3 отражают итог подбрасывания трех монет и содержат
TRUE, если выпал«орел». Пусть программа напечатает TRUE для следующих случаев: 1)
у всех монет выпал«орел»; 2) у всех монет выпала«решка»; 3) все три монеты упали
одинаково; 4) у первой –«решка», у остальных –«орел»; 5) у первой –«орел», а две
остальные упали одинаково.
Код: Выделить всё
var M1, M2, M3 : boolean;
begin
{ Ввод переменных организуйте здесь}
Writeln(M1 and M2 and M3);
Writeln(not M1 and not M2 and not M3);
Writeln((M1=M2) and (M2=M3));
Writeln(not M1 and M2 and M3);
Writeln(M1 and (M2=M3));
end.
Это решение книги, можете задать аналогичную программу дабы закрепить материал, сам без подсказки не смог написать программу или статью где шире расписано про правду и лож.
Добавлено спустя 21 час 18 минут 33 секунды:Вроде как переосмыслил решение и не много понял...