Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ ЗАДАЧА О СПИСКЕ

Автор: ZUY 20.11.2007 2:18

я так написал эту программуsad.gifсписок)

uses crt;
type
point=^x;
x=record
data:integer;
next:point
end;
Var f1,f2:text;
l,l1:point;
procedure input_list (var l:point);
var
p,q:point;
a:integer;
begin
writeln(maxavail,' ',memavail);
reset(f1);
read(f1,a);
new (p);
p^.next:=nil;
p^.data:=a;
l:=p;
writeln(maxavail,' ',memavail,' ',a);
while not eof (f1) do
begin
read(f1,a);
new(q);
q^.next:=nil;
q^.data:=a;
p^.next:=q;
p:=q;
writeln(maxavail,' ',memavail,' ',a);
end;
end;

procedure output_list (var l:point);
var
p:point;
a:integer;
begin
p:=l; rewrite(f2);
while p <> nil do
begin
a:=p^.data;
writeln('element of file',a);
p:=p^.next;
end;
close (f2);
end;

PROCEDURE DESTROY(L:POINT);
VAR P,Q:POINT;A:integer;
BEGIN
P:=L;
WHILE P<>NIL DO
begin
Q:=P;
P:=P^.NEXT;
A:=Q^.DATA;
DISPOSE(Q);
WRITELN(A,' ',MAXAVAIL,' ',MEMAVAIL, ' dispose');
END;
end;
Function copy_list(l:point):point;
var item:point;
begin
new (item);
copy_list:=item;
while l<>nil do
begin
writeln(maxavail, ' ' ,memavail,' copy data',l^.data);
item^.data:=l^.data;
l:=l^.next;
if l<>nil then
begin
new (item^.next);
item:=item^.next;
end
else
item^.next:=nil;
end;
end;

begin
clrscr;
assign ( f2,'out.dat');
assign (f1,'in.dat');
input_list(l);
output_list(l);
l1:=copy_list(l);
output_list(l);
output_list(l1);
DESTROY(L);
destroy(l1);
writeln(maxavail,' ' ,memavail);
end.

нет ошибок!
но я хочу узнать:
1) когда я состоил список (5 элеметов):1 2 3 4 5,почему ещё есть 0 ?
2) когда мой список состоил из 6 элементов или больше, почему программ работает не точно ?
""copy и paste и run эту задачу! и оъбисните мне пожалуйста!!""

Автор: Boss 20.11.2007 3:24

Посети сначала:http://forum.pascal.net.ru/index.php?showtopic=20054
Не читал, но может проблема в загружаемых файлах?? Может ты записываешь элементы с 0 до 5?!

Автор: мисс_граффити 20.11.2007 5:51

Совсем сначала - правила раздела.
Имхо, лучше использовать типизированные файлы в данном случае. Или хотя бы прикрепить те, на которых проверяешь.

Автор: ZUY 21.11.2007 6:08

спасибо моим друзьям!

Автор: ZUY 21.11.2007 11:58

Сейчас я только не понимаю :
Почему когда я состоил file.dat (5 элементов) 1 2 3 4 5 ,то программ читал ещё 0. Но когда состоил file.txt ,он нормально работает. Объясните пожалуйста!!! чем быстрее, тем лучше!

Автор: Lapp 21.11.2007 12:43

Дело не в расширении. Обрати внимание на пустую строку после твоих данных.
Вот такой файл:

Код
1 2 3 4 5

- получается без нуля, а вот такой:
Код
1 2 3 4 5


- с нулем.

Автор: volvo 21.11.2007 16:35

А чтобы НЕ обращать внимание на пустые строки - пользуйся не EOF(), а SeekEOF:

procedure input_list (var l:point);
...
while not Seekeof (f1) do { <--- Вот тут }
...