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

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

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

 
 Ответить  Открыть новую тему 
> Телефонный справочник, Помогите найти ошибку :)
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19

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


Была написана програмка, простейший тел.справочник(поиск владельца по номеру и наоборот).Она правильная:
Код

program lab12_1;
uses crt;
type
sprav=record
name:string;
num:integer;
end;
var
y:array [1..5] of sprav;
z,x,i:integer;
n:string;
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do begin
if i=6 then begin
writeln('Error!');
readln;
break;
end;
 if n=y[i].name then begin    {n-name}
 writeln(y[i].num);
 break;
 end else continue;
 end;end;
procedure nom;
begin
writeln('enter the number');
readln(x);
for i:=1 to 6 do begin
if i=6 then begin
writeln('Error!');
readln;
break;
end;
 if x=y[i].num then begin            {x-number}
 writeln(y[i].name);
 break;
 end else continue;
 end;end;
begin
clrscr;
with y[1] do begin
name:='man1';
num:=1;
end;
with y[2] do begin
name:='man2';
num:=2;
end;
with y[3] do begin
name:='man3';
num:=3;
end;
writeln('Enter the way of the search:');
writeln('1.by the name');
writeln('2.by the number');
readln(z);
if z=1 then nam;
if z=2 then nom;
readln;
end.

Теперь надо её передалать, используя в качестве баз данных,два текстовых файла(имена и телефоны).Но что-то не получается sad.gif
Код

program lab12_2;
uses crt;
type
sprav=record
name:string;
num:integer;
end;
var
y:array [1..5] of integer;
z,x,i:integer;
n,l:string;
a,b:text;
procedure nam;
begin
assign(a,'c:\dos\files\spr.dat');  {file name}
writeln('enter the name');
reset(a);
for i:=1 to 6 do begin
if i=6 then begin
close(a);
writeln('Error!');
readln;
break;
end;
 if n=l[i] then begin
 close(a);
 writeln(y[i]);
 break;
 end else continue;
 end;end;
procedure nom;
begin
writeln('enter the number');
readln(x);
for i:=1 to 6 do begin
if i=6 then begin
close(a);
writeln('Error!');
readln;
break;
end;
 if x=y[i] then begin
 close(a);
 writeln(y[i]);
 break;
 end else continue;
 end;end;
begin
clrscr;
assign(a,'c:\dos\files\f.dat');         {file number}
reset(a);
for i:=1 to 5 do begin
readln(a,l[i]);
readln(a,y[i]);
end;
writeln('Enter the way of the search:');
writeln('1.by the name');
writeln('2.by the number');
readln(z);
if z=1 then nam;
if z=2 then nom;
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Прогрессор
****

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

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


Так надо файлы не текстовые, а типизированные брать!
a,b:file of sprav;

Не важно, какие файлы!!

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


Новичок
*

Группа: Пользователи
Сообщений: 19

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


Atos
Попробую...

не стоит время тратить. Типизированные файлы ничего не дадут!

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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Дело не в файлах. Любые можно... надо разобраться... щас я скопирую текст, разберусь в нем, и попробую найти ошибку ...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


УЖАС!!!
Код
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do
begin
 if i=6 then
 begin
  writeln('Error!');

Зачем сознательно ошибку делать???
Ведь цикл for i:=1 to 6 повторится до момента, когда i=6, и будет ошибка!
Зачем??
А не проще так найти номер? :
Код
procedure nam;
begin
writeln('enter the name');
readln(n);
for i:=1 to 6 do  if n=y[i].name then  writeln(y[i].num);
end;

Эта функция найдет номер по заданнумо номеру!
Про вторую фугкцию не говорю, там такой-же бред. Щас исправлю.
И вообще может задание полное дадите?
И еще можно аську... smile.gif ;)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Нет, девушка, вам просто необходимо со мной пообщаться по аське...
просто я в шоке...
я уже модератор полгода, но такого не видел, вы уж извините меня, такого ... просто мне как-то не по себе стало ...
Код
for i:=1 to 5 do begin
readln(a,l[i]);
readln(a,y[i]);
end;

Но переменная l описанна как строка!
Что вы этим хотите сделать? Бред, такое вообще компилироваться не должно!
Давайте задание, я вам ВСЮ программу сделаю как надо! А то исправлять это просто нет сил ... еще я вам все объясню, сделаю везде где нужно коментарии, и объяснб работу программы.
И заодно я вам объясню кое-что относительно файлов, вы немного запутались. ОК?

Сообщение отредактировано: Oleg_Z -


Прикрепленные изображения
Прикрепленное изображение

--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


ВОТ:

Код

Program DataBase;
uses crt;
Const
MaxRec=10;
Type
REC=record
     Name:string;
     Number:string[8];
    end;
aRec=array[1..MaxRec] of rec;

Procedure ReadBD(var DBB:aREC);
Var
I:byte;
S:string;
f:text;
Begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
reset(f);
for i:=1 to MaxRec do
begin
 with DBB[I] do
 begin
  readln(f,name);
  readln(f,number)
 end
end;
close(f)
end;

Procedure SaveBD(DBB:aRec);
var
I:byte;
f:text;
s:string;
begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
rewrite(f);
for i:=1 to MaxRec do
begin
 with DBB[I] do
 begin
  writeln(f,name);
  writeln(f,number)
 end
end;
close(f);
writeln('Сохраненно! нажмите любую клавишу ...');
readkey
end;

Procedure EnterBD(var DBB:aRec);
var
i:byte;
begin
for i:=1 to MaxRec do
begin
 with DBB[i] do
 begin
  write('Enter name:');
  readln(name);
  write('Enter numbel:');
  readln(number)
 end
end
end;

Procedure PrintBD(DBB:aRec);
var i:byte;
begin
for i:=1 to MaxRec do
begin
 writeln(i,'. NAME= ',DBB[I].NAME);
 writeln('Number = ',DBB[I].NUMBER);
end;
writeln('нажмите любую клавишу ...');
readkey
end;

Procedure NAM(DBB:Arec);
var i:byte;
s:string;
begin
writeln('введите имя для поиска');
readln(s);
for i:=1 to MaxRec do if DBB[i].name=s then writeln(DBB[i].number);
writeln(' нажмите любую клавишу ...');
readkey
end;

Procedure NUM(DBB:Arec);
var i:byte;
s:string[8];
begin
writeln('введите номер для поиска');
readln(s);
for i:=1 to MaxRec do if DBB[i].number=s then writeln(DBB[i].name);
writeln('нажмите любую клавишу ...');
readkey
end;


var
c:byte;
a:ARec;
Begin
repeat
 Clrscr;
 writeln('Что сделать?'); writeln;
 writeln('1. Ввод базы вручную');
 writeln('2. ввод базы из файла');
 writeln('3. сохранение базы в файле');
 writeln('4. Вывод базы на экран');
 writeln('5. поиск по имени');
 writeln('6. Поиск по номеру'); writeln;
 writeln( 'ВЫХОД - нажмите Esc!');
 c:=ORD(readkey);
 case c of
  49: EnterBD(A);
  50: ReadBD(a);
  51: SaveBD(a);
  52: PrintBD(A);
  53: NAM(A);
  54: NUM(A);
 end;
 Until c=27;
end.

Заначит так ... вот я тут кое-что наклепал ...

Procedure ReadBD(var DBB:aREC);
Эта процедура загружает базу из файла. Структура файла:
Код

name1
number1
name2
number2
...
nameMAXREC
numberMAXREC


Procedure SaveBD(DBB:aRec);
Сохранение в файл. Получается файл вышеуказанной схемы
Procedure EnterBD(var DBB:aRec);
ввод бызы вручную.Программа предлагает ввести имя, пользователь вводит имя,
программа предлагает ввести номер пользователь вводит номер и так делее.

Procedure PrintBD(DBB:aRec);
Вывод на экран базы.
Procedure NAM(DBB:Arec);
Поиск по имени, телефона
Procedure NUM(DBB:Arec);
Поиск по номеру имени.
Так ... что-от еще хотел ... а да, могу вообще для ВАС, такую базу сделать!
smile.gif
С динамическими структурами, анимационным меню, под win32!!
;)

Сообщение отредактировано: Oleg_Z -


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 239
Пол: Женский
Реальное имя: Юлия

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


Oleg_Z

[offtop]
Олежка тебе цены нет!! wub.gif
[/offtop]


--------------------
For every evil under the sun
There is a remedy or there is none
If there is one - try to find it
If there is none - never mind it!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Чего ради девушек не сделаешь! :p2:

А кто под гуестом??

Сообщение отредактировано: Oleg_Z -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






А если туда добавить
1 вожможность удаления записей из базы
2 не ограничивать базу до 10ти записей
3 возможность добавления новых записей в базу не удаляя старой!!!!
4 сортировку по имени и телефону

так можно? =)
 К началу страницы 
+ Ответить 

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

 





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