Помощь - Поиск - Пользователи - Календарь
Полная версия: однонаправленые списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
B&M
дан список А, который состоит из записей: первое полее речовинне число, второе поле - адрес следующего елемента,
составить програму для вставки нового елемента Е1 перед последним вжодом елемента Е, если елемент есть в списке А.

maksimla
пример можешь дать ? и программу свою что неполучается
B&M
вот пример ток тут
данный список с целыми числами в информационном поле, изменить все значения елементов списка равных Х увеличить в 5 раз

program 12;
type sp=^elem;
elem=record
info1:=integer;
next:sp;
end;
var beg,p:sp;
n,x:integer; {n=во сколько раз увеличить}
begin
writeln('input x,n');
readln(x,n);
p:=beg;
while p<>nil do
begin
if p^.info=x then
p^.info:=p^.info*n;
p:=p^.next;
end;
writeln('new spisok');
p:=beg;
while p<>nil do
begin
write (p^.info,' ');
p:=p^.next;
end;
readln;
readln;
end.
Eskel
procedure obr(h:ukazat; x:integer);
var r:ukazat;
begin
new®;
r^.next:=h^.next;
h^.next:=r;
r^.ed:=h^.ed;
h^.ed:=x
end;

Вот, к примеру, вставка элемента х(Е1). h-ссылка на Е. Но я делал прогу, которая перед первым Е вставляет... надо подумать как последний Е найти...
B&M
это пример вставки елемента перед к-ым елементом

buf;=p^.info;
p^.info:=pk^.info;
pk^.info:=buf;


p:=pk^.next;
write (p^.info);
pk^.next:=p^next;
B&M
вот посмотрите тут плиз тук какието ошибки


program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type sp=^elem;
elem=record
info1:string[20];
next:sp;
end;
var beg,p,pk,buf:sp;


begin

p:=beg;
while p<>nil do
begin
buf:=p^.info1;
p^.info1:=pk^.info1;
pk^.info1:=buf;
p:=pk^.next;
write(p^.info1);
pk^.next:=p^.next;
end;
dispose(p);
readln; readln;



{ TODO -oUser -cConsole Main : Insert code here }
end.
B&M
{
дан список А, который состоит из записей: первое поле - вещественное число,
второе - адрес следующего элемента. нужно составить программу для вставки нового
элемента Е1 перед последним вхождением элемента Е, если элемент есть в списке А.
}

вотвам ее решение




program p2227;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
PRec = ^TRec;
TRec = packed record
Value: Real; // Значение
NextLink: PRec; // Ссылка на следующий элемент
PrevLink: PRec; // Ссылка не предыдущий элемент
end;

// Функция создания списка и инициализация элементов случайными числами
function MakeList(const Count: Cardinal): PRec;
var
Rec, Next: PRec;
Index: Integer;
begin
New(Rec);
Rec.Value:= Random(100);
Rec.PrevLink:= nil;
Result:= Rec;

Index:= Count - 1;
while Index > 0 do
begin
New(Next); // следующий элемент
Next.Value:= Random(100);
Rec.NextLink:= Next; // Ссылка на следующий элемент
Next.PrevLink:= Rec; // Ссылка не предыдущий элемент
Next.NextLink:= nil;
Rec:= Next;
Dec(Index);
end;
end;

// Освобождение памяти из-под списка
procedure FreeList(var AList: PRec);
var
Rec, Next: PRec;
begin
Rec:= AList;
while Assigned(Rec) do
begin
Next:= Rec.NextLink;
Dispose(Rec);
Rec:= Next;
end;
end;

// Вывод списка на экран
procedure PrintList(const AList: PRec);
var
Rec: PRec;
Count: Cardinal;
begin
WriteLn('List: ');
Rec:= AList;
Count:= 0;

while Assigned(Rec) do
begin
Write(Rec.Value: 8: 2);
Rec:= Rec.NextLink;
Inc(Count);
end;

WriteLn(#13#10' Total count: ', Count);
end;

// Поиск последнего вхождения элемента в списке
function SearchLast(const AList: PRec; const Value: Real): PRec;
var
Rec: PRec;
begin
Rec:= AList;
Result:= nil;

while Assigned(Rec) do
begin
if Rec.Value = Value // Хреновое сравнение, кстати. Числа-то вещественные!
then Result:= Rec;
Rec:= Rec.NextLink;
end;
end;

// Вставка нового элемента перед элементом ARec
procedure InsRec(ARec: PRec; const Value: Real);
var
NewRec: PRec;
begin
New(NewRec);
NewRec.Value:= Value;
NewRec.NextLink:= ARec;
NewRec.PrevLink:= ARec.PrevLink;
ARec.PrevLink.NextLink:= NewRec;
ARec.PrevLink:= NewRec;
end;

var
List, Rec: PRec;
E, E1: Real; // Что вставляем

begin
List:= MakeList(8);
PrintList(List);

Write('Enter "E" to search: ');
ReadLn(E);
Rec:= SearchLast(List, E); // Поиск последнего вхождения элемента Е в список
if Assigned(Rec)
then begin
Write('Element found. Enter "E1" to insert: ');
ReadLn(E1);
InsRec(Rec, E1);
WriteLn('List after insert: ');
PrintList(List);
end
else WriteLn(' Value ', E: 8: 2, ' not found.');


FreeList(List);

Write(#13#10' Press "ENTER" to exit...');
ReadLn;
end.
Lapp
B&M, пожалуйста, прочти Правила Форума и старайся их выполнять (пункт 5).

М
Исправь свои сообщения.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.