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

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

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

> Проблема с прогой на линейные списки.
TheKnyazz
сообщение 1.02.2009 19:08
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Alma
сообщение 2.02.2009 21:22
Сообщение #2


Гость






Я конечно прошу прощения. Но у меня аналогичная проблема с программой. Список не сохраняется в файл и при повторном открытии таблица пустая. Я попыталась сделать так, как Вы советовали, но ничего не получается. Не могли бы вы мне подсказать в чем ошибка, а то было уже перепробовано много вариантов и все равно не сохраняется. Спасибо заранее

program lab9;
uses Crt;
type
data =record
nomer:integer;
F,I,O:string[15];
Ocenki:record
math,history,physyc:integer
end;end;
ukaz=^query;
query=record
inf:data;
next:ukaz
end;
spisok = file of data;

var

newE, Left, Right,Temp : ukaz;
Z:data;
key:integer;
tab: spisok;

procedure Escape;
begin
rewrite(tab);
Temp:=left;
while Temp<>nil do begin
with Temp^.Inf do
writeln ( F:10,' ', I:10,' ', O:10,' ',ocenki.math:4,' ',ocenki.history:4,' ',ocenki.physyc:4);
Temp:=Temp^.next;
end;
writeln('press enter'); readln;
close(tab);
clrscr;
end;

procedure Org;
begin
Writeln('procedura organizacii o4eredi');




writeln('dlay vihoda *');
writeln('=========================================');
writeln('vvedite Familiu');
readln(z.F);

if z.F='*' then exit;
writeln('imay');
readln(z.I);
writeln('ot4estvo');
readln(z.O);
writeln('vvedite ocenki');
with z.ocenki do
readln(math,history,physyc);

New(newE);
NewE^.inf.F:=z.F;
NewE^.inf.I:=z.I;
NewE^.inf.O:=z.O;
NewE^.inf.ocenki.math:=z.ocenki.math;
NewE^.inf.ocenki.history:=z.ocenki.history;
NewE^.inf.ocenki.physyc:=z.ocenki.physyc;

newE^.Next:=nil;
right:=newE;
left:=newE;
while true do
begin

writeln('dlay vihoda *');
writeln('=========================================');
writeln('vvedite Familiu');
readln(z.F);
if z.F='*' then exit;
writeln('imay');
readln(z.I);
writeln('ot4estvo');
readln(z.O);
writeln('vvedite ocenki');
with z.ocenki do
readln(math,history,physyc);

New(newE);
NewE^.inf.F:=z.F;
NewE^.inf.I:=z.I;
NewE^.inf.O:=z.O;
NewE^.inf.ocenki.math:=z.ocenki.math;
NewE^.inf.ocenki.history:=z.ocenki.history;
NewE^.inf.ocenki.physyc:=z.ocenki.physyc;

newE^.Next:=nil;
right^.next:=newE;
right:=newE;
end;
end;

procedure Dob;
begin
writeln('dlay vihoda *');
writeln('=========================================');
writeln('vvedite Familiu');
readln(z.F);
if z.F='*' then exit;
writeln('imay');
readln(z.I);
writeln('ot4estvo');
readln(z.O);
writeln('vvedite ocenki');
with z.ocenki do
readln(math,history,physyc);

New(newE);
NewE^.inf.F:=z.F;
NewE^.inf.I:=z.I;
NewE^.inf.O:=z.O;
NewE^.inf.ocenki.math:=z.ocenki.math;
NewE^.inf.ocenki.history:=z.ocenki.history;
NewE^.inf.ocenki.physyc:=z.ocenki.physyc;
newE^.Next:=nil;
if right=nil then
Left:=NewE
else right^.NExt:=newE;
right:=NewE;
end;

procedure Udal;
begin
writeln('udalenie 1 elementa');
writeln('najmite 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

writeln ('elementi o4eredi');
writeln;

temp:=left;

writeln('last_name ', ' ', 'first_name ',' ', 'ot4estvo ', 'math ','history ','physyc');
writeln(' ____________________________________________________________________________ ');
while Temp<>nil do
begin

with Temp^.inf do
writeln ( F:10,' ', I:10,' ', O:10,' ',ocenki.math:4,' ',ocenki.history:4,' ',ocenki.physyc:4);
Temp:=Temp^.Next;

end;
writeln;
writeln(' najmite enter');
readln;
end;

{======================================================================}

begin
assign(tab,'D:\spisok.txt');{$I-}
reset(tab);{$I+}
if IOresult <> 0 then
rewrite(tab);
readln;
right:=nil;
left:=nil;
repeat
ClrScr;
writeln('1 - cozdanie');
writeln('2 - dobavlenie');
writeln('3 - udalenie');
writeln('4 - prosmotr');
writeln('5 - sohranenie');
writeln('6 - vihod');
writeln('______________________');
writeln( 'vvedite punkt menu');
readln(key);
case key of
1:org;
2:dob;
3:udal;
4:prosmotr;
5: escape;
end
until key=6;
end.
 К началу страницы 
+ Ответить 

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


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

 



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