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

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

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

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


Гость






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

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

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

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

Заранее спасибо! smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 




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