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

цикл for не может обрабатывать массивы? (паскаль)

Program while_repeat_for;
var
i:array[0..2] of integer;
begin
i[1] := 1;
i[2] := 1;
while i[1]<=10 do //пока условие не станет ложным (11<=10)
begin
i[1] := i[1]+1;
end;
Writeln('Операция while выполнена ',i[1],' раз');
repeat
i[2]:= i[2]+1
until i[2]>=10;//пока условие не станет истинным (10<=10)
Writeln('Операция repeat выполнена ',i[2],' раз');
for i[0]:=1 to 10 do
Writeln('Операция repeat выполнена ',i[0],' раз');
end.

Ошибка встречано [ а ожидалось ;
Сможет - если ты возьмёшь компилятор, разрешающий использовать элемент массива в качестве индекса цикла for.

Например, gpc это разрешает, а free pascal - нет.
АГ
Александар Голубев
61 414
Лучший ответ
Лучше проверь, все ли "семиколоны" (;) стоят в тексте!
Роман Зинченко
Роман Зинченко
80 047
Потому, что у вас не просто „паскаль“, а PascalABC.Net, в котором не всё как должно быть!
Ему нужен порядковый тип… А почему i[0] не является порядковым — это загадка.

Эта фишка ещё с PABC без .Net тянется:
Oleg Buslov
Oleg Buslov
83 242
проверь англ или русский
Владимир Краснокутский что именно? Всё на английском вроде...
Вариантов циклов на то и несколько, чтобы их счётчики обрабатывались если не в одном варианте, так в другом! Например, у меня во FreePascalCompiler'e s:=0; for a[1]:=1 to 10 do s:=s+a[1]; writeln(s) приведёт к ошибке и компиляционному аборту, a в цикле s:=0; a[1]:=0; while a[1]<10 do begin a[1]:=a[1]+1; s:=s+a[1] end; writeln(s) всё нормально! На фри паскале, кстати сказать, циклы for ещё могут не работать со счётчиками целого восьмибайтного типа int64.
Oлег Бойцов
Oлег Бойцов
28 648
Да, так нельзя.
Если я правильно понял, что Вы хотите, предлагаю такое решение:
Program while_repeat_for;
var
i:array[0..2] of integer;
j:integer;
begin
i[1] := 1;
i[2] := 1;
while i[1]<=10 do //пока условие не станет ложным (11<=10)
begin
i[1] := i[1]+1;
end;
Writeln('Операция while выполнена ',i[1],' раз');
repeat
i[2]:= i[2]+1
until i[2]>=10;//пока условие не станет истинным (10<=10)
Writeln('Операция repeat выполнена ',i[2],' раз');
for j:=i[low(i)] to i[high(i)] do
Writeln('Операция repeat выполнена ',i[0],' раз');
end.