Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятки с выводом записи [D6, XP]


Archvile ©   (2010-10-15 00:42:00) 

Нужно вывести инфу из записи о самом молодом игроке. Вроде все просто, НО при выводе в Мемо1 ничего не пишет. Как только убираю цикл и на прямую забиваю(допустим m:=6) то все ОК-вывод есть. Включаю через цикл определение m. Ничего не выводит.
Так вроде и в цикле ошибки нету =(

procedure TForm1.Button4Click(Sender: TObject);
var
i,m:integer;

begin
Memo1.Clear;
m:=0; i:=0;  
while i<=6 do
  begin
  if sport[i].age < sport[m].age then m:=i;
  inc(i);
  end;
Memo1.Lines.Add('Самый молодой игрок:');
Memo1.Lines.Add(sport[m].country+' ~ '+sport[m].team+' ~ '+sport[m].FIO+' ~ '+
IntToStr(sport[m].number)+' ~ '+IntToStr(sport[m].age)+' ~ '+
IntToStr(sport[m].height)+' ~ '+IntToStr(sport[m].weight));
end;


Archvile   (2010-10-15 21:15:00) [1]

Все, теперь понял) n указывало на "пустой" эл. массива т.к. в одном месте я его увеличил на 1.


Anatoly Podgoretsky   (2010-10-15 21:10:00) [2]

> Archvile  (15.10.2010 20:31:15)  [15]

Все зависит от значения N, оно вообще может быть неинициализировано.


Archvile   (2010-10-15 21:09:00) [3]

Это если бы я задавал массив так
sport:array[1..10] of TSport;

Но я задал вот так
sport:array[0..10] of TSport;


Amoeba_   (2010-10-15 20:39:00) [4]


> Archvile   (15.10.10 20:31) [15]
>
> Все разобрался. Но так и не понял почему был выход за массив
> =\
> Вроде же n последний элемент массива.
>

А чего тут не понять? Матчасть учи!
Индекс последнего элемента динамического массива всегда n-1 (где n длина массива), а индекс первого всегда 0.


Archvile   (2010-10-15 20:31:00) [5]

Все разобрался. Но так и не понял почему был выход за массив =\
Вроде же n последний элемент массива.


Memo1.Clear;
m:=0;
for i:=0 to n-1 do
  if sport[i].age < sport[m].age then m:=i;


Германн   (2010-10-15 20:12:00) [6]


> Archvile   (15.10.10 20:09) [13]

Давай тогда цельный кусок кода, который можно проверить.


Archvile   (2010-10-15 20:09:00) [7]

Попробывал еще так. Безрезультатно.

begin
Memo1.Clear;
m:=0;
for i:=0 to n do
  if sport[i].age < sport[m].age then m:=i;


Archvile   (2010-10-15 19:56:00) [8]

Спрашивали как объявлен массив.


Anatoly Podgoretsky   (2010-10-15 19:35:00) [9]

А что с этим кодом делать?


Archvile   (2010-10-15 19:26:00) [10]

Ан,нет. Ошибся =)

Вот объявление записи. Я добавил шесть записей в массив.


Type
 TSport=record
    country:string[20];
    team:string[20];
    FIO:string[40];
    number:integer;
    age:integer;
    height:integer;
    weight:integer;
    end;
var
 Form1: TForm1;
 f:TextFile;
 sport:array[0..10] of TSport;
 n,m:integer;
 fname:string[15];


Archvile   (2010-10-15 19:22:00) [11]

Спасибо! Действительно, выход за диапазон.


Юрий Зотов   (2010-10-15 14:38:00) [12]

> han_malign   (15.10.10 09:24) [6]

m := Low(sport);
for i := Low(sport) + 1to High(sport) do ...


MonoLife   (2010-10-15 14:12:00) [13]


> MBo ©   (15.10.10 08:25) [5]
>
> >тогда нужен брейк..
> не нужен.

блин, не внимательный я!


han_malign   (2010-10-15 09:24:00) [14]


> Нет ли тут выхода за диапазон?

+1
m:= Low(sport);
for i:= Low(sport) to High(sport) do ...

и заметь, при масштабировании решения - достаточно просто изменить размер массива и, как минимум эта часть, будет продолжать работать без внесения каких либо изменений...


MBo   (2010-10-15 08:25:00) [15]

>тогда нужен брейк..
не нужен.


MonoLife   (2010-10-15 07:13:00) [16]


> while i<=6 do
>   begin
>   if sport[i].age < sport[m].age then m:=i;
>   inc(i);
>   end;
...
Memo1.Lines.Add(sport[m]....

а смысл? m будет равняться либо 0, либо одному из значений i.
имхо, после if sport[i].age < sport[m].age then m:=i; тогда нужен брейк..


Anatoly Podgoretsky   (2010-10-15 04:20:00) [17]

Удалено модератором


Anatoly Podgoretsky   (2010-10-15 04:20:00) [18]

Отладку сделай.


Юрий Зотов   (2010-10-15 01:25:00) [19]

Как объявлен массив Sport? Нет ли тут выхода за диапазон?


Наверх

Титульная страница Поиск, карта сайта Написать письмо