Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Записи

Автор: eugenek 21.08.2005 17:49

Рассматривая комплексное число как запись, состоящую из двух вещественных полей, составить функции выполнения четырёх арифметических операций с комплексными числами.

Автор: volvo 21.08.2005 17:53

Цитата(eugenek @ 21.08.05 13:49)
Рассматривая комплексное число как запись, состоящую из двух вещественных полей, составить функции выполнения четырёх арифметических операций с комплексными числами.

Ну, так в чем проблема?
Type
Complex = Record
re, im: Double;
End;

{ И реализуй процедуры сложения, вычитания, умножения и деления... }
Procedure complexAdd(Var res: Complex; a, b: Complex);
...
Procedure complexSub(Var res: Complex; a, b: Complex);
...
Procedure complexMult(Var res: Complex; a, b: Complex);
...
Procedure complexDiv(Var res: Complex; a, b: Complex);
...

Полностью-то ЗА ТЕБЯ этого делать никто не будет...

Автор: eugenek 21.08.2005 23:38

Цитата(volvo @ 21.08.05 13:53)
Ну, так в чем проблема?


Правильно?


Program lab_45;

Type
Complex = Record
re, im: Double;
End;

var
res,a,b,d : Complex;
zero : boolean;

Procedure print(d: Complex);
begin
if d.re<>0 then write ('(',d.re:5:5) else write ('(0');
if d.im=0 then write (')') else begin
if d.im<0 then write(' - ') else write(' + ');
write('j',abs(d.im):5:5,')');
end;
end;

Procedure complexAdd(Var res: Complex; a, b: Complex);
begin
res.re:= a.re + b.re;
res.im:= a.im + b.im;
end;

Procedure complexSub(Var res: Complex; a, b: Complex);
begin
res.re:= a.re - b.re;
res.im:= a.im - b.im;
end;


Procedure complexMult(Var res: Complex; a, b: Complex);
begin
res.re:= (a.re*b.re)-(a.im*b.im);
res.im:= (a.re*b.im)+(a.im*b.re);
end;


Procedure complexDiv(Var res: Complex; a, b: Complex);
begin
if ((b.re=0) and (b.im=0)) then zero:=true
else begin
res.re:= ((a.re*b.re)+(a.im*b.im))/((b.re*b.re)+(b.im*b.im));
res.im:= ((a.im*b.re)-(a.re*b.im))/((b.re*b.re)+(b.im*b.im));
end;
end;



begin
zero:=false;
writeln('');
write('a.re=');readln(a.re);
write('a.im=');readln(a.im);
writeln('');
write('b.re=');readln(b.re);
write('b.im=');readln(b.im);
writeln('');
complexAdd(res,a,b);
print(a);write(' + ');print(b);write(' = ');print(res);writeln('');
complexSub(res,a,b);
print(a);write(' - ');print(b);write(' = ');print(res);writeln('');
complexMult(res,a,b);
print(a);write(' * ');print(b);write(' = ');print(res);writeln('');
complexDiv(res,a,b);
print(a);write(' / ');print(b);write(' = ');
if zero=false then print(res)else write ('Division by zero');
writeln('');
end.


Автор: Guest 22.08.2005 2:45

Нужна "от дурака": при делении надо отслеживать ситуации, когда в знаменателе может получиться ноль.

Автор: eugenek 24.08.2005 23:50

Цитата(Guest @ 21.08.05 22:45)
Нужна "от дурака": при делении надо отслеживать ситуации, когда в знаменателе может получиться ноль.


Исправлено! :low: