АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Приложение

Читайте также:
  1. Приложение.
  2. ПРИЛОЖЕНИЕ. Аксиомы унифицированной архитектуры транспортных сетей.
  3. Приложение. Контрольные тесты.
  4. Приложение. Методы изучения переходов
  5. Приложение. Поиск конкурентного преимущества.

Type

struct = record

perem: real;

Degree: integer;

next: ^struct;

end;

 

nan = class

Protected

BegQ, EndQ, p1, p2: ^struct;

num: byte;

Public

constructor Create();

procedure Add(pr: real; dg: integer);

function Returnperem(ind: integer): real;

function ReturnDegree(ind: integer): integer;

procedure ChangePerem(ind: integer; NValue: real);

procedure ChangeDeGree(ind: integer; NValue: integer);

procedure DisposeN(ind: integer);

procedure CleanLN();

property count: byte read num;

end;

 

 

procedure nan.CleanLN();

Begin

for var i:= 1 to count do

Begin

p1:= BegQ;

BegQ:= BegQ^.next;

dispose(p1);

end;

BegQ:= nil;

EndQ:= nil;

p1:= nil;

p2:= nil;

num:= 0;

end;

 

procedure nan.ChangePerem(ind: integer; NValue: real);

Begin

p1:= BegQ;

if num <> 0 then

Begin

for var i:= 1 to ind - 1 do

Begin

p1:= p1^.next;

end;

p1^.perem:= NValue;

end;

end;

 

procedure nan.ChangeDeGree(ind: integer; NValue: integer);

Begin

p1:= BegQ;

if num <> 0 then

Begin

for var i:= 1 to ind - 1 do

Begin

p1:= p1^.next;

end;

p1^.Degree:= NValue;

end;

end;

 

procedure nan.DisposeN(ind: integer);

Begin

if (ind > 0) and (ind < num + 1) then

Begin

if ind = 1 then

Begin

p2:= BegQ;

BegQ:= BegQ^.next;

dispose(p2);

End else

if ind = num then

Begin

p2:= BegQ;

for var i:= 1 to num - 2 do

p2:= p2^.next;

dispose(EndQ);

EndQ:= p2;

End else

Begin

p2:= BegQ;

for var i:= 1 to ind - 2 do

p2:= p2^.next;

p1:= p2^.next;

p2^.next:= p1^.next;

dispose(p1);

end;

p2:= nil;

Dec(num);

end;

end;

 

constructor nan.Create();

Begin

BegQ:= nil;

EndQ:= nil;

p1:= nil;

p2:= nil;

num:= 0;

end;

 

procedure nan.Add(pr: real; dg: integer);

Begin

Inc(num);

new (p1);

p1^.next:= nil;

p1^.perem:= pr;

p1^.Degree:= dg;

if BegQ = nil then

BegQ:= p1

Else

EndQ^.next:= p1;

EndQ:= p1;

end;

 

function nan.Returnperem(ind: integer): real;

Begin

p1:= BegQ;

if num <> 0 then

Begin

for var i:= 1 to ind - 1 do

Begin

p1:= p1^.next;

end;

end;

 

Result:= p1^.perem;

end;

 

function nan.ReturnDegree(ind: integer): integer;

Begin

p1:= BegQ;

if num <> 0 then

Begin

for var i:= 1 to ind - 1 do

Begin

p1:= p1^.next;

end;

end;

Result:= p1^.Degree;

end;

 

procedure CreatePolinomial(var Line: nan);

Begin

var j: integer;

write('Сколько элементов в многочлене? ');

readln(j);

for var i:= 1 to j do

Begin

{ write('Введите множитель: ');

readln(a);

write('Введите степень: ');

readln(b);

Line.Add(a, b);

writeln('Saved! <------!!')}

Line.Add(Random(50) - 25, Random(5))

end;

end;

 

procedure PrintPolinomial(var Line: nan);

Begin

for var i:= 1 to Line.num do

Begin

if Line.Returnperem(i) > -1 then

write('+');

write(Line.Returnperem(i));

if Line.ReturnDegree(i) <> 0 then

Begin

if Line.ReturnDegree(i) = 1 then

write('x')

Else

write('x^', Line.ReturnDegree(i));

end;

end;

writeln();

end;

 

procedure TotalPolinomial(var ln3: nan; ln1, ln2: nan);

Begin

for var i:= 1 to ln1.count do

ln3.Add(ln1.Returnperem(i), ln1.ReturnDegree(i));

for var i:= 1 to ln2.count do

ln3.Add(ln2.Returnperem(i), ln2.ReturnDegree(i));

 

for var i:= 1 to ln3.count - 1 do

Begin

if ln3.count-1 < i then break;

for var j:= i + 1 to ln3.count do

Begin

if ln3.count < j then break;

if ln3.ReturnDegree(i) = ln3.ReturnDegree(j) then

Begin

ln3.ChangePerem(i, ln3.Returnperem(i) + ln3.Returnperem(j));

ln3.DisposeN(j);

end;

end;

end;

end;

 

procedure DifferencePolinomial(var ln3: nan; ln1, ln2: nan);

Begin

for var i:= 1 to ln1.count do

ln3.Add(ln1.Returnperem(i), ln1.ReturnDegree(i));

for var i:= 1 to ln2.count do

ln3.Add(ln2.Returnperem(i), ln2.ReturnDegree(i));

 

for var i:= 1 to ln3.count - 1 do

Begin

if ln3.count-1 < i then break;

for var j:= i + 1 to ln3.count do

Begin

if ln3.count < j then break;

if ln3.ReturnDegree(i) = ln3.ReturnDegree(j) then

Begin

ln3.ChangePerem(i, ln3.Returnperem(i) - ln3.Returnperem(j));

ln3.DisposeN(j);

end;

end;

end;

end;

 

procedure ProductPolinomial(var ln3: nan; ln1, ln2: nan);

Begin

for var i:= 1 to ln1.count do

Begin

for var j:= 1 to ln2.count do

ln3.Add(ln1.Returnperem(i) * ln2.Returnperem(j), ln1.ReturnDegree(i) + ln2.ReturnDegree(j));

end;

 

for var i:= 1 to ln3.count - 1 do

Begin

if ln3.count < i then break;

for var j:= i + 1 to ln3.count do

Begin

if ln3.count < j then break;

if ln3.ReturnDegree(i) = ln3.ReturnDegree(j) then

Begin

ln3.ChangePerem(i, ln3.Returnperem(i) + ln3.Returnperem(j));

ln3.DisposeN(j);

end;

end;

end;

end;

 

procedure DerivativePolinomial(var ln3: nan; ln: nan);

Begin

for var i:= 1 to ln.count do

Begin

if ln.ReturnDegree(i) <> 0 then

ln3.Add(ln.Returnperem(i) * StrToFloat(IntToStr(ln.ReturnDegree(i))), ln.ReturnDegree(i) - 1);

end;

 

for var i:= 1 to ln3.count - 1 do

Begin

if ln3.count < i then break;

for var j:= i + 1 to ln3.count do

Begin

if ln3.count < j then break;

if ln3.ReturnDegree(i) = ln3.ReturnDegree(j) then

Begin

ln3.ChangePerem(i, ln3.Returnperem(i) + ln3.Returnperem(j));

ln3.DisposeN(j);

end;

end;

end;

end;

 

 

procedure IntegralPolinomial(var ln3: nan; ln: nan);

Begin

for var i:= 1 to ln.count do

Begin

if ln.ReturnDegree(i) <> 0 then

ln3.Add(ln.Returnperem(i) * StrToFloat(IntToStr(ln.ReturnDegree(i) + 1)), ln.ReturnDegree(i) + 1);

end;

 

for var i:= 1 to ln3.count - 1 do

Begin

if ln3.count < i then break;

for var j:= i + 1 to ln3.count do

Begin

if ln3.count < j then break;

if ln3.ReturnDegree(i) = ln3.ReturnDegree(j) then

Begin

ln3.ChangePerem(i, ln3.Returnperem(i) + ln3.Returnperem(j));

ln3.DisposeN(j);

end;

end;

end;

end;

 

procedure help(messege: string[255]);

Begin

if Length(messege) > 0 then

writeln(messege);

writeln('**********************************************************');

writeln('** 1 - Ввести первый многочлен **');

writeln('** 2 - Ввести второй многочлен **');

writeln('** 3 - Посчитать и вывести сумму многочленов **');

writeln('** 4 - Посчитать и вывести разность многочленов **');

writeln('** 5 - Посчитать и вывести произведение многочленов **');

writeln('** 6 - Посчитать и вывести производную многочлена **');

writeln('** 7 - Посчитать и вывести интеграл многочлена **');

writeln('**********************************************************');

end;

 

Var

line1, line2, line3: nan;

 

Begin

line1:= new nan();

line2:= new nan();

CreatePolinomial(line1);

PrintPolinomial(line1);

CreatePolinomial(line2);

PrintPolinomial(line2);

line3:= new nan();

 

write('Сумма');

TotalPolinomial(line3, line1, line2);

writeln(); writeln();

PrintPolinomial(line3);

line3.CleanLN();

 

write('Разность');

DifferencePolinomial(line3, line1, line2);

writeln(); writeln();

PrintPolinomial(line3);

line3.CleanLN();

 

write('Умножение');

ProductPolinomial(line3, line1, line2);

writeln(); writeln();

PrintPolinomial(line3);

line3.CleanLN();

 

write('Дифференциал');

DerivativePolinomial(line3, line1);

writeln(); writeln();

PrintPolinomial(line3);

line3.CleanLN();

 

DerivativePolinomial(line3, line2);

PrintPolinomial(line3);

line3.CleanLN();

 

write('Интегралл');

IntegralPolinomial(line3, line1);

writeln(); writeln();

PrintPolinomial(line3);

line3.CleanLN();

 

IntegralPolinomial(line3, line2);

PrintPolinomial(line3);

line3.CleanLN();

end.


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.031 сек.)