Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

FXPELIVE

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Z2_A.PAS

Код:
        {однонаправленные списки}
program Z2;
 Uses
Crt;
 Const
FileName='DiscsIn.txt';
l=50;
 Type
PtrRec=^Rec;
Rec=Record
Name:String[40];
Box:Byte;
pNext:PtrRec;
pPrev:PtrRec;
End;
 
 Var
f:Text; n:Word; err:Integer;
pBegin,pAux,pCKey:PtrRec;
 
 
procedure ReadFromFile;
Var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
Assign(f,FileName);
{$I-} Reset(f); {$I+}
  if (IOResult=0) then begin
New(pBegin);
pBegin^.pNext:=Nil; pBegin^.pPrev:=Nil;
Readln(f,pBegin^.Name); {в поле Name заглавного звена будем хранить число N}
pAux:=pBegin;
i:=0;
while not(eof(f)) Do
begin
inc(i);
New(pAux^.pNext);
pAux^.pNext^.pPrev:=pAux;
pAux:=pAux^.pNext;
pAux^.pNext:=Nil; pAux^.pPrev:=Nil;
pAux^.Box:=0; pAux^.Name:='';
Readln(f,pAux^.Name);
pAux^.Box:=i;
end; pBegin^.Box:=i;
Close(f);
 end else Writeln('ошибка при открытии файла');
End;
 
procedure Print;
var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
if pBegin<>Nil then begin
pAux:=pBegin^.pNext;
while pAux<>Nil do
begin
WriteLn(pAux^.Name,'-',pAux^.Box);
pAux:=pAux^.pNext;
end;
end else Writeln('Список пуст');
End;
 
procedure Clean;
Begin
pAux:=Nil; PCKey:=Nil;
pCKey:=pBegin;
while pCKey<>Nil do
begin
pAux:=pCKey;
pCKey:=pCKey^.pNext;
Dispose(pAux);
end;
End;
 
procedure Act;
var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
if pBegin<>Nil then begin
{Если мы в конце списка то пробежимся с конца иначе пойдем вперед
pAux.^pPrev=pBegin            pAux^.pNext=Nil;
}
 
clrscr;
pAux:=pBegin;
while pAux^.pNext<>Nil do
begin
pAux:=pAux^.pNext;
pAux^.Box:=pAux^.pNext^.Box;
pAux^.pNext^.Box:=0;
if(pAux^.Box=0) then Writeln(pAux^.Name, ' - * ') else
Writeln(pAux^.Name,' - ',pAux^.pNext^.Name);
end;
end else writeln('ошибка: возможно вы работаете с несуществующим списком');
End;
 
BEGIN
ClrScr;
ReadFromFile;
Print;
 
Writeln('--------------');
Act;
Clean;
 
write('...');   ReadKey;
END.

 
Z2_B.PAS

Код:
{  В-14 Задача 2 (с исп/ двунаправленных списков)  }
program Z2;
 Uses
Crt;
 Const
FileName='DiscsIn.txt';  {будем считыват из файла }
l=50;                    {по 50 символов со строки}
 Type
PtrRec=^Rec;
Rec=Record
Name:String[40];         {сюда будем помещать название игры}
Box:Byte;                {а сюда номер коробки с этой игрой}
pNext:PtrRec;
pPrev:PtrRec;
End;
 
 Var
f:Text; n:Word; err:Integer;
pBegin,pAux,pCKey:PtrRec;
 
 
procedure ReadFromFile;    {процедурка чтения из файла}
Var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
Assign(f,FileName);
{$I-} Reset(f); {$I+}
  if (IOResult=0) then begin
New(pBegin);                            {выделяем место для заглавного звена}
pBegin^.pNext:=Nil; pBegin^.pPrev:=Nil;
Readln(f,pBegin^.Name); {в поле Name заглавного звена будем хранить число N}
pAux:=pBegin;
i:=0;
while not(eof(f)) Do    {пока не закончится файл}
begin
inc(i);
New(pAux^.pNext);                       {выделяем место очередному звену     }
pAux^.pNext^.pPrev:=pAux;               {связываем его с предыдущем элементом}
pAux:=pAux^.pNext;                      {цепочки                             }
pAux^.pNext:=Nil; pAux^.pPrev:=Nil;
pAux^.Box:=0; pAux^.Name:='';
Readln(f,pAux^.Name);
pAux^.Box:=i;
end; pBegin^.Box:=i;
Close(f);
 end else Writeln('ошибка при открытии файла');
End;
 
procedure Print; {процедура вывода содержимого списка}
var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
if pBegin<>Nil then begin {если заглавное звено есть        }
pAux:=pBegin^.pNext;      {то начинаем...                   }
while pAux<>Nil do        {пока текущий элемент имеет адрес отличный от нил}
begin
WriteLn(pAux^.Name,'-',pAux^.Box);
pAux:=pAux^.pNext;
end;
end else Writeln('Список пуст');
End;
 
procedure Clean;   {процедура чистки памяти, занятой списком}
Begin
pAux:=Nil; PCKey:=Nil;
pCKey:=pBegin;
while pCKey<>Nil do {пока не дощли до конца}
begin
pAux:=pCKey;
pCKey:=pCKey^.pNext;
Dispose(pAux);         {грохаем звенья}
end;
End;
 
procedure Replace(var FirstPtr,SecoundPtr: PtrRec);
var TempPtr:PtrRec;
Begin
TempPtr:=Nil;
TempPtr:=FirstPtr;
FirstPtr:=SecoundPtr;
SecoundPtr:=TempPtr;
End;
 
procedure Game;
Begin
pAux:=pBegin^.PNext;
 
Replace(pAux,pAux^.pNext);
 
 
End;
 
 
 
procedure Act;
var i:Byte;
Begin
pAux:=Nil; PCKey:=Nil;
if pBegin<>Nil then begin
{Если мы в конце списка то пробежимся с конца иначе пойдем вперед
pAux.^pPrev=pBegin            pAux^.pNext=Nil;
}
clrscr;
pAux:=pBegin;
while pAux^.pNext<>Nil do
begin
pAux:=pAux^.pNext;
pAux^.Box:=pAux^.pNext^.Box;
pAux^.pNext^.Box:=0;
if(pAux^.Box=0) then Writeln(pAux^.Name, ' - * ') else
Writeln(pAux^.Name,' - ',pAux^.pNext^.Name);
end;
end else writeln('ошибка: возможно вы работаете с несуществующим списком');
 
 
End;
 
BEGIN
ClrScr;
ReadFromFile;
Print;
 
Writeln('--------------');
{Act;}  Game;
Clean;
 
write('...');   ReadKey;
END.

Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 11:33 22-05-2011 | Исправлено: FXPELIVE, 13:12 22-05-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru