PDA

Просмотр полной версии : Списки. Pascal



alexdog
05.04.2008, 21:52
Может ктонибуть помочь с такой задачей?


Списки. Составить процедуру, проверяющая на равенство значения
элементов списков L1 и L2 и подсчитывающей количество одинаковых элементов в
них. Используя данную процедуру, проанализировать пары списков К1 и К2; М1 и М2.
Списки заполнять данными из файла

drummer
06.04.2008, 02:03
как списки хранятся?

alexdog
06.04.2008, 10:54
как списки хранятся?
В задаче конкретно не указанно...

MOTOCoder
06.04.2008, 11:09
Дело в том, что способ хранения значения не имеет: в условии не сказано, что нужно написать процедуру для чтения списков из файла, нужно написать процедуру, оперирующую уже сформированными в памяти списками.

alexdog
06.04.2008, 11:36
Дело в том, что способ хранения значения не имеет: в условии не сказано, что нужно прочитать списки из файла, нужно написать процедуру, оперирующую уже сформированными в памяти списками.

Да, да... ты прав... но как это сделать... может знаешь?

MOTOCoder
06.04.2008, 12:02
Наверное примерно так:

function Compare(R1,R2:PListItem):Boolean;
var
P1,P2:PListItem;
Flag:boolean;
begin
P1:=R1;
P2:=R2;
c:=0;
Flag:=true;
while P1<>nil do
begin
if P1^.Data=P2^.Data then
inc(c)
else
Flag:=False;
P2:=P2^.Link;
P1:=P1^.Link;
end;
Compare:=Flag;
end;


В переменной C будет количество равных элементов.

alexdog
06.04.2008, 12:09
А на паскале как это реализовать...

MOTOCoder
06.04.2008, 12:16
Это и есть паскаль, просто стиль подсветки используется дельфовский.

alexdog
06.04.2008, 12:18
Если несложно посмотри что я сдела... неуверен что правильно:

Program sd;
uses crt;
Type
NameStr=string[20];
Link=^Auto;
Auto=record
Name:nameStr;
S1:integer;
S2:integer;
S3:integer;
Next:Link;
end;
var
P,First:Link; q:^auto;
NamFind:nameStr;
V:0..4;
EndMenu:boolean;
f1,f2: file of Auto;

Procedure open1;
begin
assign(f1,'c:\1.txt');
end;

Procedure open2;
begin
assign(f2,'c:\2.txt');
end;


Function FindName(FN:nameStr):Link;
var
Curr:Link;
begin
Curr:=First;
while Curr<> nil do
if Curr^.Name=FN then
begin
FindName:=Curr;
exit;
end else
Curr:=Curr^.Next;
FindName:=Nil;
end;

Procedure AddFirst(A:Link);
Begin
A^.next:=first;
first:=a;
end;

procedure Delfirst(var a:link);
begin
a:=first;
first:=first^.next;
end;


procedure delAfter(Old:Link; var a:link);
begin
A:=Old^.next;
Old^.next:=old^.next^.next;
end;

procedure sa;
begin
with P^ do begin
p:=new(link);
write('Ќ*§ў**ЁҐ');
readln(P^.name);
write('1 §**зҐ*ЁҐ: ');
readln(P^.S1);
write('2 §**зҐ*ЁҐ: ');
readln(P^.S2);
write('3 §**зҐ*ЁҐ: ');
readln(P^.S3);
addfirst(p);
end; end;

procedure InpAvto;
var z,d:byte;
begin
Writeln('ўўҐ¤ЁвҐ ў Є*Є®© Ё§ бЇЁбЄ®ў ўл е®вЁвҐ ¤®Ў*ўЁвм');
Writeln('1 - ЇҐаўл©(L1) 2 - ўв®а®©(L2)');
readln(d);
if d=1 then begin
open1;
reset(f1);
seek(f1,filesize(f1));
sa;
writeln('‘®еа**Ёвм?');
readln(z);
if z=1 then begin
write(f1,P^);
end;
close(f1);
end;
{end;}

if d=2 then begin
open2;
reset(f2);
seek(f2,filesize(f2));
sa;
writeln('‘®еа**Ёвм?');
readln(z);
if z=1 then begin
write(f2,P^);
end;
close(f2);
end;
end;

procedure myList;
var
curr:link; i,j:byte;
begin
i:=15;
j:=15;
open1;
reset(f1);
curr:=first;
gotoxy(7,13);
writeln('ЇҐаўл© (L1)');
while not(eof(f1)) do begin
read(f1,curr^);
gotoxy(6,i);
writeln(curr^.name);
gotoxy(10,i);
Write(curr^.S1);
gotoxy(13,i);
write(curr^.S2);
gotoxy(16,i);
write(curr^.S3);
curr:=curr^.next;
inc(i);
end;
open2;
reset(f2);
curr:=first;
gotoxy(26,13);
writeln('ўв®а®© (L2)');
while not(eof(f2)) do begin
read(f2,curr^);
gotoxy(26,j);
writeln(curr^.name);
gotoxy(30,j);
Write(curr^.S1);
gotoxy(33,j);
write(curr^.S2);
gotoxy(36,j);
write(curr^.S3);
curr:=curr^.next;
inc(j);
curr:=curr^.next;
end;
readln;
end;


begin
new(p);
endmenu:=false;
repeat
clrscr;
writeln('“Є*¦ЁвҐ ўЁ¤ а*Ў®вл');
writeln('1 - §*ЇЁбм ЇҐаўл¬ ў бЇЁб®Є');
writeln('2 - Їа®б¬®ва ўбҐе бЇЁбЄ®ў');
writeln('0 - ЋЄ®*з**ЁҐ а*Ў®вл');
readln(v);
case v of
1:inpAvto;
2:Mylist;
end;
else
endMenu:=true;
end;
until endMenu;
dispose(p);
end.

Serge_Bliznykov
06.04.2008, 12:26
alexdog, ВЫ НАРУШАТЕ ПРАВИЛА! зачем Вы создали одну и ту же тему в разных разделах? чтобы часть сообщений прочитать там, часть здесь!??! или чтобы помогающих Вам запутать?..
Рекомендую, свой написанный код из второй темы кинуть сюда. а тут тему закрыть/забыть как страшный сон!! и больше так не делать!

сорри. пока собирался ответить, мой пост потерял акуальность...

Serge_Bliznykov
06.04.2008, 12:58
alexdog,
кстати, сразу, что бросилось неприятно в глаза.
объявление переменных, с точки зрения языка абсолютно верное,
но вот смысла так делать я не вижу:

var
P,First:Link; q:^auto;
тут все переменные ОДНОГО типа...
ага. вижу...
q просто не используется нигде. надо это безобразие убрать.

Impulsive
07.04.2008, 22:45
Списки - Pascal.
Описать процедуру или функцию, которая добавляет в конец списка L1 все элементы списка L2.
Хелп!!!

Serge_Bliznykov
07.04.2008, 23:21
Impulsive, создайте, пожалуйста новую тему. там и поговорим.
и, кстати, не забудьте привести ваш код/ваши наработки, или, как минимум, опишите Ваши типы данных и поясните, в чём проблема? вообще, в общем случае однонаправленного списка, достаточно в последнем элементе первого списка сделать ссылку на первый элемент второго. и всё!