Что то не работает?

  • Автор темы Guest
  • Дата начала
G

Guest

#1
[codebox]Program M65;
uses crt;
type slovo = packed array [1..9] of char;
Number_Phone=100000..999999;
Znakom=record
Family:slovo;
Number:Number_Phone;
end;
Page=array[1..20] of znakom;
zapisnaia=array[1..20] of page;
Procedure Fam(Zp:zapisnaia; Nt:Number_Phone; var F:slovo);
var
i,l:integer;
ext:boolean;
begin
ext:=false;
i:=0;
repeat
inc(i);
l:=0;
repeat
inc(l);
if zp[i,l].Number=nt then begin
f:=zp[i,l].family;
ext:=true;
end;
until (l=20) or (ext);
until (i=20) or (ext);
end;
var
Kniga:zapisnaia;
num:Number_Phone;
f:slovo;
begin
randomize;
clrscr;
f:=' ';
Kniga[1,1].number:=111111;
Kniga[1,1].family:='Сидоров';
Kniga[2,1].number:=211111;
Kniga[2,1].family:=' ‘Петров';

fam(kniga,111111,f);
if f<>' ' then writeln('family: ',f) else writeln('family not found');
readln;
end.[/codebox]


Задача выдаёт не тот результат, что не так подскажите пожалуйста!
 
Y

Yason

#2
Проверить нечем, но мне подозрительно вот это сравнение, разве массивы можно сравнивать как строки?
Код:
if f<>'		 ' then writeln('family: ',f) else writeln('family not found')
Кроме того, в процедуру передаётся массив размером 20*20*(9+4)=5200, не каждый стек это выдержит. Лучше так:
Procedure Fam(const Zp:zapisnaia; Nt:Number_Phone; var F:slovo);
P.S. Не помню, понимает ли Turbo Pascal const перед параметром, если нет - заменить на var.
 
G

Guest

#3
Не помогает, всё равно не то выводит, и вести ничего нельзя
 
Y

Yason

#4
А объясните, пожалуйста, как Вам удалось переменной Kniga[1,1].family типа packed array [1..9] of char присвоить значение 'Сидоров' типа packed array [1..7] of char.
При добавлении нужного количества пробелов, программа выдаёт "Сидоров". Или по-вашему, это "не тот результат"?
 
G

Guest

#5
И в правду, всё нормально!
Спасибо всем за помощь! :ph34r: