Параметр цикла for должен описываться в заголовке цикла как исправить pascalabc net

Егор Соколов



Ученик

(177),
закрыт



2 года назад

program f;
//var
procedure fm;
var i,n:integer;
a:array[1..100] of integer;
begin
read(n);
for i:=1 to n do read(a[i]);
end;
procedure sm;
var j,n,i,x,imax:integer;
a:array[1..100] of integer;
begin
for i:=1 to n-1 do
imax:=1;
for j:=i+1 to n do if a[j]>a[imax]
then imax:=j;
x:=a[i];
a[i]:=a[imax];
a[imax]:=x
end;
procedure bm;
var i,n:integer;
a:array[1..100] of integer;
begin
for i:=1 to n do read(a[i]);
end;
begin
var i,n,x,j,imax:integer;
fm;
sm;
bm;
end.

Krab Bark

Искусственный Интеллект

(263340)


5 лет назад

Ты используешь a[i] за пределами цикла по i. Видимо, нехватает begin …end

Егор СоколовУченик (177)

5 лет назад

Так?
program f;
//var
procedure fm;
var i,n:integer;
a:array[1..100] of integer;
begin
read(n);
for i:=1 to n do read(a[i]);
end;
procedure sm;
var j,n,i,x,imax:integer;
a:array[1..100] of integer;
begin
for i:=1 to n-1 do
begin
imax:=1;
for j:=i+1 to n do if a[j]>a[imax]
then imax:=j;
x:=a[i];
a[i]:=a[imax];
a[imax]:=x
end;
end;
procedure bm;
var i,n:integer;
a:array[1..100] of integer;
begin
for i:=1 to n do read(a[i]);
end;
begin
var i,n,x,j,imax:integer;
fm;
sm;
bm;
end.

Krab Bark
Искусственный Интеллект
(263340)
Синтаксически верно, компилятор пропустит. А что программа должна делать, знаешь только ты.

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Comments

@Ze2QvoQxxKeu

Уберите предупреждение “параметр цикла должен записываться в заголовке цикла”!
Школьники правильно пишут код, но видят эту дрянь и у них истерика! Прекратите самоуправство! Нет в паскале такого правила! Тонны жалоб уже сыпятся!
Одна из них: https://otvet.mail.ru/question/219464948

AIexandrKotov, AlexRnD61, Suniflower, alex-q, realglebivanov, bmblb, jaitl, skeeph, Suvorovkot, Jovvik, and 17 more reacted with thumbs down emoji
Sakuya-Izayoi and DoctorRyner reacted with confused emoji

@miks1965

Это не ошибка, а предупреждение о стиле программирования. Необходимо понимать, что PascalABC.NET – другой язык и в PascalABC.NET другой рекомендуемый стиль программирования нежели в старых паскалях. И эта рекомендация – одна из важнейших.

PascalABC.NET создавался для того чтобы программировать, используя современные концепции, а не множить шаблоны кода 70-х годов прошлого столетия.

ulysses4ever, AlexRnD61, AIexandrKotov, Suniflower, MihaxXx, alex-q, demin-dmitriy, a1tavista, DmLitov4, bmblb, and 23 more reacted with thumbs up emoji

@Ze2QvoQxxKeu

Это не ошибка, а предупреждение

Это нам понятно. Попробуйте объяснить это детям, которые пишут как их учили, пишут правильно, а тут видят это предупреждение. Сделайте хотя бы возможность его отключения в настройках. Те, кто учится ещё, не понимают этого. Надеюсь просьба не останется без внимания.

@miks1965

Не осталась конечно. Не отключим.

Это то немногое, что мы можем сделать для того чтобы школьники начинали учить современные языки программирования. И учителям это надо принять к сведению.

Пожалуйста, откройте сайт pascalabc.net и прочитайте миссию этого языка. Этот язык никогда не создавался как клон устаревших языков и сред программирования.

Мы читаем ваш форум – там есть и вполне правильные решения в стиле PascalABC.NET.
У вас на форуме есть возможность это нормально объяснять. Если они пишут как их учили и это не работает или работает как-то не так, то может дело в том, что как-то не так учат.

Объяснение может быть например такое – в большинстве современных языков используется принцип локальности – переменная описывается как можно ближе к месту своего первого использования. Вы можете игнорировать это предупреждение. Но вы должны понимать, что это плохой стиль, хотя и не ошибка.

ulysses4ever, AlexRnD61, AIexandrKotov, drKazeev, Suniflower, MihaxXx, alex-q, a1tavista, DmLitov4, bmblb, and 33 more reacted with thumbs up emoji
AlexRnD61, klondaiker, and jedi2light reacted with laugh emoji
Ze2QvoQxxKeu reacted with confused emoji
ilyshav, Suvorovkot, tort-dla-psa, AleshaOleg, Tidrek, jedi2light, iaroslav-korenskoi, Forden, dr6am, rrader, and 3 more reacted with heart emoji

@AlexRnD61

Как по мне – я бы в будущем вообще запретил описывать переменные цикла вне его тела. Ибо в ряде случаев это вообще ведет к тупым, причем трудно находимым ошибкам в работе программы.

a1tavista, jaitl, anxolerd, d3mash, jedi2light, iaroslav-korenskoi, L11R, dr6am, DoctorRyner, mrk-andreev, and myazinn reacted with thumbs up emoji
mmatrosov and hazzus reacted with confused emoji

@declard

Как по мне – я бы в будущем запретил циклы, заменив их на хвостовую рекурсию. Пусть школьники отучаются от шаблонов кода прошлого столетия.

justdanpo, andiogenes, DoctorRyner, kzncvs, and Mervap reacted with thumbs up emoji
Pohui-Nahui, TechnoStrife, maxtyutmanov, andiogenes, rrader, DoctorRyner, Mervap, and urandon reacted with laugh emoji

@alexey-sveshnikov

Какой любопытный тикет, какая любопытная ситуация.

Уверен, что школьники – непростая и своеобразная аудитория, и меня как программиста конечно задевает, когда их учат по учебникам 30-летней давности. Но прекрасно могу понять людей, которые действительно не понимают в чем суть варнинга и паникуют.

Смотрите, как про ошибку сообщает Arduino IDE – среда, которая также ориентировна на новичков:

image

А вот ошибка от Docker:
image

@miks1965, кажется, что это могло бы быть возможным решением подобных проблем – в подобные ошибки/варнинги добавлять ссылку на раздел сайта с пояснением, что это такое и как ее избежать.

@ulysses4ever

Схожая идея: иметь для каждого предупреждения и ошибки свой цифро-буквеный код — для облегчения поиска и обсуждения этих объектов. Недавно было предложено для GHC такое сделать — там по ссылке много примеров из других языков, начиная со всеми любимой Visual Studio…

@AlexRnD61

“добавлять ссылку на раздел сайта с пояснением”

Это же сколько контента надо в сайт влить, чтобы не только расписать каждую ошибку, но растолковать ее суть и дать рекомендации, как такие ошибки не допускать. Фактически, это будет сборник статеек “Научите меня программировать!”. Абсолютно нереально это для такого объемного языка. Да и некому делать. Разве что автор предложения возьмется…

5 комментария:


НИКАК!!! PascalABC.NET 3.2 – это современная версия языка, а практически в любом современном языке программирования параметр цикла описывается в заголовке цикла (и тем самым локализуется в этом цикле).


program n_8; var a, b, n :integer;begin a:=0; readln(n); for b:= 1 to n do a:=a+b; writeln(a);end.


В чем ошибка? Как сделать чтобы не было предупреждения?


Ошибки нет. Это не сообщение об ошибке, а предупреждение. Программа откомпилируется и будет нормально работать.


А если Вы хотите, чтобы сообщения не было, то: 1) уберите b из var 2) оператор цикла надо писать в виде for var b:=1 to n …

30 ноября 2022 03:11

766

Паскаль, ошибка Параметр цикла for в PascalABC.NET должен описываться в заголовке циклаVar

a: array [1..5] of integer;

begin

begin

a := random(50,100); <=== ошибка здесь ( Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла)

end;

for i:=1 to 5 do if a[i] mod 2=0 then

writeln(a[i]);
end.

Посмотреть ответы

a := random(50,100); <=== ошибка здесь ( Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла)

Это неверное заявление. Неверное по двум причинам. Первая – это не тот оператор, оператор цикла вот: for i:=1 to 5 do. Вторая причина в том, что это не ошибка, а предупреждение. Синтаксис for i:=1 объявлен устаревшим, современный синтаксис предполагает запись вида for var i:=1 to 5 do.

Ответ: Ну смотри a – у тебя массив от 1 до 5. Таким образом ты его заполнить не сможешь(ну нельзя так). Для его заполнения ты можешь применить цикл FOR, примерная запись будет такая:
for var I := 1 to 5 do
a[i] := Random(101)-51;
Либо ты можешь не описывать массив в начале, о писать его сразу в программе:
var a := ArrRandom(5,50,100) //вот так тоже можно заполнить массив.
Далее в цикле у тебя у счетчик i, не задан тип данных, то есть не указано что это переменная. Это можно исправить присвоил в разделе Var тип для i:
Var
i: integer;
Либо в PASCALABC.NET можно описывать переменные прямо в теле программы.
Ты ставишь перед счетчиком var //происходит автоопределения типа, либо ты его можешь сам указать.
For var i:=1 to 5 do
И зачем у тебя один оператор в самом начале заключен в begin end;

Еще вопросы по категории Информатика

Skip to content

Главная » Информатика – 5 – 9 классы

of integer;

begin

begin

a := random(50,100); <=== ошибка здесь ( Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла)

end;

for i:=1 to 5 do if a[i] mod 2=0 then

writeln(a[i]);
end.

Ответ №1

Ответ: Ну смотри a — у тебя массив от 1 до 5. Таким образом ты его заполнить не сможешь(ну нельзя так). Для его заполнения ты можешь применить цикл FOR, примерная запись будет такая:

for var I := 1 to 5 do

a[i] := Random(101)-51;

Либо ты можешь не описывать массив в начале, о писать его сразу в программе:

var a := ArrRandom(5,50,100) //вот так тоже можно заполнить массив.

Далее в цикле у тебя у счетчик i, не задан тип данных, то есть не указано что это переменная. Это можно исправить присвоил в разделе Var тип для i:

Var

i: integer;

Либо в PASCALABC.NET можно описывать переменные прямо в теле программы.

Ты ставишь перед счетчиком var //происходит автоопределения типа, либо ты его можешь сам указать.

For var i:=1 to 5 do

И зачем у тебя один оператор в самом начале заключен в begin end;

Ответ №2

a := random(50,100); <=== ошибка здесь ( Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла)

Это неверное заявление. Неверное по двум причинам. Первая — это не тот оператор, оператор цикла вот: for i:=1 to 5 do. Вторая причина в том, что это не ошибка, а предупреждение. Синтаксис for i:=1 объявлен устаревшим, современный синтаксис предполагает запись вида for var i:=1 to 5 do.

Добавить комментарий