Автор: ЖэКЫЧ 21:04:2008, 04:56
CODE
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.
Задача выдаёт не тот результат, что не так подскажите пожалуйста!
Автор: sax_ol 21:04:2008, 07:15
Цитата(ЖэКЫЧ @ 21:04:2008 - 06:56)

i:=0;
...
l:=0;
?
Автор: Yason 21:04:2008, 12:06
Проверить нечем, но мне подозрительно вот это сравнение, разве массивы можно сравнивать как строки?
Код
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.
Автор: ЖэКЫЧ 22:04:2008, 17:10
Не помогает, всё равно не то выводит, и вести ничего нельзя
Автор: Yason 22:04:2008, 17:39
А объясните, пожалуйста, как Вам удалось переменной Kniga[1,1].family типа packed array [1..9] of char присвоить значение 'Сидоров' типа packed array [1..7] of char.
При добавлении нужного количества пробелов, программа выдаёт "Сидоров". Или по-вашему, это "не тот результат"?
Автор: ЖэКЫЧ 23:04:2008, 05:04
И в правду, всё нормально!
Спасибо всем за помощь!