Анализ и исполнение программы Murka-2007 раздела if_else (часть Ветвления). Разработка программы для вычисления корней кубического уравнения, страница 4

getch();

}

Набор входных данных1:   key=G

Результат работы программы:

Введите полупроводниковый материал:

G - германий

S - кремний

A - арсенид галлия

G

n_i = 1.663797e+79

L_D = 2.107703e+42

eps = 16

E_g = 0.67

n_i0 = 2.4e+13

Набор входных данных2:   key=S.

Результат работы программы:

Введите полупроводниковый материал:

G - германий

S - кремний

A - арсенид галлия

S

n_i = 1.673979e+120

L_D = 5.765643e+62

eps = 11.9

E_g = 1.12

n_i0 = 1.45e+10

Набор входных данных3:   key=A

Результат работы программы:

Введите полупроводниковый материал:

G - германий

S - кремний

A - арсенид галлия

A

n_i = 6.010768e+146

L_D = 1.146304e+76

eps = 13.1

E_g = 1.43

n_i0 = 1790000

Набор входных данных4:   key=H

Результат работы программы:

Введите полупроводниковый материал:

G - германий

S - кремний

A - арсенид галлия

H

Такого материала нет!

n_i = 0

L_D = 0

eps = 0

E_g = 0

n_i0 = 0

8.  Разработать программу для вычисления корней кубического уравнения. Формульное описание алгоритма приведено в Приложении 1 и файле Root3_alg_text.doc, а его блок-схема – в Приложении 2 и файле Root3_alg_block.doc. Отладить работу всех ветвей программы с помощью тестовых данных, приведенных в Приложении 3 и файле Root3data.doc. При отладке использовать пошаговое исполнение программы с помощью отладчика (клавиша <F8>).

Структура входных и выходных данных следующая:

a, b, c, d  – коэффициенты кубического уравнения. x1, x2, x3 – найденные корни. Входные данные жестко вшиты в клавиатуру.

Текст программы:

#include <iostream.h>

#include <conio.h>

#include <math.h>

void main()

{

double a,b,c,d;

double p,q,r,y1,y2,x1,x2,x3,y3,z,D,fi,Z,u,v,w;

int k;

a=2.0; b=-10.0; c=18.0; d=-10.0;

p=(3.0*a*c-b*b)/(3.0*a*a)/3.0;

q=(2.0*b*b*b/(27.0*a*a*a)-b*c/(3.0*a*a)+d/a)/2.0;

if(p==0)

{

y1=y2=y3=pow(-2.0*q,1.0/3.0);

k=0;

}

else

{

if(q>0)

r=sqrt(fabs(p));

if(q<0)

r=-sqrt(fabs(p));

z=q/(r*r*r);

if(p<0)

{

D=q*q+p*p*p;

if(D<=0)

{

fi=acos(z);

y1=-2.0*r*cos(fi/3.0);

y2=2.0*r*cos(M_PI/3.0-fi/3.0);

y3=2.0*r*cos(M_PI/3.0+fi/3.0);

k=0;

}

else

{

fi=log(z+sqrt(z*z-1.0));

y1=-2.0*r*cosh(fi/3.0);

u=r*cosh(fi/3.0);

v=sqrt(3.0)*r*sinh(fi/3.0);

k=1;

}

}

else

{

fi=log(z+sqrt(z*z+1.0));

y1=-2.0*r*sinh(fi/3.0);

u=r*sinh(fi/3.0);

v=sqrt(3.0)*r*cosh(fi/3.0);

k=1;

}

}

w=b/(3.0*a);

x1=y1-w;

if(k==0)

{

x2=y2-w;

x3=y3-w;

}

else

Z=u-w;

clrscr();

if(k==0)

{

cout<<"k  = "<<k<<endl;

cout<<"x1 = "<<x1<<endl;

cout<<"x2 = "<<x2<<endl;

cout<<"x3 = "<<x3<<endl;

}

else

{

cout<<"k  = "<<k<<endl;

cout<<"x1 = "<<x1<<endl;

cout<<"x2 = "<<Z<<"+i*"<<v<<endl;

cout<<"x3 = "<<Z<<"-i*"<<v<<endl;

}

getch();

}

Набор входных данных1:   a=2.0; b=3.0; c=1.5; d=-15.75

Результат работы программы:

k  = 0

x1 = 1.5

x2 = 1.5

x3 = 1.5

Набор входных данных2:   a=1.5; b=-3.0; c=-7.5; d=9.0.

Результат работы программы:

k  = 0

x1 = -2

x2 = 3

x3 = 1

Набор входных данных3:   a=1.0; b=4.0; c=-10.75; d=7.5.

Результат работы программы:

k  = 1

x1 = -6

x2 = 1+i*0.5

x3 = 1-i*0.5

Набор входных данных4:   a=2.0; b=-10.0; c=18.0; d=-10.0.

Результат работы программы:

k  = 1

x1 = 1

x2 = 2+i*1

x3 = 2-i*1