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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2017, 22:57   #1
Anastasea_
 
Регистрация: 12.02.2017
Сообщений: 2
По умолчанию Работа со списками

Помогите пожалуйста начинающий программист, но полный ноль пока, а лабы сдавать надо
Объясните, пожалуйста, что нужно переделать, что бы написать программу формирования списка, удаления элемента и вывода списка на печать.



Код:
program Project2;

{$APPTYPE CONSOLE}


uses
  SysUtils;

type
//Тип основных данных.
TData = Integer;
//Тип указателя на элемент списка.
El = ^Zap;
//Тип элемента списка.
Zap = record
Data : TData; //Основные данные.
PNext : El; //Указатель на следующий элемент списка.
end;


//Тип, описывающий однонаправленный список.
var
PFirst, P, Q , T : EL;


//формирование пустого списка
PROCEDURE CREATE_EMPTY_LIST ( VAR  pFIRST : EL);
BEGIN
   pFIRST := NIL;
END;
 //формирование  очередного элемента списка
PROCEDURE CREATE_NEW_ELEM(VAR P: EL);                               
Begin 
 New(P );
 Writeln ('vvedite znachenie pervogo inf polya: ');
  Readln ( P^.data );

  P^.pNEXT := NIL;
 { все поля элемента должны быть инициализированы } 
End;

//Добавление элемента в конец однонаправленного списка.
procedure Add(var   aData : TData);
var
PElem : El;
begin
New(PElem);
PElem^.Data := aData;
PElem^.PNext := nil;
if PFirst = nil then
PFirst := PElem
else
PFirst^.PNext := PElem;
PFirst := PElem;
end;

//удаление элемента из конца списка
//Удаление элемента из конца списка.
// Нужен запрос на удаление
PROCEDURE DEL_END_LIST( VAR FIRST :EL);

BEGIN 
IF FIRST <> NIL THEN
BEGIN
IF  FIRST^.PNEXT = NIL THEN
BEGIN
P := FIRST;
DISPOSE (P);
FIRST := NIL;
END
ELSE
BEGIN
Q := FIRST;
T := FIRST;
WHILE Q^.PNEXT <> NIL DO
BEGIN
T := Q;
Q:=Q^.pNEXT;{переход к следующему элементу}
END;
DISPOSE  (Q);
T^.pNEXT := NIL;
END
END
ELSE
WRITELN ('spisok pyst, delete ilementa nevozmogno  ');
END;



//Удаление однонаправленного списка из памяти и инициализация.
procedure Free(var aList: El);
var
PNext, PDel : El;
begin
PNext := PFirst;
while PNext <> nil do begin
PDel := PNext;
PNext := PNext^.PNext;
Dispose(PDel);
end;

end;




//Распечатка однонаправленного списка.
procedure Print(const aList : El);
var
PElem : El;
begin
if aList = nil then begin
Writeln('Spisok pyst.');
Exit;
end;

PElem := aList;
while PElem <> nil do begin
if PElem <> aList then Write(', ');
Write(PElem^.Data);
PElem := PElem^.PNext;
end;
end;

var

PElem, PPrev : El;
Data : TData;
i, Code : Integer;
S : String;
begin
//Начальная инициализация списка.
CREATE_EMPTY_LIST ( pELem);

repeat
//Создание списока.
Writeln('Sozdanie spiska.');
Writeln('Prekratit vvod - pystaya stroka + Enter.');
i := 0;
repeat
Write('Ilement ', i + 1, ': ');
Readln(S);
if S <> '' then begin
Val(S, Data, Code);
if Code = 0 then begin

Add( Data);
DEL_END_LIST(PElem);
end else
Writeln('Neveren cod. Repet, pliz.');
end;
until S = '';
Writeln('Sostavlen cpisok');
Print(pelem);
Writeln;

//Удаление списка из памяти.
Free(pelem);
Writeln('Spisok delete iz remembe. Work the end.');

Writeln('Repet - Enter. Vixod - luboi spisok + Enter.');
Readln(S);
until S <> '';
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 13.02.2017 в 10:45.
Anastasea_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списками iCaesy Паскаль, Turbo Pascal, PascalABC.NET 2 29.09.2013 13:53
Работа со списками vladis222 Общие вопросы Delphi 1 28.11.2012 12:49
Работа со списками LeNZZZ Microsoft Office Excel 1 21.11.2012 17:36
Работа со списками puzik_off Фриланс 8 30.12.2009 12:02
Работа со списками. radist Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2007 00:05