IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Как получить в ответе комплексное число?
Awe
сообщение 13.09.2006 23:54
Сообщение #1


Гость






Всем здрасте! smile.gif

вот прочитал FAQ, поискал на форумах... но все-равно че-та не догнал...

Вот как мне допустим в результате вычислений получит комплексное число???

например переменная Д есть дисскриминант, и вот если он меньше нуля.....

Заранее спасибо! smile.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 15.09.2006 18:39
Сообщение #2


Гость






Вот пример решения квадратного уравнения с получением комплексных корней:
Type
{ Этот тип используется для указания, является ли корень действительным или комплексным }
T = (_real, _complex);

{ Это - структура для работы с любыми корнями }
ResType = record
case style: T of
_real : (r: real);
_complex: (re, im: real);
end;

{ Процедура, печатающая число как действительное или комплексное, в зависимости от поля style }
Procedure Print(X: ResType);
Const sign: Array[Boolean] Of Char = ('-', '+'); { Для отображения знака числа }
Begin
Case X.style Of
_real : WriteLn(X.r:10:5);
_complex: WriteLn(X.re:10:5, ' ' + sign[X.im > 0], Abs(X.im):10:5, ' * i');
End;
End;

Const
Epsilon = 1.0E-10;
maxDistance = 1.0E+07;

{
Сама функция решения квадратного уравнения взята из

FAQ: Решение уравнений различных степеней

и немного подправлена ...
}
Function solveQuadratic(Var x: Array Of Double;
Var y: Array Of ResType): Byte;
Var
a, b, c, Desc: Double;
T: Double;
Begin
a := x[0]; b := -x[1]; c := x[2];
If a = 0 Then
Begin
solveQuadratic := 0;
If b = 0.0 Then Exit;

solveQuadratic := 1;
y[0].style := _real;
y[0].r := c / b; Exit
End;

solveQuadratic := 0;
Desc := Sqr(b) - 4 * a * c;
If Desc < 0.0 Then Begin

{ 2 комплексных корня }
solveQuadratic := 2;
{ Первый }
y[0].style := _complex;
y[0].re := b / (2 * a); y[0].im := - Sqrt(Abs(Desc)) / (2 * a);
{ Второй }
y[1].style := _complex;
y[1].re := b / (2 * a); y[1].im := + Sqrt(Abs(Desc)) / (2 * a);
Exit;

End
Else
If Abs(Desc) < Epsilon Then
Begin
solveQuadratic := 1;
y[0].style := _real;
y[0].r := 0.5 * b / a;
Exit
End;

Desc := Sqrt(Desc);
T := 2 * a;
y[0].style := _real;
y[0].r := (b + Desc) / T;
y[1].style := _real;
y[1].r := (b - Desc) / T;
solveQuadratic := 2
End;


Const
{ Уравнение: X^2 + 2*X + 3 = 0 }
ax: Array[0 .. 2] Of Double = (1, 2, 3);

Var
ay: array[0 .. 2] Of ResType;
roots, i: Integer;

Begin
roots := solveQuadratic(ax, ay);
Writeln( 'number of roots = ', roots );

{ Печатаем корни }
For i := 0 To Pred(roots) Do Begin
WriteLn( 'root #', i + 1, ' = '); Print(ay[i]);
End;
End.


P.S. В следующий раз не задавай вопросы в FAQ, для этого есть раздел "Задачи"
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 1:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"