IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

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

> Создание поиска, в записной книге
Slim
сообщение 2.06.2007 12:44
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Сделал индивидуалку - Записная книжка!
Пришёл сдавать, препод сказал что необходим ещё поиск!

Как создать поиск "по телефону"?
(Ввожу номер телефона который уже есть в базе данных, и программа выводит на экран, все данные которые находяться в записити с введенным телефоном.)

Сама программа без поиска:

Код
Program Adress_Book;  
uses
Crt;  
type  
AdressItem = record  
Fio: String;  
Adress: String;  
Phone: LongInt;  
Email: String;  
end;  

var  
Book: Array [1..10] of Adressitem;  
Nums, I: Byte;  
Code: Integer;  
C: Char;  
Quit: Boolean;  

{ процедура добавления новой записи }  
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('Запись N', Nums); Writeln;  
Write('Введите FIO: ');  
Readln(F);  
Write('Введите адресс: ');  
Readln(A);  
Write('Введите телефон: ');  
Readln(Ph);  
Write('Введите E-mail: ');  
Readln(Em);  
Writeln;  
with Book[Nums] do  
begin  
Fio := F;  
Adress := A;  
Phone := Ph;  
Email := Em;  
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('Запись N', N); Writeln;  
Writeln('ФИО: ', Fio);  
Writeln('Aдрес: ', Adress);  
Writeln('Tелефон: ', Phone);  
Writeln('E-mail: ', Email);  
Writeln;  
end;  
Readln;  
end;  

begin  
Quit := False;  
Nums := 0;  
repeat  
ClrScr;  
Writeln('Книга"');  
Writeln('==========================='); Writeln;  
Writeln('Записи: ');  
Writeln('--------------------');  
if Nums = 0 then Writeln('Записей НЕТ. Книжка пуста.')  
else  
For I := 1 to Nums do  
Writeln(I, ' - ФИО: ', Book[I].Fio);  
Writeln('--------------------'); Writeln; Writeln;  
Writeln('''a'' - добавить запись');
[B]WriteLn ('''b'' - найти запись по телефону');  [/B]
Writeln('Номер - показать запись');  
Writeln('Esc - выход');  
Writeln;  
Write('Ваш выбор: ');  
C := ReadKey;  
case C of  
'1'..'9': begin  
Val(C, I, Code);  
List_Item(I);  
end;  
'a': New_Item;  
#27: Quit := true;  
end;  
until Quit;  
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
Ozzя
сообщение 2.06.2007 12:56
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Строки
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Slim
сообщение 7.06.2007 10:48
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Верно ли ?

Код
WriteLn ('''b'' - найти запись по телефону');


Код
function Search(TelNum : LongInt):integer;
var
i : integer;
begin
Result := -1;
for i:=1 to 10 do
   if Book[i].Phone = TelNum then
   begin
      Result:= i;
      break;
   end;
end;


и

Код
case C of  

'b': begin
Write('Введите телефон: ');  
Readln(Ph);  
  
//ind : integer;
  ind := Search(Ph);
  if ind <> -1 then
WriteLn(Rezult);

'1'..'9': begin  
Val(C, I, Code);  
List_Item(I);


else
   Writeln('Телефон не найден');
end;


Сообщение отредактировано: Slim - 7.06.2007 10:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2007 10:59
Сообщение #4


Гость






Лучше, наверное, так:
ind := Search(Ph);
if ind <> -1 then
WriteLn(Book[ind].FIO); { <--- Ну, или что там ты хочешь выводить... }
 К началу страницы 
+ Ответить 
Slim
сообщение 10.06.2007 18:36
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Код
function Search(TelNum : LongInt):integer;
var
i : integer;
begin
Result := -1;
for i:=1 to 10 do
   if Book[i].Phone = TelNum then
   begin
      Result:= i;
      break;
   end;
end;


Rezult - это Дельфа!
А как написать поиск без Rezult?
Прочитал про строки - не помогло!
И ещё желательно, сделать умный поиск!Чтоб вводишь первые две цифры телефона, он мне выводит ту запись где совпадают первые две цифры!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.06.2007 18:40
Сообщение #6


Гость






function Search(TelNum : LongInt):integer;
var i : integer;
begin
Search := -1; { <--- Вместо Result }
for i:=1 to 10 do
if Book[i].Phone = TelNum then
begin
Search:= i; { <---}
break;
end;
end;



Цитата
И ещё желательно, сделать умный поиск!
Сделай... Все, что надо для этого - точно знать, сколько цифр содержится в каждом номере телефона. Или перейти к представлению телефона в виде строк...
 К началу страницы 
+ Ответить 
Slim
сообщение 10.06.2007 18:56
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Цитата

Сделай... Все, что надо для этого - точно знать, сколько цифр содержится в каждом номере телефона. Или перейти к представлению телефона в виде строк...



Уже читаю "Строки"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Slim
сообщение 13.06.2007 17:15
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Код
Function Search(TelNum:LongInt):Integet;
Var
i:Integer;
StrNum:String;
Begin
Search:=-1;
StrNum:=IntToStr(TelNum);
for i:=1 to 10 do
If Pos(StrNum,IntToStr(Book[i].Phone))=1 - думаю здесь ошибка
Then
Begin
Search:=i;
Breake
end;
end;

Case C of
"b": begin
Write ('Введите телефон:  ');
ReadLn(Ph);
//ind:Integer
ind:=Search(Ph);
If ind <> -1 then
WriteLn(Search);

'1'..'9': Begin
Val (C,I,Code);
List_Item(i);
Else
WriteLn('Телефон не найден: ');
end;


Верно ли?Если нет, обьясните пожалуйсто, где и почему не правильно.

Сообщение отредактировано: Slim - 13.06.2007 17:17
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"