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

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

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

> Проблема с прогой на линейные списки.
сообщение
Сообщение #1


Новичок
*

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

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


Здравствуйте!Я очень внимательно прочитал ваш достаточно качественный ЧаВо по файлам и динамическим спискам, но тут проблема, я не знаю куда прилепить процедуру закрытия файла, чтоб в моем ткст файле сохранялись мои записи в таблицу, и при следующем запуске программы, я мог загрузить из файла значения, и продолжить работу со старыми данными. Так же небольшая проблема с пониманием такой строки моего задания "создать процедуру, которая вставляет в список L новый элемет Е1, за каждым вхождением элемента Е"
Я просто не понимаю, что это значит. У нас была только 1 лекция по этой теме, но это нам не обьясняли, а на следующее практическое задание тянуть готовую лабу. Обьясните пожалуйста, что оно такое.

Вот мой исходник.

Program lab9;
Uses Crt;
Type
Data= Record
num:byte;
FIO:string[15];
year: integer;
sex: char;
stat: string[11];
child: byte;
salary: integer;
End;
Ukaz=^Query;
Query=Record
Inf:Data;
Next:Ukaz
End;
Var
NewE,Left,Right,Temp:Ukaz;
Z:Data;
Key:byte;
f:text;

Procedure Org;
var i: integer;
Begin
clrscr;
reset (f);
Writeln('vypolnyaetsya procedura organizacii ocheredi');
write ('zagruzka dannyh iz faila');
for i:= 1 to 7 do
begin
delay (300);
write ('.')
end;
writeln;
writeln ('zagruzka zavershena');
readln;
Writeln('======================================== ');
with z do
Readln(f,num,Fio,year,stat,sex,child,salary);
New(NewE);
NewE^.Inf.num:=Z.num;
NewE^.Inf.Fio:=Z.Fio;
NewE^.Inf.year:=Z.year;
NewE^.Inf.stat:=Z.stat;
NewE^.Inf.sex:=Z.sex;
NewE^.Inf.child:=Z.child;
NewE^.Inf.salary:=Z.salary;
NewE^.Next:=nil;
Right:=NewE;
Left:=NewE;
While not eof(f) Do
Begin
with z do
Readln(f,num,Fio,year,stat,sex,child,salary);
New(NewE);
NewE^.Inf.num:=Z.num;
NewE^.Inf.Fio:=Z.Fio;
NewE^.Inf.year:=Z.year;
NewE^.Inf.stat:=Z.stat;
NewE^.Inf.sex:=Z.sex;
NewE^.Inf.child:=Z.child;
NewE^.Inf.salary:=Z.salary;
NewE^.Next:=Nil;
Right^.Next:=NewE;
Right:=NewE
End
End;
Procedure Dob;
Begin
Writeln('vvedite №');
Readln(Z.num);
Writeln('vvedite familiyu');
Readln(Z.Fio);
If Z.Fio='*' Then Exit;
Writeln('vvedite god rojdeniya');
Readln(Z.year);
Writeln('vvedite pol');
Readln(Z.sex);
writeln ('vvedite status');
readln (z.stat);
Writeln('vvedite kolichestvo detei');
Readln(Z.child);
Writeln('vvedite zarplatu');
Readln(Z.salary);
New(NewE);
NewE^.Inf.num:=Z.num;
NewE^.Inf.Fio:=Z.Fio;
NewE^.Inf.year:=Z.year;
NewE^.Inf.stat:=Z.stat;
NewE^.Inf.sex:=Z.sex;
NewE^.Inf.child:=Z.child;
NewE^.Inf.salary:=Z.salary;
NewE^.Next:=nil;
If Right=Nil Then
Left:=NewE
Else
Right^.Next:=NewE;
Right:=NewE;
End;

Procedure Udal;
Begin
Writeln('isklyuchaetsya golovnoi element ocheredi');
Writeln('press Enter');
Readln;
If Left<>Nil Then
Begin
Temp:=Left;
Left:=Left^.Next;
Dispose(Temp);
If Left=Nil Then
Right:=Nil;
End
End;

Procedure Prosmotr;
Var i:integer;
Begin
if left=nil then
begin
writeln ('spisok pustoi');
readln;
clrscr;
exit
end
else
Writeln('ochered soderjit sleduyuschie elementy');
Temp:=Left;
While Temp<>nil Do
Begin
Writeln(Temp^.Inf.num,' ',Temp^.Inf.Fio,' ',Temp^.Inf.year,' ',Temp^.Inf.sex,' ',
Temp^.Inf.stat,' ',Temp^.Inf.child,' ',Temp^.Inf.salary);
Temp:=Temp^.Next;
End;
Writeln('press Enter');
Readln;
clrscr;
End;

procedure my_var;
Begin
End;

begin
assign (f,'d:\lab9.txt');
{$I-};
reset(f);
{$I+};
if IOResult=0 then
writeln ('file opened successfully')
else
begin
writeln ('no input file');
readln;
exit;
end;
Right:=Nil;
Left:=Nil;
ClrScr;
while true do
begin
Writeln('1-organizaciya spiska');
Writeln('2-dobavlenie elementa');
Writeln('3-udalenie elementa');
Writeln('4-prosmotr spiska');
writeln('5-moe zadanie');
Writeln('6-vyhod');
Writeln('-------------------------------');
readln(key);
Case Key Of
1 : Org;
2 : Dob;
3 : Udal;
4 : Prosmotr;
5 : my_var;
6 : EXIT;
End;
end;
End.




Основные ф-ции работают вроде, а вот чтоб сохранять данные, не получается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Мне ввести еще одну ссылочную переменную специально для того, чтобы сохранить в ней первый элемент?
Не вот у тебя когда происходит просмотр списка, ты делаешь так:
  Writeln('ochered soderjit sleduyuschie elementy');
Temp:=Left;
While Temp<>nil Do ...
, то есть, Temp у тебя - именно дополнительная переменная, которая используется только для того, чтобы пробежать по списку, основная же переменная (Left) не изменяется... Здесь (при сохранении списка) почему-то Left-а и в помине нет (а вдруг я выберу "выход" сразу же после просмотра списка, когда Temp = nil? Опять ничего не сохранится). Сделай и здесь то же самое: сначала Temp := Left, а потом - все остальное...

+ к этому, я ж сказал, что еще надо сделать: надо список не только сохранить, но и память, им занимаемую, освободить. Не привыкай делать "чтобы как-то отработало", если память выделялась (а она выделялась, в частности - в процедуре Org, при создании списка) - она должна быть удалена. На каждый New должен быть свой Dispose.

Цитата
Когда я дописываю exit после clrscr В процедуре escape, почему-то меня не хочет выкидывать из программы.
А что, должно? Exit завершает текущую процедуру, а не программу вообще-то... Добавь этот самый Exit не внутрь Escape, а
Case Key Of
1 : Org;
2 : Dob;
3 : Udal;
4 : Prosmotr;
5 : my_var;
6 :
begin
Escape;
Exit; { <--- Вот сюда }
end;
End;
, собственно, он там и был, чего ты убрал его оттуда - непонятно...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
TheKnyazz   Проблема с прогой на линейные списки.   1.02.2009 23:08
volvo   Перед тем, как выйти из программы (при выборе 6-го…   1.02.2009 23:21
TheKnyazz   Что-то я зашел в тупик. Из ваших слов procedure Es…   2.02.2009 0:20
volvo   Не-а... Я сказал: , это делается Rewrite-ом... И з…   2.02.2009 0:31
TheKnyazz   Я надеюсь, ты сохранил где-то указатель на начало…   2.02.2009 1:47
volvo   Не вот у тебя когда происходит просмотр списка, ты…   2.02.2009 2:00
TheKnyazz   Вас понял, из-за таких "гениев" как я пр…   2.02.2009 2:50
Alma   Я конечно прошу прощения. Но у меня аналогичная пр…   3.02.2009 1:22
volvo   Я советовал записывать в файл, а не выводить на эк…   3.02.2009 1:39
Гость   Разница заметна, спасибо, сама не увидела:) Единст…   3.02.2009 2:17
volvo   Потому что в исходной программе работа была с текс…   3.02.2009 2:30
Гость   сохранит данные в файл, главное потом правильно и…   3.02.2009 3:04
volvo   А если написать эту процедуру правильно? Вот так, …   3.02.2009 3:19
Гость   Спасибо огромное. Вы очень мне помогли   3.02.2009 3:37


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

 





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