|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Приложение
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. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.03 сек.) |