![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |