Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.83
BDL3
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 36
#1

Ошибка в программе: Assignment to FOR-Loop variable 'i' - Delphi

26.05.2012, 12:29. Просмотров 14732. Ответов 4
Метки нет (Все метки)

Задача: Дан массив случайных чисел. Нужно найти макс. и мин. элемент и поменять их местами. Так вот, в этом фрагменте программы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
imin:=0;
    imax:=0;
    for i:= 0 to (n-1) do
    begin
       if x[i]<a[imin] then
           begin
              imin:=i;             
           end;
       if x[i]>a[imax] then
           begin
              imax:=i;
           end;
а именно в строке for i:= 0 to (n-1) do выдает ошибку: [DCC Error] Unit1.pas(47): E2081 Assignment to FOR-Loop variable 'i'
подскажите что делать? как от этой ошибки избавиться? или как по другому код написать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 12:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка в программе: Assignment to FOR-Loop variable 'i' (Delphi):

Ошибка Assignment to FOR-Loop variable
for ko := 0 to 3 do begin ko:=ko*4; for i:=ko to ko+3 do...

Ошибка Assignment t o FOR-Loop variable при при присваивании переменной значения
При написании программы вылезла ошибка: ... (137): Assignment t o FOR-Loop...

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

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

Illegal assignment to for-loop, ошибка в цикле
Помогите,не могу понять в чем ошибка, пишет illegal assignment to for-loop...

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

4
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
26.05.2012, 13:10 #2
Именно в этом фрагменте всё нормально. Покажи, как ты описываешь переменную i. И немного больше кода впереди. Может быть цикл в цикле, и во внешнем цикле тоже эта переменная используется.
1
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
26.05.2012, 13:11 #3
Наверное, этот цикл внутри другого цикла, в котором переменная - тоже i. Если так, используй другую.
1
BDL3
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 36
26.05.2012, 17:49  [ТС] #4
Цитата Сообщение от Одиночка Посмотреть сообщение
Именно в этом фрагменте всё нормально. Покажи, как ты описываешь переменную i. И немного больше кода впереди. Может быть цикл в цикле, и во внешнем цикле тоже эта переменная используется.
вот, смотри, побольше захватил:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Begin
  for i := 0 to n do
  begin
    randomize;
    imin:=0;
    imax:=0;
    for i:= 0 to (n-1) do
    begin
       if x[i]<a[imin] then
           begin
              imin:=i;
              end;
       if x[i]>a[imax] then
           begin
              imax:=i;
              end;
Добавлено через 2 минуты
все, сделал, просто цикл до нахождения мин. и макс. закрыл, и нормально стало
Delphi
1
2
3
4
5
6
7
8
9
10
11
Begin
  for i := 0 to n do
  begin
   randomize;
    imin:=0;
    imax:=0;
    end;
    for i:= 0 to (n-1) do
    begin
       if x[i]<a[imin] then
           begin
0
Одиночка
3933 / 1858 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
26.05.2012, 18:04 #5
Ну конечно в одном цикле используешь переменную i и во внутреннем тоже. Используй во внутреннем цикле другую переменную:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  for i := 0 to n do
  begin
    randomize;
    imin:=0;
    imax:=0;
    for j:= 0 to (n-1) do
    begin
       if x[j]<a[imin] then
           begin
              imin:=j;
              end;
       if x[j]>a[imax] then
           begin
              imax:=j;
              end;
Хотя не зная логики работы, не скажешь, как именно нужно делать.

Добавлено через 1 минуту
Пока писал, ты там добавление сделал. Это бред. Ты в цикле одним и тем же переменным присваиваешь одно и то же значение.

Добавлено через 12 минут
Вот как нужно делать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Begin
  randomize;
  for i := 0 to n do x[i]:=Random(100); //Заполняем массив
  imin:=0;
  imax:=0;
  //Ищем минимальный и максимальный элементы...
  for i:= 1 to n do
  begin
     if x[i]<x[imin] then imin:=i;
     if x[i]>x[imax] then imax:=i;
  end;
  //Меняем местами...
  i:=x[imin];
  x[imin]:=x[imax];
  x[imax]:=i;
End;
1
26.05.2012, 18:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 18:04
Привет! Вот еще темы с решениями:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru