Разработка программ с ветвлениями. Анализ и исполнение программы Murka раздела Логические операции (часть Ветвления), страница 2

Задание № 6. В данном задании требовалось проанализировать и исполнить программы Murka раздела switch (часть Ветвления) и освоить синтаксис оператора switch и особенности его использования.

Задание № 7. В данном задании требовалось разработать программу, присваивающую трем переменным ,  и  значения параметров одного их трех полупроводниковых материалов: германия, кремния или арсенида галлия, в зависимости от введенного ключа выбора G, S или A.

Материал

, эВ

, см-3

германий

16.0

0.67

2.4.1013

кремний

11.9

1.12

1.45.1010

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

13.1

1.43

1.79.106

Затем должны выполняться вычисления величин

;

, где         q = 1.60.10-19 Кл – заряд электрона;

e0 = 8.85.10-14 Ф/см – диэлектрическая постоянная;

k = 8.62.10-5 эВ/К – постоянная Больцмана.

В конце работы программа должна выводить значения величин и на дисплей.

Расчет выполняется для значения температуры, заданного преподавателем.

Входные данные: T,T0,ni0,Eg,eps; тип - doublе(вещественные переменные); eps0=8.85E-14,q=1.6E-19,k=8.62E-5; тип - const  doublе

Выходные данные: ni, Ld; тип –doublе(вещественные переменные).

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

#include <iostream.h>

#include <conio.h>

#include <math.h>

#include <stdio.h>

void main()

{

char M;

double ni,Ld,T,T0,ni0,Eg,eps;

const double eps0=8.85E-14,q=1.6E-19,k=8.62E-5;

int key=0;

clrscr();

cout<<"Введите название материала М – ‘G’, ‘S’ или ‘A’ ";  cin>>M;

cout<<endl;

switch(M)

{

case 'G':

eps=16,Eg=0.67,ni0=2.4E13;

cout<<" eps=16"<<endl;

cout<<" Eg=0.67"<<endl;

cout<<" ni0=2.4E13"<<endl;

break;

case 'S':

eps=11.9,Eg=1.12,ni0=1.45E10;

cout<<" eps=11.9"<<endl;

cout<<" Eg=1.12"<<endl;

cout<<" ni0=1.45E10"<<endl;

break;

case 'A':

eps=13.1,Eg=1.43,ni0=1.79E6;

cout<<" eps=13.1"<<endl;

cout<<" Eg=1.43"<<endl;

cout<<" ni0=1.79E6"<<endl;

break;

default:

cout<<endl<<"Такое значение М не предусмотрено!"<<endl;

eps=0;

Eg=0;

ni0=0;

key=1;

}

if(!key)

{

cout<<"T=";

cin>>T;

cout<<"T0=";

cin>>T0;

ni=ni0*exp(Eg*(T-T0)/2*k*T*T0);

Ld-sqrt(eps*eps0*k*T/q*ni);

cout<<"ni="<<ni<<endl;

cout<<"Ld="<<Ld<<endl;

}

Else cout<<endl<<" Такое значение М не предусмотрено! "<<endl;

getch();

}

Результаты исполнения работы:

Набор 1.    Введите название матеpиала M - 'G' или 'S' или 'A' G

eps=16

Eg=0.67

ni0=2.4E13

T=0

T0=5

ni=2.4e+13

Ld=2.710317e-256

Нажмите Enter

Набор 2.    Введите название матеpиала M - 'G' или 'S' или 'A' H

Такое значение M не предусмотрено!

Такое значение М не пpедусмотpено!

Нажмите Enter

Набор 3.    Введите название матеpиала M - 'G' или 'S' или 'A' A

eps=13.1

Eg=1.43

ni0=1.79E6

T=60

T0=0

ni=1790000

Ld=1.084196e-255

Нажмите Enter

Вывод: Была разработана программа, присваивающая трем переменным ,  и  значения параметров одного их трех полупроводниковых материалов: германия, кремния или арсенида галлия, в зависимости от введенного ключа выбора G, S или A.

При написании использовали операторы if, switch() default.Результаты исполнения работы приведены после текста программы. Программа успешно работает.

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

Входные данные:  a,b,c,d ;тип - doublе(вещественные переменные).

Внутренние переменные: p,q,D,y1,y2,y3,z,k,fi,u,v,w, r; тип - doublе(вещественные переменные).

Выходные данные: x1,x2,x3; тип – doublе(вещественные переменные).

Блок-схема алгоритма решения кубического уравнения:

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

#include <conio.h>

#include <iostream.h>

#include <math.h>

void main()

{

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

clrscr();

D=0; r=0; z=0; fi=0; u=0; v=0; y2=0; y3=0;

cout<<"a = "; cin>>a;

cout<<"b = "; cin>>b;

cout<<"c = "; cin>>c;

cout<<"d = "; cin>>d;

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

q=(2*b*b*b/(27*a*a*a)-b*c/(3*a*a)+d/a)/2;

if (p==0) {

y1=pow(-2*q,1./3.);

y2=y1;

y3=y1;

k=0;

}

else {

if (q<0) r=-pow(fabs(p),1./2.);

else r=pow(fabs(p),1./2.);

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

if (p<0) {

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

if (D<=0) {

fi=acos(z);

y1=-2*r*cos(fi/3);

y2=2*r*cos(M_PI/3-fi/3);

y3=2*r*cos(M_PI/3+fi/3);

k=0;

}

else {

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

y1=-2*r*cosh(fi/3);

u=r*cosh(fi/3.0);

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

k=1;

}

}

else {

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

y1=-2*r*sinh(fi/3);

u=r*sinh(fi/3.0);

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

k=1;

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

}

}

w=b/3/a;

x1=y1-w;

if (k==0) {

x2=y2-w;

x3=y3-w;

}

else {

x2=u-w;

x3=v;

}

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

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

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

getch();

}

Результаты исполнения работы:

Набор 1.    a = 2.0

b = 3.0

c = 1.5

d = -15.75

x1=1.5

x2=1.5

x3=1.5

Набор 2.    a = 1.5

b = -3.0

c = -7.5

d = 9.0

x1=-2

x2=3

x3=1

Набор 3.    a = 1.0

b = 4.0

c = -12.75

d = 7.5

x1=-6.237038

x2=1.338954

x3=0.898085

Набор 4.  a = 2.0

b = -10.0

c = 18.0

d = -10.0

x1=1

x2=2

x3=1

Вывод: Была разработана программа для вычисления корней кубического уравнения.

При написании использовали операторы if, if - else.Результаты исполнения работы приведены после текста программы. Программа успешно работает.