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

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

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

 
 Ответить  Открыть новую тему 
> Создание поиска, в записной книге
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

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

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


Строки
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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



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


Новичок
*

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

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


Цитата

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



Уже читаю "Строки"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.11.2020 12:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name