Другие языки программирования и технологии

Pascal. Проблема с логическими выражениями.

Ребят, помогите! В чем проблема?

var x,y,z,a,b,c:integer;
begin
a:= ((not x) and y and z);
b:= ((not x) and (not y) and z);
c:= ((not x) and (not y) and (not z));
for x := 0 to 1 do
for y := 0 to 1 do
for z := 0 to 1 do
if (a or b or c) = 1 then
writeln(x, ' ',y, ' ',z);
end.

В чем проблема? Пишет что параметр цикла for должен описываться в заголовке цикла.
А когда после for прописываю var и удаляю в начале, то он просто не выдает результата.

Описание переменной, используемой для итерации (x, y, z) в заголовке цикла исключает использование переменной вне цикла.
Пример:
begin
for var i := 0 to 10 do
writeln(i);
end.
ЧЖ
Чингиз Жумамидинович
19 389
Лучший ответ
Не обращай внимания - это не ошибка, а предупреждение. Показывающее, насколько создателям PascalABC.NET накласть и на оригинальный Pascal, и на принципы структурного программирования, и на качество обучения.

PascalABC.NET - это не Pascal, а C#, загримированный под Pascal. Возьми хотя бы Delphi - там подобных бредовых требований не будет.

Другое дело, что у тебя код программы ошибочен - даже второй вариант.
Все переменные должны иметь тип boolean:

var x,y,z,a,b,c:boolean;
begin
for x := false to true do
for y := false to true do
for z := false to true do begin
a:= not x and y and z;
b:= not x and not y and z;
c:= not x and not y and not z;
if a or b or c then writeln(ord(x), ' ',ord(y), ' ',ord(z))
end
end.
Наталья, проблема в том, что Вы пишете в современном PascalABС. NET (разработанном в последнее десятилетие) код по канонам языка Паскаль, как его представлял себе Н. Вирт (полвека назад). Код этого нового Паскаля более надежен, т. е. он лучше бережет программиста от ошибок. Классика программирования говорит о том, что параметр цикла неверно использовать вне пределов этого цикла. Для закрепления в умах этого канона PascalABC.NET предлагает описывать параметр цикла в заголовке этого цикла и тем самым локализует его. Использование переменных, описанных ранее, ошибкой не считается, но считается недочетом, поэтому компилятор выдает предупреждение. Типа, "сам дурак, но если хочешь так писать - твое право".

В Вашем случае можно писать for var x := False to True do - и все будет хорошо.
Макс Леон
Макс Леон
385