Форум: "Начинающим";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
ВнизНепонятки с выводом записи Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c