![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() В одной из процедур идёт вызов процедуры указанной ниже,и,хотя i в неё не передаётся,writeln(i) выдаёт значение 45588 и массив получается такого де размера+1.Откуда оно там может браться?
Код:
procedure Add_to_Array(var Massiv:Mass;Zap:Sportsmen); var i:word; begin writeln(i); readln; i:=high(Massiv); setlength(Massiv,i+1); Massiv[i]:=Zap; end; |
#2
|
|||
|
|||
![]() Вставил всю программу,у кого есть время,посмотрите пожалуйста.Много ляпов но главный вопрос-отчего такой размер массива
Код:
program Project2; {$APPTYPE CONSOLE} uses SysUtils, converter in 'converter.pas'; type Sportsmen = record Surname:String;// Name:String; //Имя Date_of_birth:String;// Weight:Integer; // Height:Integer; // Sex:String; // end; Mass = array of Sportsmen; // procedure Input_Record(var Zap:Sportsmen;var p:Boolean); begin writeln(RUS(''));readln(Zap.Surname); writeln(RUS(''));readln(Zap.Name); writeln(RUS(''));readln(Zap.Date_of_birth); writeln(RUS('()'));readln(Zap.Weight); writeln(RUS('()'));readln(Zap.Height); writeln(RUS(''));readln(Zap.Sex); if (Zap.Surname='0') or (Zap.Name='0') or (Zap.Date_of_birth='0') or (Zap.Weight=0) or (Zap.Height=0) or (Zap.Sex='0') then p:=false end; // procedure Out_Record(var Zap:Sportsmen); begin writeln(RUS(':')); writeln(RUS(':'),Zap.Surname); writeln(RUS(':'),Zap.Name); writeln(RUS(':'),Zap.Date_of_birth); writeln(RUS(':'),Zap.Weight); writeln(RUS(':'),Zap.Height); writeln(RUS(':'),Zap.Sex); end; // procedure Add_to_Array(var Massiv:Mass;Zap:Sportsmen); var i:word; begin writeln(i); readln; i:=high(Massiv); setlength(Massiv,i+1); Massiv[i]:=Zap; end; // procedure Input_Array(var Massiv:Mass;var p:boolean); var otvet:char; Zap:Sportsmen; begin writeln(RUS('')); repeat Input_Record(Zap,p); p:=true; Add_to_Array(Massiv,Zap); writeln(RUS('? (Y/N)')); readln(otvet); until (otvet='N') or (otvet='n'); end; // procedure Out_Array(Massiv:Mass); var i:integer; begin for i:=0 to high(Massiv) do begin with Massiv[i] do writeln(Surname,' ',Name,' ',Date_of_birth,' ',Weight,' ',Height,' ',Sex); end; end; // procedure Puzyrek(var Massiv:Mass); begin end; // var Massiv:Mass; Num:Integer;// Zap:Sportsmen; p:Boolean;// begin while true do begin writeln(RUS('Набор операций:')); writeln(RUS('1.Заполнение отдельной записи')); writeln(RUS('2.Вывод записи')); writeln(RUS('3.Добавление записи в массив')); writeln(RUS('4.Создание массива записей')); writeln(RUS('5.Вывод массива записей')); writeln(RUS('6.Сортировка "пузырьком""')); writeln(RUS('0.Выход')); writeln(RUS('Введите номер операции:')); Readln(Num); case num of 1: begin Input_Record(Zap,p); end; 2: begin Out_Record(Zap); end; 3: begin Add_to_Array(Massiv,Zap); end; 4: begin Input_Array(Massiv,p); end; 5: begin Out_Array(Massiv); end; 6: begin Puzyrek(Massiv); end; 0: begin halt(0); end; end end; readln; end. Последний раз редактировалось badtrips, 04.10.2011 в 14:41. |
#3
|
||||
|
||||
![]() Дак ты же объявил i и не указал чему оно ровняться то должно
Код:
Sportsmen = record Surname:String;// Name:String; //Имя Date_of_birth:String;// Weight:Integer; // Height:Integer; // Sex:String; // |
#4
|
|||
|
|||
![]() возможно я не понимаю,но если я заместо этого
Код:
procedure Add_to_Array(var Massiv:Mass;Zap:Sportsmen); var i:word; begin writeln(i); readln; i:=high(Massiv); setlength(Massiv,i+1); Massiv[i]:=Zap; end; сделаю это Код:
procedure Add_to_Array(var Massiv:Mass;Zap:Sportsmen); var i:word; begin i:=high(Massiv); writeln(i); readln; setlength(Massiv,i+1); Massiv[i]:=Zap; end; и я наверное коряво написал что именно делаю.запускаю программу,выбираю пункт 4.запускаю процедуру Input_Array,она запускает Input_Record,и потом иду в процедуру Add_to_Array и в ней то вся эта непонятная штука происходит Последний раз редактировалось badtrips, 04.10.2011 в 15:22. |
#5
|
||||
|
||||
![]() high(Massiv)=65535
что тебе не нравится то? |
#6
|
|||
|
|||
![]() почему он такой?он же пустой?..
|
#7
|
|||
|
|||
![]() Цитата:
Код:
procedure Add_to_Array(var Massiv:Mass;Zap:Sportsmen); var i:word; begin i:=high(Massiv); (* если массив пустой, то high = -1, а при переводе в word получается 65535*) writeln(i); readln; setlength(Massiv,i+1); // а вот тут получается чёрти что Massiv[i]:=Zap; end; |
#8
|
|||
|
|||
![]() Цитата:
программа почему то вылетает при i:integer. уже не вылетает но i=4239892 где ж я накосячил то... icWasya-спасибо!не увидел вставку в коде. Последний раз редактировалось badtrips, 04.10.2011 в 19:27. |