Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1286986134
infectioni
2010-10-13 20:08
2011.01.09
параметры куба


4-1243760418
Nikfel
2009-05-31 13:00
2011.01.09
Как загрузить файл .res и из него брать ресурсы


2-1286938887
Василич
2010-10-13 07:01
2011.01.09
Русские буквы в Debug/Local Variables


15-1285572618
12
2010-09-27 11:30
2011.01.09
TDBLookupComboBox, не работает должным образом


2-1287052049
b86
2010-10-14 14:27
2011.01.09
Завести процедуру даблклик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский