Разработка программ с ветвлениями. Разработка программы, присваивающей трем переменным параметров одного их трех полупроводниковых материалов: германия, кремния или арсенида галлия, страница 2

cin>>x2;

cout<<endl;

cout<<"Y2: ";

cin>>y2;

cout<<endl;

cout<<"R1: ";

cin>>R1;

cout<<endl;

cout<<" R2: ";

cin>>R2;

cout<<endl;

cout<<" x: ";

cin>>x;

cout<<endl;

cout<<" y: ";

cin>>y;

cout<<endl;

// определяем окружность

otv=0;

if ((pow(x1-x,2)+pow(y1-y,2))<=pow(R1,2)) (id1=1);

if ((pow(x2-x,2)+pow(y2-y,2))<=pow(R2,2)) (id2=1);

if (id1==1) (otv=1);

if (id2==1) (otv=2);

if (id1==id2&&id2==1) (otv=3);

// Вывод ответа 

cout<<"Ответ: ";

if (otv==1) (cout<<"попало в 1 окружность ");

if (otv==2) (cout<<"попало во 2 окружность");

if (otv==3) (cout<<"попало в 1 и 2 окружность");

if (otv==0) (cout<<"Не попало ни в одну окружность");

getch();

}

Проверка:

1)

Введите X1: -1

Введите Y1: 0

Введите X2: 1

Введите Y2: 0

ведите R1: 2

Введите R2: 2

Введите x: 0

Введите y: 0

Ответ: Попало в 1 и 2 окружность

Пояснение: ввели 2 окружности с радиусом 2 и на расстоянии от начала координат 1 и точку в начале координат следовательно точка должна попасть в 1 и 2 окружность

2)

Введите X1: -1

Введите Y1: 0

Введите X2: 100

Введите Y2: 100

Введите R1: 2

Введите R2: 1

Введите x: 0

Введите y: 0

Ответ: Попало в 1 окружность

Пояснение: здесь видно что 2  окружность имеет радиус равный 2 и расположена относительно далеко от начала координат а 1 окружность имеет радиус равный 2 и расположена на расстоянии 1 от насала координат очевидно что точка расположенная в начале координат попадает в окружность.

Вывод:

Программа безошибочно определяет в какие из 2-х любых окружностей на плоскости попадает точка.(Включительно контур)

Задание 8

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

Код программы:

#include <iostream.h>

#include <conio.h>

#include <math.h>

void main()

{

// Îïèñàíèå ïåðåìåííûõ

double a,b,c,d,p,q,y1,y2,y3,D,r,z,x1,z2,z3,w,v,fi,pi,u,k;

int id;

// Ââîä äàííûõ

clrscr();

cout<<"a = ";

cin>>a;

cout<<endl;

cout<<"b = ";

cin>>b;

cout<<endl;

cout<<"c = ";

cin>>c;

cout<<endl;

cout<<"d = ";

cin>>d;

cout<<endl;

// âû÷èñëÿåì ïðîìåæóòî÷íûå äàííûå

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

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

// Ëîãè÷åñêàÿ ÷àñòü ïðîãðàììû

if (p==0)

{

y3=pow(-2.0*q,1.0/3);

y2=y3;

y1=y3;

k=0;

}

else

{

r = sqrt(sqrt(p*p))*(q/sqrt(q*q));

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)

{

z2=y2-w;

z3=y3-w;

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

cout<<"Žâ¢¥â: x1="<<x1<<endl;

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

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

}

else

{

z2=(u-w)+2.0*v;

z3=(u-w)-3.0*v;

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

cout<<"Žâ¢¥â: x1="<<x1<<endl;

cout<<"       z2="<<z2<<endl;

cout<<"       z3="<<z3<<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

Вывод: при пошаговом выполнении видно что промежуточные переменные тоже совпадают с ожидаемыми значит программа работает верно