Unit List3;
Interface
Const ListOk = 0;
ListNotMem = 1;
ListUnder = 2;
ListEnd = 3;
Type BaseType = Pointer;
PtrEl = ^Element;
Element = Record
Data : BaseType;
Next : PtrEl;
end;
List = Record
Start, Ptr : PtrEl;
N : Word; { длина списка }
Size : Word { размер информационной}
End; { части элемента }
bytearr = array[1..100] of integer;
Var ListError : 0..3;
Procedure InitList(var L:List; Size:Word);
Procedure PutList(var L:List; var E);
Procedure GetList(var L:List; var E:integer);
Procedure ReadList(var L:List; var E);
Function FullList(var L:List):boolean;
Function EndList(var L:List):boolean;
Function Count(var L:List):Word;
Procedure BeginPtr(var L:List);
Procedure EndPtr(var L:List);
Procedure MovePtr(var L:List);
Procedure MoveTo(var L:List; N:word);
Procedure DoneList(var L:List);
Procedure CopyList(var L1,L2:List);
implementation
Procedure InitList;
begin
getmem(L.start,sizeof(element));
if L.start=nil then
ListError:=ListNotMem
else
begin
L.start^.next:=nil;
L.ptr:=L.start;
L.N:=0;
L.size:=size;
end;
end;
Procedure EndPtr;
begin
L.ptr:=L.start;
while (L.ptr^.next)<>nil do
L.ptr:=L.ptr^.next;
end;
Procedure PutList;
var u:PtrEL;
i:word;
begin
u := L.ptr^.next;
getmem(L.ptr^.next, sizeof(element));
L.ptr := L.ptr^.next;
getmem(L.ptr^.data, L.size);
L.ptr^.next := u;
for i:=1 to L.size do
bytearr (L.ptr^.data^)[i]:=bytearr(E)[i];
inc(L.N)
end;
Procedure GetList;
var i:byte;
g:pointer;
begin
if L.N=1 then
ListError:=ListUnder
else
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>E) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
if i>E then
ListError:=ListEnd
else
begin
g:=L.ptr;
L.ptr:=L.ptr^.next;
freemem(g,sizeof(element))
end;
end;
end;
Procedure ReadList;
var i:word;
begin
for i:=1 to L.size do
bytearr(E)[i] := bytearr(L.ptr^.data^)[i];
end;
Function FullList(var L:List):boolean;
begin
FullList:=L.start=nil
end;
Function EndList;
begin
EndList:=L.ptr^.next=nil
end;
Function Count;
begin
Count:=L.N-1
end;
Procedure BeginPtr;
begin
L.ptr:=L.start
end;
Procedure MovePtr;
begin
if L.ptr^.next=nil then
ListError:=ListEnd
else
L.ptr:=L.ptr^.next
end;
Procedure MoveTo;
var i:byte;
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>N) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
end;
Procedure DoneList;
var g:pointer;
begin
L.ptr:=L.start;
while L.N<>0 do
begin
g:=L.ptr^.next;
freemem(L.ptr, sizeof(element));
L.ptr:=g
end;
freemem(L.start,sizeof(element));
end;
Procedure CopyList;
begin
L1.ptr:=L1.start;
while (L1.ptr^.next<>nil) do
begin
PutList(L2, L1.ptr^.data^);
L1.ptr:=L1.ptr^.next
end;
end;
end.
8. Многочлен P(x)=anxn+an-1xn-1+...+a1x+a0 с целыми коэффициента-ми можно представить в виде списка, причем если ai=0, то соответствующее звено не включать в список. Определить процедуру ВЫВОД(p,y), которая печатает многочлен р как многочлен от переменной, однобуквенное имя которой является значением литерного параметра y.
program p180474;
// 8. Многочлен P(x)=anxn+an-1xn-1+...+a1x+a0 с целыми коэффициента-ми
// можно представить в виде списка, причем если ai=0, то соответствующее
// звено не включать в список. Определить процедуру ВЫВОД(p,y), которая
// печатает многочлен р как многочлен от переменной, однобуквенное имя
// которой является значением литерного параметра
uses
List3;
begin
writeln('hello, world!');
end.
Unit List3;
Interface
Const ListOk = 0;
ListNotMem = 1;
ListUnder = 2;
ListEnd = 3;
Type BaseType = Pointer;
PtrEl = ^Element;
Element = Record
Data : BaseType;
Next : PtrEl;
end;
List = Record
Start, Ptr : PtrEl;
N : Word; { длина списка }
Size : Word { размер информационной}
End; { части элемента }
bytearr = array[1..100] of integer;
Var ListError : 0..3;
Procedure InitList(var L:List; Size:Word);
Procedure PutList(var L:List; var E);
Procedure GetList(var L:List; var E:integer);
Procedure ReadList(var L:List; var E);
Function FullList(var L:List):boolean;
Function EndList(var L:List):boolean;
Function Count(var L:List):Word;
Procedure BeginPtr(var L:List);
Procedure EndPtr(var L:List);
Procedure MovePtr(var L:List);
Procedure MoveTo(var L:List; N:word);
Procedure DoneList(var L:List);
Procedure CopyList(var L1,L2:List);
implementation
Procedure InitList(var L:List; Size:Word);
begin
getmem(L.start,sizeof(element));
if L.start=nil then
ListError:=ListNotMem
else
begin
L.start^.next:=nil;
L.ptr:=L.start;
L.N:=0;
L.size:=size;
end;
end; { InitList }
Procedure EndPtr(var L:List);
begin
L.ptr:=L.start;
while (L.ptr^.next)<>nil do
L.ptr:=L.ptr^.next;
end; { EndPtr }
Procedure PutList(var L:List; var E);
var u:PtrEL;
i:word;
begin
u := L.ptr^.next;
getmem(L.ptr^.next, sizeof(element));
L.ptr := L.ptr^.next;
getmem(L.ptr^.data, L.size);
L.ptr^.next := u;
i:= 1;
while i<=L.size do
begin
/// bytearr (L.ptr^.data^)[i]:=bytearr(E)[i];
inc(i);
end;
inc(L.N)
end; { PutList }
Procedure GetList(var L:List; var E:integer);
var i:byte;
g:pointer;
begin
if L.N=1 then
ListError:=ListUnder
else
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>E) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
if i>E then
ListError:=ListEnd
else
begin
g:=L.ptr;
L.ptr:=L.ptr^.next;
/// freemem(g,sizeof(element))
end;
end;
end; { GetList }
Procedure ReadList(var L:List; var E);
var i:word;
begin
i:= 1;
while i<= L.size do
begin
/// bytearr(E)[i] := bytearr(L.ptr^.data^)[i];
inc(i);
end;
end; { ReadList }
Function FullList(var L:List):boolean;
begin
FullList:=L.start=nil
end; { FullList }
Function EndList(var L:List):boolean;
begin
EndList:=L.ptr^.next=nil
end; { EndList }
Function Count(var L:List):Word;
begin
Count:=L.N-1
end; { Count }
Procedure BeginPtr(var L:List);
begin
L.ptr:=L.start
end; { BeginPtr }
Procedure MovePtr(var L:List);
begin
if L.ptr^.next=nil then
ListError:=ListEnd
else
L.ptr:=L.ptr^.next
end; { MovePtr }
Procedure MoveTo(var L:List; N:word);
var i:byte;
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>N) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
end; { MoveTo }
Procedure DoneList(var L:List);
var g:pointer;
begin
L.ptr:=L.start;
while L.N<>0 do
begin
g:=L.ptr^.next;
/// freemem(L.ptr, sizeof(element));
/// L.ptr:=g
end;
/// freemem(L.start,sizeof(element));
end; { DoneList }
Procedure CopyList(var L1,L2:List);
begin
L1.ptr:=L1.start;
while (L1.ptr^.next<>nil) do
begin
/// PutList(L2, L1.ptr^.data^);
L1.ptr:=L1.ptr^.next
end;
end; { CopyList }
end.
program p180474b;
const
ERROR = -MaxInt - 1; // Возвращаемая ошибка, если не найден элемент списка
// только для целых чисел
name_a = 'a.dat'; // файл данных
type
TElem = integer;
TBaseElem = ^TElem; // Тип информационной части
TList = ^TNode; // Представление списка
TNode = record // Звено списка
info: TBaseElem; // Информационная часть
next: TList; // Следующий элемент
end;
TElemFile = file of TElem; // Тип файла для хранения информационных частей
procedure File_Create(name_a: string);
// Создание файла
var
i, n: integer;
file_a : TElemFile;
begin
assign(file_a, name_a);
Randomize;
// Количество элементов задается случайным образом
rewrite(file_a);
for i:= 1 to Random(20)+1 do
if i mod 4 = 0 then
write(file_a, 0)
else
write(file_a, Random(50)-25);
close(file_a);
end;
procedure ZList_Init(var L: TList);
// Инициализация списка с заглавным звеном
var
n: TList;
begin
new(n);
n^.next := nil;
l:= n;
end;
procedure ZList_AddLast(L:TList; e: TElem);
// Добавление элемента в конец списка с заглавным звеном
begin
while L^.next <> nil do
L:= L^.next;
new(L^.next);
L:=L^.next;
new(L^.info);
L^.info^ := e;
L^.next := nil;
end;
procedure Insert_List(L1:TList; var e: TElem; var code: integer);
// Вставка элемента в список с заглавным звеном
// после элемента с номером n
var
p1: TList;
tmp: TList;
begin
p1:= L1^.next;
if (p1 = nil) then
begin
code := -1;
exit;
end
else
begin
new(tmp);
new(tmp^.info);
tmp^.info^ := e;
tmp^.next := p1^.next;
p1^.next := tmp;
p1 := tmp^.next;
code := 0
end;
end;
function List_Length(L:TList): integer;
// Вычисление длины списка с заглавным звеном
var
i: integer;
begin
i:= 0;
L:= L^.next;
while (L <> nil) do
begin
L:= L^.next;
inc(i);
end;
List_Length := i;
end;
procedure ZList_Print(L: TList);
// Печать списка c заглавным звеном
begin
write('<');
L := L^.next;
while (L <> nil) do
begin
write(L^.info^);
if (L^.next <> nil) then write('.');
L:= L^.next;
end;
writeln('>');
end;
procedure List_Read(L: TList; n: integer; var e: TElem);
// Получение элемента №
var
i: integer;
begin
if (n<=0) or (n>List_Length(L)) then
begin
writeln('Вне диапазона');
exit;
end;
for i:= 1 to n do
L := L^.next;
e:= L^.info^;
end;
procedure List_Clear(var L:TList);
// Удаление списка
var
n, start: TList;
be: TBaseElem;
begin
start:= L;
L := L^.next;
while (L <> nil) do
begin
n:= L;
be := n^.info;
dispose(be);
L := L^.next;
dispose(n);
end;
dispose(start);
end;
procedure FileToList(fname: string; var L: TList);
// Чтение файла в список
var
e: TElem;
f: TElemFile;
begin
assign(f, fname);
if not FileExists(fname) then
exit;
reset(f);
while not eof(f) do
begin
read(f, e);
ZList_AddLast(L, e);
end;
close(f);
end;
var
a: TList; // список
c: char;
i: integer;
len : integer;
e: TElem;
begin // главная программа
write('имя переменной ');
readln(c);
File_Create(name_a);
ZList_Init(a);
FileToList(name_a, a);
writeln('Начальные значения');
write('a=>');
ZList_Print(a);
len := List_Length(a);
write('Многочлен = ');
for i:= 1 to len do
begin
List_Read(a, i, e);
if (e<>0) then
begin
if (e>0) and (i>1) then
write('+');
write(e);
if (i<len) then
begin
write('*', c);
if (i<len-1) then
write('^', len-i);
end;
end;
end;
writeln;
List_Clear(a);
readln;
end.
имя переменной X
Начальные значения
a=><-18.11.-8.0.16.11.18.0.22.16.-12.0.-15.1>
Многочлен = -18*X^13+11*X^12-8*X^11+16*X^9+11*X^8+18*X^7+22*X^5+16*X^4-12*X^3-15*X+1
program CD5;
uses List3;
a:List;
c:char;
I,e:integer;
len:integer;
begin
InitList(a,sizeof(e));
write('name peremennoy ');
readln(c);
writeln('Vvedite koef ai, i=n..0');
for i:=0 to N do
begin
read(c);
if c<>0 then
begin
PutList(a,c)
end;
end;
len:= Count(a);
write('mnogochlen= ');
for i:= 1 to len do
begin
ReadList(a,e);
if (e<>0) then
begin
if (e>0) and (i>1) then
write('+');
write(e);
if (i<len) then
begin
write('*', c);
if (i<len-1) then
write('^', len-i);
end;
end;
end;
writeln;
DoneList(a);
readln;
end.
Unit List3;
Interface
Const ListOk = 0;
ListNotMem = 1;
ListUnder = 2;
ListEnd = 3;
Type BaseType = Pointer;
PtrEl = ^Element;
Element = Record
Data : BaseType;
Next : PtrEl;
end;
List = Record
Start, Ptr : PtrEl;
N : Word; { длина списка }
Size : Word { размер информационной}
End; { части элемента }
bytearr = array[1..100] of integer;
Var ListError : 0..3;
Procedure InitList(var L:List; Size:Word);
Procedure PutList(var L:List; var E);
Procedure GetList(var L:List; var E:integer);
Procedure ReadList(var L:List; var E);
Function FullList(var L:List):boolean;
Function EndList(var L:List):boolean;
Function Count(var L:List):Word;
Procedure BeginPtr(var L:List);
Procedure EndPtr(var L:List);
Procedure MovePtr(var L:List);
Procedure MoveTo(var L:List; N:word);
Procedure DoneList(var L:List);
Procedure CopyList(var L1,L2:List);
implementation
Procedure InitList(var L:List; Size:Word);
begin
getmem(L.start,sizeof(element));
if L.start=nil then
ListError:=ListNotMem
else
begin
L.start^.next:=nil;
L.ptr:=L.start;
L.N:=0;
L.size:=size;
end;
end;
Procedure EndPtr(var L:List);
begin
L.ptr:=L.start;
while (L.ptr^.next)<>nil do
L.ptr:=L.ptr^.next;
end;
Procedure PutList(var L:List; var E);
var u:PtrEL;
i:word;
begin
u := L.ptr^.next;
getmem(L.ptr^.next, sizeof(element));
L.ptr := L.ptr^.next;
getmem(L.ptr^.data, L.size);
L.ptr^.next := u;
for i:=1 to L.size do
bytearr (L.ptr^.data^)[i]:=bytearr(E)[i];
inc(L.N)
end;
Procedure GetList(var L:List; var E:integer);
var i:byte;
g:pointer;
begin
if L.N=1 then
ListError:=ListUnder
else
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>E) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
if i>E then
ListError:=ListEnd
else
begin
g:=L.ptr;
L.ptr:=L.ptr^.next;
freemem(g,sizeof(element))
end;
end;
end;
Procedure ReadList(var L:List; var E);
var i:word;
begin
for i:=1 to L.size do
bytearr(E)[i] := bytearr(L.ptr^.data^)[i];
end;
Function FullList(var L:List):boolean;
begin
FullList:=L.start=nil
end;
Function EndList(var L:List):boolean;
begin
EndList:=L.ptr^.next=nil
end;
Function Count(var L:List):Word;
begin
Count:=L.N-1
end;
Procedure BeginPtr(var L:List);
begin
L.ptr:=L.start
end;
Procedure MovePtr(var L:List);
begin
if L.ptr^.next=nil then
ListError:=ListEnd
else
L.ptr:=L.ptr^.next
end;
Procedure MoveTo(var L:List; N:word);
var i:byte;
begin
L.ptr:=L.start;
i:=1;
while (L.ptr^.next<>nil)and(i<>N) do
begin
L.ptr:=L.ptr^.next;
inc(i)
end;
end;
Procedure DoneList(var L:List);
var g:pointer;
begin
L.ptr:=L.start;
while L.N<>0 do
begin
g:=L.ptr^.next;
freemem(L.ptr, sizeof(element));
L.ptr:=g
end;
freemem(L.start,sizeof(element));
end;
Procedure CopyList(var L1,L2:List);
begin
L1.ptr:=L1.start;
while (L1.ptr^.next<>nil) do
begin
PutList(L2, L1.ptr^.data^);
L1.ptr:=L1.ptr^.next
end;
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.