Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 20:59   #1
neon0858
 
Регистрация: 18.05.2009
Сообщений: 3
По умолчанию помогите с работой с односвязными списками Паскаль

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

задание

Реализовать динамическую структуру, указанную в варианте с помощью указателей в динамической области памяти.

Данные из файла «результаты сессии ФИТ» (код группы, ФИО, оценки за экзамены) ввести в динамический список, упорядоченный по ФИО в каждой группе. Удалить из списка всех неуспевающих, предварительно вывести на экран.


листинг Что-то происходит не так с процедурами del и vivod_s

program Project2;
uses crt;

type uk=^elem;
elem=record
inf_c:integer;
inf_f:string;
inf_o:integer;
next:uk;
end;
var beg,tail,temp:uk;


type
Product = record
c: integer;
f: string;
o: integer;
end;

type fail = file of product;

var f1:fail;
spr: product;
otv:char;
n,n1:integer;


{----------------------------------------------------------------------}
procedure tabl;
begin
writeln;
writeln('-----------------------------------------------');
writeln('| Code | Fio | Ocenki |');
writeln('-----------------------------------------------');
reset(f1);
while not eof(f1) do
begin
read(f1,spr);
with spr do
write('|',c:11,' |',f:11,' |',o:11,'|');
writeln;
end;


writeln('-----------------------------------------------');
close(f1);
end;
{-----------------------------------------------------------------------}

procedure sort ;
var tail,temp:uk;
x:string;
y,w:integer;
begin
y:=0;
w:=0;
temp:=beg;
while temp<>nil do
begin
tail:=temp;
while tail<>nil do
begin
if tail^.inf_f<temp^.inf_f then
begin
x:=tail^.inf_f;
y:=tail^.inf_o;
w:=tail^.inf_c;
tail^.inf_f:=temp^.inf_f;
tail^.inf_o:=temp^.inf_o;
tail^.inf_c:=temp^.inf_c;
temp^.inf_f:=x;
temp^.inf_o:=y;
temp^.inf_c:=w;
end;
tail:=tail^.next;
end;
temp:=temp^.next;
end;
end;


{----------------------------------------------------------------------}




procedure vivod;
var temp :uk;
begin
temp:=beg ;
writeln;
writeln('-----------------------------------------------');
writeln('| Code | Fio | Ocenki |');
writeln('-----------------------------------------------');
while temp<>nil do
begin
writeln('|',temp^.inf_c:15,'|',temp ^.inf_f:15,'|',temp^.inf_o:15,'|');
temp:=temp^.next;
end;
writeln('-----------------------------------------------');
end;

{__________________________________ ______________________________}
procedure vivod_s;
var temp:uk;
begin
temp:=beg ;
writeln;
writeln ('spisok neyspevayschih');
writeln('-----------------------------------------------');
writeln('| Code | Fio | Ocenki |');
writeln('-----------------------------------------------');
while temp<>nil do
begin
if temp^.inf_o<3 then
begin
writeln('|',temp^.inf_c:15,'|',temp ^.inf_f:10,'|',temp^.inf_o:10,'|');
temp:=temp^.next;
end;
end;
writeln('-----------------------------------------------');
end;

{----------------------------------------------------------------------}



procedure del (var beg:Uk);
var p1, p,w:Uk;
flag:boolean;
procedure Del_beg(var p:Uk);
begin
w:=beg;
beg:=beg^.next;
dispose(w);
p:=beg;

end;

procedure del_for_Him (p:Uk);
begin
w:=p^.next;
p^.next:=p^.next^.next;
dispose(w);
end;
begin
p:=beg;
flag:=true;
repeat
if p^.inf_o<3 then
if flag then
Del_beg(p)
else
Del_for_him(p1)
else
begin
p1:=p;
p:=p^.next;
flag:=false;
end;
until p=nil;
end;













{----------------------------------------------------------------------}
BEGiN
clrscr;
Assign(f1,'C:\ssesia.dat');
rewrite(f1);
repeat
with spr do
begin
randomize;
new(temp);
writeln('code');
readln(c);
writeln('fio');
readln(f);
writeln('ocen');
readln(o);

temp^.inf_c:=c;
temp^.inf_f:=f;
temp^.inf_o:=o;
temp^.next:=beg;
beg:=temp;

end;
write(f1,spr);
writeln('prodolsh(y/n)');
readln(otv);
until upcase(otv)='N';
close(f1);

tabl;
readln;
sort;
writeln;
vivod;
writeln;
vivod_s;
readln;
del(beg);
vivod;
readln;
end.







зарание спасибо)
neon0858 вне форума Ответить с цитированием
Старый 18.05.2009, 21:44   #2
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

в Del несмотря на зопоминание элемента, ты удаляешь именно его, а не копию данных. надо так:
(если список p1->p2->p3)
Код:
w:=p2;
p1^.next:=p3
dispose(w);
Упс...
L_M вне форума Ответить с цитированием
Старый 18.05.2009, 22:00   #3
neon0858
 
Регистрация: 18.05.2009
Сообщений: 3
По умолчанию

попробывал,ничего путно не дало(
neon0858 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с работой COM порта на Delphi7 sttauffen Помощь студентам 3 11.05.2009 15:02
Работа со списками (паскаль) ge4r Помощь студентам 9 29.03.2009 12:47
Помогите пожалуйста со списками... Horknee Паскаль, Turbo Pascal, PascalABC.NET 10 22.12.2008 16:21
Проблема с работой с файлами (Паскаль) ReaktiV Помощь студентам 27 09.11.2008 10:30