Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 18
1

Warning: For loop control variable must be simple local variable

25.04.2017, 16:40. Показов 987. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализация метода ДП - программирования для задачи о рюкзаке
выдает ошибку [Warning] Project1.dpr(16): For loop control variable must be simple local variable
что за ошибка? помогите исправить
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
program DP2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 
Const MaxW = 200; MaxN = 100;
var Value:array [0..MaxW,0..MaxN] of integer; {массивзначений(сколькоможнонабратьдля 1..W весовв 1..N предметов)}
Take :array [0..MaxW,0..MaxN] of boolean; {массивзначенийбралипредметилинет}
W,P :array [0..MaxN] of integer; {Массиввесов, массивцен}
i, N, Weight, MaxWeight :integer;
procedure Init;
begin
assign(input,'input.txt');
reset(input);
readln(N, MaxWeight);
for i:=1 to N do readln(W[i], P[i]);
close(input);
end;
procedure Solve;
begin
fillchar(Take, sizeof(Take), false); {обнуляем}
fillchar(Value, sizeof(Value), 0);
for Weight:=1 to MaxWeight do begin {выбираемоптимумдлявеса Weight}
for i:=1 to N do {берем предметы с 1 по N}
{если вес предмета больше чем текущий вес рюкзака}
{или предыдущий набор дороже выбираемого}
if (W[i]> Weight) or (Value[Weight, i-1] >= Value[Weight-W[i], i-1]+P[i]) then begin
Value[Weight, i]:= Value[Weight, i - 1];
{тогдеаберемпредыдущийнабор}
Take[Weight, i]:= false; {говоримчтовещь i невзята}
end
else begin {иначе добавляем к предыдущему набору текущий предмет}
Value[Weight, i]:= Value[Weight - W[i], i-1] +P[i];
Take[Weight, i]:= true; {говоримчтовещь i взята}
end;
end;
end;
procedure Done;
begin
assign(output,'output.txt');
rewrite(output);
Writeln('Наилучшийнабор ', Value[MaxWeight, N]);
Weight:= MaxWeight;
for i:= N downto 1 do if Take[Weight, i] then begin
Write(i,' ');
Weight:= Weight-W[i];
end;
close(output);
end;
begin
Init;
Solve;
Done;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2017, 16:40
Ответы с готовыми решениями:

Не могу понять в чем дело,выдает ошибку [Warning] Unit1.pas(90): For loop control variable must be simple local variable
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Исправить ошибку For loop control variable must be simple local variable
var q,s,n:integer; a:array of integer; i:integer; Form1: TForm1; implementation {$R...

Предупреждение: For loop control variable must be simple local variable
дан массив 3x6 найти максимальный элемент главной диагонали. unit Unit1; interface uses ...

Ошибка: For loop control variable must be simple local variable
Добрый день , дело вот в чем , написал я процедурку : procedure TForm1.DrawClock; var ...

3
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
25.04.2017, 18:22 2
а спросить у поиска?
For loop control variable must be simple local variable

зачем тему создавать если все понятно из 1 строки яндекса?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.04.2017, 18:27 3
Это не ошибка, а предупреждение о возможной неправильной работе программы.
Переменная i должна быть объявлена в процедуре.
Уберите все что не нужно из глобальных переменных.
Вообще прочитайте про глобальные и локальные переменные.
Delphi
1
2
3
procedure Init;
var i:integer;
begin
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от qwertehok Посмотреть сообщение
зачем тему создавать
Чтобы форум получил плюсик.

0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,253
26.04.2017, 02:16 4
Цитата Сообщение от Puporev Посмотреть сообщение
Это не ошибка, а предупреждение о возможной неправильной работе программы.
Не совсем так. Программа будет работать правильно в любом случае. Но код будет не оптимальным.
0
26.04.2017, 02:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2017, 02:16
Помогаю со студенческими работами здесь

Ошибка For loop control variable must be simple local variable
Добра всем! Ошибка, указанная в топике темы, возникает в таком контексте: function ParseMath...

Предупреждение: For loop control variable must be simple local variable
Помогите у меня проблема,когда я запускаю программу на Delphi. На Diagram выходит надпись....

Ошибка: "for loop control variable must be simple local variable"
как избежать эту ошибку, если массив динамический? procedure TForm1.Button3Click(Sender:...

Ошибка: "For loop control variable must be simple local variable"
unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Ошибка "For loop control variable must be simple local variable"
Товарищи,по какой причине в заданной функции невозможно деление, при умножении программа работает,...

Ошибка For loop control must be simple local variable
Появляется в 133 и 134 строке. unit Unit1; interface uses Windows, Messages, SysUtils,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru