Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Плиз хелп

Автор: nblazhko 29.11.2007 19:12

Нужно написать программу по типо записной книжки,чтобы в нее добовлялось ФИО,телефон и хобби,и чтобы в ней был поиск по телефону,я написал вроде прогу но когда она выводит на показ запись то вместо номера она пишет 0,а при поиске ищет правельный контакт т.е. я задал контакт с номером 465 при поиске ввожу 465 и он находит этот контакт но на экрате все равно 0. Вот программа:

Program Adress_Book;
uses
Crt;
type
AdressItem = record
Fio: String;
Adress: String;
Phone: LongInt;
Ph:LongInt;
end;


var
Book: Array [1..10] of Adressitem;
Nums, I: Byte;
Code: Integer;
C: Char;
Quit: Boolean;
IntToSt:String;
StrNum:String;
Ph:LongInt;
tind:Integer;
Tel:LongInt;

Function Search(TelNum:LongInt):Integer;
Var
Phone:LongInt;
i:Integer;
StrNum:String;
IntToStr:String;
Begin
Phone:=Ph;
Search:=-1;
StrNum:=IntToStr;
for i:=1 to 10 do
If Book[i].Phone=1
Then
Begin
Search:=i;
Break
end;
end;

Procedure New_Item;
var
F, A, Em: String;
Ph: LongInt;
begin
ClrScr;
Inc(Nums);
if Nums > 10 then
begin
Write('MAx kol-vj zapisey!');
exit;
end;

Writeln('Zapis N', Nums); Writeln;
Write('Vvedite FIO: ');
Readln(F);
Write('Vvedite Xobbu: ');
Readln(A);
Write('Vvedite telefon: ');
Readln(Ph);
Writeln;
with Book[Nums] do
begin
Fio := F;
Adress := A;
Phone := Ph;
end;
Write('NEW запись успешно добавлена!');
end;

{ процедура отображения данных отдельной записи }
Procedure List_Item(N: Byte);
begin
if N > Nums then
begin
Write('Nevernui nomer');
exit;
end;

With Book[N] do
begin
Writeln('Zapis N', N); Writeln;
Writeln('FIO: ', Fio);
Writeln('Hobbu: ', Adress);
Writeln('Telefon: ', Ph);
Writeln;
end;
Readln;
end;

begin
Quit := False;
Nums := 0;
repeat
ClrScr;
Writeln('Tel. kniga"');
Writeln('==========================='); Writeln;
Writeln('Zapisi: ');
Writeln('--------------------');
if Nums = 0 then Writeln('Zapisey net')
else
For I := 1 to Nums do
Writeln(I, ' - FIO: ', Book[I].Fio);
Writeln('--------------------'); Writeln; Writeln;
Writeln('''a'' - Dobavit zapis');
WriteLn ('''b'' - Poisk po tel.');
Writeln('Nomer - Pokazat zapis');
Writeln('Esc - Exit');
Writeln;
Write('Vash vubor: ');
C := ReadKey;
case C of
'1'..'9': begin
Val(C, I, Code);
List_Item(I);
end;
'a': New_Item;
'b': begin
Write ('VVedite Tel.: ',Tel);
ReadLn(Tel);
tind:=Integer(Tel);
Search(Tel);
If tind <> -1 then
WriteLn(Search(Tel));

List_Item(i);

WriteLn('Telefon Ne nayden: ');
end;

'1'..'9': Begin
Val (C,I,Code);
end;
#27: Quit := true;
end;
until Quit;
end.

Автор: volvo 29.11.2007 19:40

{ процедура отображения данных отдельной записи }
Procedure List_Item(N: Byte);
...
With Book[N] do begin
Writeln('Zapis N', N); Writeln;
Writeln('FIO: ', Fio);
Writeln('Hobbu: ', Adress);
Writeln('Telefon: ', Phone); { <--- А что у тебя было? }
Writeln;
end;
Readln;
end;

Ты же при заполнении записи записываешь значение только в поле Phone, вот и читай оттуда же... А вообще - программа как будто специально написана на тему "Области видимости и конфликты имен": не стоит вообще пользоваться глобальными переменными, но уж если возникла такая необходимость - дай им имена, отличные от полей записи...