1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Нужно написать программу по типо записной книжки,чтобы в нее добовлялось ФИО,телефон и хобби,и чтобы в ней был поиск по телефону,я написал вроде прогу но когда она выводит на показ запись то вместо номера она пишет 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.
{ процедура отображения данных отдельной записи } 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, вот и читай оттуда же... А вообще - программа как будто специально написана на тему "Области видимости и конфликты имен": не стоит вообще пользоваться глобальными переменными, но уж если возникла такая необходимость - дай им имена, отличные от полей записи...