Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project2;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- type
- Node = ^Odnochl;
- Odnochl = record
- Pow:Integer;
- Koef:Integer;
- Next:Node;
- end;
- var
- FirstMn, SecMn, Sum:Node;
- x:integer;
- function ReadMnogochlen(): Node;
- var
- Rez, X, Y: Node;
- I, Koef, N, Size, LastPow:integer;
- IsCorrect: Boolean;
- begin
- lastPow := 40;
- new(x);
- rez:=x;
- Repeat
- IsCorrect := false;
- writeln('Введите количество одночленов многочлена: ');
- Try
- ReadLn(Size);
- IsCorrect := true;
- Except
- WriteLn('Введите число, не большее 6')
- End;
- if (Size > 6) Or (Size < 1) then
- Begin
- WriteLn('Введите натуральное число, не большее 6');
- IsCorrect := false;
- End;
- Until IsCorrect;
- for i := Size downto 1 do /////////////////////////////////////////////
- begin
- Repeat
- IsCorrect := false;
- writeln('Введите степень ' , I, '-ого одночлена(Макс:', LastPow, ')');
- Try
- ReadLn(n);
- IsCorrect := true;
- Except
- WriteLn('Введите натуральное число, не большее 6')
- End;
- if (N > 40) Or (N < 1) then
- Begin
- WriteLn('Введите натуральное число, не большее 40');
- IsCorrect := false;
- End;
- if (n > lastPow - 1) then
- Begin
- WriteLn('Степень этого одночлена должна быть меньше предыдущих');
- IsCorrect := false;
- End;
- Until IsCorrect;
- LastPow := n;
- Repeat
- IsCorrect := false;
- writeln('Введите коэфицент ' , I, '-ого одночлена');
- Try
- ReadLn(Koef);
- IsCorrect := true;
- Except
- WriteLn('Введите натуральное число')
- End;
- if (Koef > 100) Or (Koef < -100) then
- Begin
- WriteLn('Введите натуральное число, не большее 100 и не меньщее -100');
- IsCorrect := false;
- End;
- Until IsCorrect;
- if Koef<>0 then
- begin
- x^.Koef := Koef;
- x^.Pow := N;
- Y := X ;
- new(X);
- y^.Next :=X;
- end;
- end;
- y^.Next:=nil;
- ReadMnogochlen:=rez;
- end;
- procedure WriteMnogochlen(X: Node);
- var
- IsCorrect :boolean;
- begin
- IsCorrect := true;
- while X <> nil do
- begin
- if (X^.Koef >0) and (not IsCorrect) then
- write('+');
- IsCorrect := false;
- if X^.Pow <> 0 then
- write(IntToStr(X^.Koef),'x^',IntToStr(X^.Pow))
- else
- write(IntToStr(X^.Koef));
- X := X^.Next;
- end;
- writeln;
- end;
- function Ravni(P, Q:Node):boolean;
- var
- AreTheSame:boolean;
- begin
- AreTheSame := true;
- while (p<>nil) and (q<>nil) and AreTheSame do
- begin
- if (p=nil) and (q=nil) then
- AreTheSame := false
- else
- begin
- if (p^.Pow <> q^.Pow) or (p^.Koef <> q^.Koef) then
- AreTheSame:=false;
- p:=p^.Next;
- q:=q^.Next;
- end
- end;
- Ravni := AreTheSame;
- end;
- function FindTheResult(Mnogochlen:Node; X:integer):integer;
- var
- rez:integer;
- begin
- rez:=0;
- while Mnogochlen <> nil do
- begin
- rez := rez + Mnogochlen^.Koef * Round(exp( Mnogochlen^.Pow * ln(x)));
- Mnogochlen := Mnogochlen^.Next;
- end;
- FindTheResult := rez;
- end;
- procedure Add(out p:Node; q,r:Node);
- var
- x,y:Node;
- begin
- new(x);
- p:=x;
- while (q<>nil) and (r<>nil) do
- begin
- if q^.Pow > r^.Pow then
- begin
- x^.Pow := q^.Pow;
- x^.Koef := q^.Koef;
- q:=q^.Next;
- end
- else if q^.Pow < r^.Pow then
- begin
- x^.Pow := r^.Pow;
- x^.Koef := r^.Koef;
- r:=r^.Next;
- end
- else
- begin
- x^.Pow := r^.Pow;
- x^.Koef := r^.Koef + q^.Koef;
- q:=q^.Next;
- r:=r^.Next;
- end;
- y:=x;
- new(x);
- y^.Next := x;
- end;
- y^.Next := nil;
- end;
- begin
- writeln('Данная программа позволяет ввести два многочлена, проверить их равенство,');
- Writeln('найти их сумму и найти значение каждого многочлена в точке Х0');
- FirstMn := ReadMnogochlen;
- write('Первый многочлен: ');
- WriteMnogochlen(FirstMn);
- writeln;
- writeln('Ввод второго многочлена.');
- SecMn := ReadMnogochlen;
- write('Второй многочлен: ');
- WriteMnogochlen(SecMn);
- writeln;
- if Ravni(FirstMn,SecMn) then
- writeln('Ваши многочлены равны')
- else
- writeln('Ваши многочлены не равны');
- writeln;
- writeln;
- write('Введите Х для расчёта значения: ');
- readln(x);
- writeln('Значение первого многочлена: ',FindTheResult(FirstMn,x));
- writeln('Значение второго многочлена: ',FindTheResult(SecMn,x));
- Add(Sum, FirstMn, SecMn);
- write('Сумма многочленов: ');
- WriteMnogochlen(Sum);
- readln;
- end.
- program Project2;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- type
- Node = ^Odnochl;
- Odnochl = record
- Pow:Integer;
- Koef:Integer;
- Next:Node;
- end;
- var
- FirstMn, SecMn, Sum:Node;
- x:integer;
- function ReadMnogochlen(): Node;
- var
- Rez, X, Y: Node;
- I, Koef, N, Size, LastPow:integer;
- IsCorrect: Boolean;
- begin
- lastPow := 40;
- new(x);
- rez:=x;
- Repeat
- IsCorrect := false;
- writeln('Введите количество одночленов многочлена: ');
- Try
- ReadLn(Size);
- IsCorrect := true;
- Except
- WriteLn('Введите число, не большее 6')
- End;
- if (Size > 6) Or (Size < 1) then
- Begin
- WriteLn('Введите натуральное число, не большее 6');
- IsCorrect := false;
- End;
- Until IsCorrect;
- for i := Size downto 1 do /////////////////////////////////////////////
- begin
- Repeat
- IsCorrect := false;
- writeln('Введите степень ' , I, '-ого одночлена(Макс:', LastPow, ')');
- Try
- ReadLn(n);
- IsCorrect := true;
- Except
- WriteLn('Введите натуральное число, не большее 6')
- End;
- if (N > 40) Or (N < 1) then
- Begin
- WriteLn('Введите натуральное число, не большее 40');
- IsCorrect := false;
- End;
- if (n > lastPow - 1) then
- Begin
- WriteLn('Степень этого одночлена должна быть меньше предыдущих');
- IsCorrect := false;
- End;
- Until IsCorrect;
- LastPow := n;
- Repeat
- IsCorrect := false;
- writeln('Введите коэфицент ' , I, '-ого одночлена');
- Try
- ReadLn(Koef);
- IsCorrect := true;
- Except
- WriteLn('Введите натуральное число')
- End;
- if (Koef > 100) Or (Koef < -100) then
- Begin
- WriteLn('Введите натуральное число, не большее 100 и не меньщее -100');
- IsCorrect := false;
- End;
- Until IsCorrect;
- if Koef<>0 then
- begin
- x^.Koef := Koef;
- x^.Pow := N;
- Y := X ;
- new(X);
- y^.Next :=X;
- end;
- end;
- y^.Next:=nil;
- ReadMnogochlen:=rez;
- end;
- procedure WriteMnogochlen(X: Node);
- var
- IsCorrect :boolean;
- begin
- IsCorrect := true;
- while X <> nil do
- begin
- if (X^.Koef >0) and (not IsCorrect) then
- write('+');
- IsCorrect := false;
- if X^.Pow <> 0 then
- write(IntToStr(X^.Koef),'x^',IntToStr(X^.Pow))
- else
- write(IntToStr(X^.Koef));
- X := X^.Next;
- end;
- writeln;
- end;
- function Ravni(P, Q:Node):boolean;
- var
- AreTheSame:boolean;
- begin
- AreTheSame := true;
- while (p<>nil) and (q<>nil) and AreTheSame do
- begin
- if (p=nil) and (q=nil) then
- AreTheSame := false
- else
- begin
- if (p^.Pow <> q^.Pow) or (p^.Koef <> q^.Koef) then
- AreTheSame:=false;
- p:=p^.Next;
- q:=q^.Next;
- end
- end;
- Ravni := AreTheSame;
- end;
- function FindTheResult(Mnogochlen:Node; X:integer):integer;
- var
- rez:integer;
- begin
- rez:=0;
- while Mnogochlen <> nil do
- begin
- rez := rez + Mnogochlen^.Koef * Round(exp( Mnogochlen^.Pow * ln(x)));
- Mnogochlen := Mnogochlen^.Next;
- end;
- FindTheResult := rez;
- end;
- procedure Add(out p:Node; q,r:Node);
- var
- x,y:Node;
- begin
- new(x);
- p:=x;
- while (q<>nil) and (r<>nil) do
- begin
- if q^.Pow > r^.Pow then
- begin
- x^.Pow := q^.Pow;
- x^.Koef := q^.Koef;
- q:=q^.Next;
- end
- else if q^.Pow < r^.Pow then
- begin
- x^.Pow := r^.Pow;
- x^.Koef := r^.Koef;
- r:=r^.Next;
- end
- else
- begin
- x^.Pow := r^.Pow;
- x^.Koef := r^.Koef + q^.Koef;
- q:=q^.Next;
- r:=r^.Next;
- end;
- y:=x;
- new(x);
- y^.Next := x;
- end;
- y^.Next := nil;
- end;
- begin
- writeln('Данная программа позволяет ввести два многочлена, проверить их равенство,');
- Writeln('найти их сумму и найти значение каждого многочлена в точке Х0');
- FirstMn := ReadMnogochlen;
- write('Первый многочлен: ');
- WriteMnogochlen(FirstMn);
- writeln;
- writeln('Ввод второго многочлена.');
- SecMn := ReadMnogochlen;
- write('Второй многочлен: ');
- WriteMnogochlen(SecMn);
- writeln;
- if Ravni(FirstMn,SecMn) then
- writeln('Ваши многочлены равны')
- else
- writeln('Ваши многочлены не равны');
- writeln;
- writeln;
- write('Введите Х для расчёта значения: ');
- readln(x);
- writeln('Значение первого многочлена: ',FindTheResult(FirstMn,x));
- writeln('Значение второго многочлена: ',FindTheResult(SecMn,x));
- Add(Sum, FirstMn, SecMn);
- write('Сумма многочленов: ');
- WriteMnogochlen(Sum);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement