Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.09;
Скачать: CL | DM;

Вниз

Непонятки с выводом записи   Найти похожие ветки 

 
Archvile   (2010-10-15 00:42) [0]

Нужно вывести инфу из записи о самом молодом игроке. Вроде все просто, НО при выводе в Мемо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;


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

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


 
Anatoly Podgoretsky ©   (2010-10-15 04:20) [2]

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


 
Anatoly Podgoretsky ©   (2010-10-15 04:20) [3]

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


 
MonoLife ©   (2010-10-15 07:13) [4]


> 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; тогда нужен брейк..


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

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


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


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

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

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


 
MonoLife ©   (2010-10-15 14:12) [7]


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

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


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

> han_malign   (15.10.10 09:24) [6]

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


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

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


 
Archvile   (2010-10-15 19:26) [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];


 
Anatoly Podgoretsky ©   (2010-10-15 19:35) [11]

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


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

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


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

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

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


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


> Archvile   (15.10.10 20:09) [13]

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


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

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


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


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


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

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


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

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

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


 
Anatoly Podgoretsky ©   (2010-10-15 21:10) [18]

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

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


 
Archvile   (2010-10-15 21:15) [19]

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



Страницы: 1 вся ветка

Текущий архив: 2011.01.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.01 c
2-1286908287
ZerGo
2010-10-12 22:31
2011.01.09
Аунтетификация и доступ к ресурсам Windows XP на Delphi.


2-1287398656
mfender
2010-10-18 14:44
2011.01.09
RTTI. Как обратиться к потомку, заведомо не зная его класс?


2-1286912340
v_a_belousov
2010-10-12 23:39
2011.01.09
Получить все объекты на форме


15-1284571785
МИхаил
2010-09-15 21:29
2011.01.09
Хранение вещественного в 2 целых числах, и операции с ним


2-1287124750
LDV
2010-10-15 10:39
2011.01.09
Выбор структуры для хранения данных