Автор работы: Пользователь скрыл имя, 02 Апреля 2012 в 17:55, курсовая работа
Розробити програму, що реалізує дії з комплексним числами, а саме: додавання, віднімання, множення, обчислення модулю двох комплексних чисел, переведення двох комплексних чисел в тригонометричну форму та піднесення їх до степеня. Для цього потрібно зробити
Зміст 1
Постановка задачі 2
Технічні завдання 3
Математична модель 4
Програмна реалізація 6
Структура: 6
Функції 6
Бібліотеки 6
Інструкція 7
Результати роботи програми 7
Аналіз отриманих даних 10
Текст програми 11
Зміст 1
Постановка задачі 2
Технічні завдання 3
Математична модель 4
Програмна реалізація 6
Структура: 6
Функції 6
Бібліотеки 6
Інструкція 7
Результати роботи програми 7
Аналіз отриманих даних 10
Текст програми 11
Список використаної літератури 19
Розробити програму, що реалізує дії з комплексним числами, а саме: додавання, віднімання, множення, обчислення модулю двох комплексних чисел, переведення двох комплексних чисел в тригонометричну форму та піднесення їх до степеня. Для цього потрібно зробити меню, що містить різноманітні режими роботи, які оформлені у вигляді різних процедур, що дозволяють виконати наступне:
1. Ввести комплексні числа з клавіатури або файлу
2. Додавання:
- виведення результату на екран
- виведення результату в файл
3. Віднімання:
- виведення результату на екран
- виведення результату в файл
4. Множення:
- виведення результату на екран
- виведення результату в файл
5. Ділення
- виведення результату на екран
- виведення результату в файл
6. Обчислення модулю першого або другого комплексного числа:
- виведення результату на екран
- виведення результату в файл
7. Переведення першого або другого комплексного числа в тригонометричну форму:
- виведення результату на екран
- виведення результату в файл
8. Піднесення першого або другого числа до довільного степеня:
- виведення результату на екран
- виведення результату в файл
8. Вийти з програми
Ми маємо розробити програму, яка виконувала б дії з комплексними числами. Для цього потрібно:
1) використовувати структуру для моделювання комплексного числа:
struct Compl {
int a,b;
float fi;
};
2) Зробити функцію для введення/виведення комплексних чисел з можливістю роботи з файлами.
3) Створити функції:
▪ додавання, віднімання, множення, ділення комплексних чисел;
▪ визначення модулю першого та другого комплексного числа;
▪ переведення в тригонометричну форму та піднесення до степені першого та другого числа;
4) Передбачити функцію вибору операції шляхом введення номеру операції;
Комплексні числа— об'єкти, що утворюють поле, яке є розширенням поля дійсних чисел і позначається .
Арифметичні дії та інші операції:
Нехай z1=a+bi та z2=c+di - комплексні числа. Тоді:
Для комплексних чисел певним чином визначають також інші операції, наприклад, переведення в тригономертичну форму, піднесення до довільного комплексного степеня, визначення модулю, тощо.
Модуль
Модулем (абсолютною величиною) комплексного числа називається довжина радіуса вектора відповідної точки комплексної площині (або, відстань між точкою комплексної площини, відповідної цього числа, і початком координат).
Модуль комплексного числа z= x+yi позначається | z | і визначається виразом .. Часто позначається літерами або . Якщо z є дійсним числом, то | z | збігається з абсолютною величиною цього дійсного числа.
Геометричне представлення
Комплексне число можна ототожнити з геометричним вектором, початок якого знаходиться в початку координат, а кінець - у даній точці. З геометричною інтерпретацією тісно пов'язана так звана тригонометрична форма комплексного числа (на відміну від вище поданої форми , яку називають алгебраїчною): , де і - дійсні числа, причому додатне. У такій формі можна подати довільне комплексне число, відмінне від 0, причому виявляється, що (називається модулем числа ) — це відстань між точкою (a,b) та початком координат, а кут (називається аргументом числа ) — кут (виражений у радіанах) між правою піввіссю осі абсцис і вищезгаданим вектором, причому кут відраховується проти годинникової стрілки (а в разі руху за стрілкою годинника береться зі знаком "мінус"). Для переходу від однієї форми запису комплексного числа до іншої можна користуватися такими формулами:
,
,
,
;
,
.
Формула Муавра
Ця формула дозволяє піднести до цілої ступіні ненульове комплексне число, представлене в тригонометричній формі. Формула Муавра має вигляд:
де r — модуль, а — аргумент комплексного числа. Наведена формула справедлива при будь-якому цілому n, необовязково позитивному.
Структура складається з таких частин:
- KURS.CPP – файл з вихідним кодом програми
- Input1.txt – файл, де зберігається перше комплексне число
- Input2.txt – файл, де зберігається друге комплексне число
- Output.txt – файл, де буде зберігатися результат
Функції, які використовувались:
Compl vvod () – введення комплесних чисел з файлу або клавіатури;
void vivod () – виведення на екран або файл;
Compl summa ()– рахування суми двох комплесних чисел;
Compl raznost () – рахування різниці двох комплексних числе;
Compl proizv ()– множення комплексних чисел;
Compl del () – ділення комплексних чисел;
double modul () – визначення модулю першого або другого числа;
void trigon ()– переведеня в тригономеричну форму першого числа;
void trigon2 ()- переведеня в тригономеричну форму другого числа;
void compl_pow () – піднесення до степеня першого числа;
void compl_pow2 ()– піднесення до степеня другого числа;
Стандартні бібліотеки, які використовувались:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
Для початку потрібно відкрити файл KURS.CPP та запустити його. Після запускання вам буде запропоновано ввести перше число з можливістю вибору (ввести з клавіатури, зчитати дані з існуючого файлу, створити новий файл з даними та зчитати з нього або якщо ви не бажаєте вводити число то у вас буде можливість вибрати пропустити и перейти далі). Після того, як ви ввели перше число вам запропонується ввести друге число, з яким ви зможете зробити аналогічні дії. Після введення двох чисел на екрані з`явиться меню, в якому вам буде запропоновано зробити такі дії з комплексними числами, як визначення суми, різниці, множення, ділення, модулю першого або другого числа, переведення в тригонометричну форму, піднесення до степені за формулою Муавра.
При запуску програма має вигляд:
Рисунок 1
При вибиранні 1 або 2 пункту программа має вигляд:
Рисунок 2
Вибираємо те, що хочемо, наприклад: 1. з клавіатури:
РРисунок 3
Аналогічно вводимо друге число, та вибираємо той пункт плану який хочемо переглянути, наприклад: 9.Перевести друге число в тригонометричну форму.Отримаємо:
Рисунок 4
Якщо ми вибиремо 11 пункт плану то отримаємо наступний вигляд програми:
Р Рисунок 5
Якщо ми виберемо 6 пункт плану, отримаємо:
РРисунок 6
А (13)1/2=3.61 отже отримані результати збігаються із заданими, отже програма обчислює правильно
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14
struct Compl {
float a,b;
float fi;
};
FILE *in, *out;
Compl vvod (Compl &X, FILE *in){
float x,y;
char c;
if ( in == NULL){
printf("Enter a complex number in the format a+bi\n");
while(scanf("%f%c%fi",&x,&c,&
printf("error: povtorite vvod");
fflush(stdin);
}
} else {
if(fscanf(in,"%f%c%fi",&x,&c,&
printf("error read from file!\n");
}
}
if ( c == '-' && y != 0) y = -y;
X.a = x;
X.b = y;
return X;
}
void vivod (Compl X, FILE *out){
if ( out == NULL) {
printf("%.2f",X.a);
if ( X.b >= 0) printf("+");
printf("%.2fi\n",X.b);
} else {
fprintf(out,"%.2f",X.a);
if ( X.b >= 0) fprintf(out,"+");
fprintf(out,"%.2fi\n",X.b);
fflush(out);
}
}
Compl summa (Compl A, Compl B){
Compl rez;
rez.a = A.a+B.a;
rez.b = A.b+B.b;
return rez;
}
Compl raznost (Compl A, Compl B){
Compl rez;
rez.a = A.a-B.a;
rez.b = A.b-B.b;
return rez;
}
Compl proizv (Compl A, Compl B){
Compl rez;
rez.a = (A.a*B.a-A.b*B.b);
rez.b = (A.a*B.b+A.b*B.a);
return rez;
}
Compl del (Compl A, Compl B){
Compl rez;
rez.a=((A.a*B.a)+(A.b*B.b))/((
rez.b=((A.b*B.a)-(A.a*B.b))/((
return rez;
}
double modul ( Compl X){
double rez;
rez = pow((X.a*X.a + X.b*X.b),0.5);
return rez;
}
void trigon ( Compl &A) {
A.fi = acos(A.a/modul(A));
}
void trigon2 ( Compl &B) {
B.fi = acos(B.b/modul(B));
}
void compl_pow(Compl &A, int n, int p){
double r = modul(A);
double ncos,nsin;
r = pow(r,n);
ncos =cos(n*A.fi);
nsin =sin(n*A.fi);
if ( p == 0){
printf("%.2lf(%.2lf+i*%.2lf)\
}
else {
fprintf(out,"%.2lf(%.2lf+i*%.
}
}
void compl_pow2(Compl &B, int n, int p){
double r = modul(B);
double ncos,nsin;
r = pow(r,n);
ncos =cos(n*B.fi);
nsin =sin(n*B.fi);
if ( p == 0){
printf("%.2lf(%.2lf+i*%.2lf)\
}
else {
fprintf(out,"%.2lf(%.2lf+i*%.
}
}
int n;
int main (){
Compl X,Y,Z;
int v,v2, inMethod1, inMethod2;
clrscr();
out = fopen("output.txt","w");
printf("Specify the input method for first number.\n");
printf("1. - Input keyboard\n");
printf("2. - Input data from file\n");
printf("3. - Create input file and read data from it\n");
printf("4. - Skip\n");
printf("\t Enter your choice:");
scanf("%d", &inMethod1);
switch (inMethod1) {
case 1: { vvod(X,NULL);
trigon(X); double r = modul(X);
break;}
case 2: {
fclose(in);
in = fopen("input1.txt","r");
vvod(X,in);
trigon(X); double r = modul(X);
break;
}
case 3: {
vvod(X,NULL);
trigon(X); double r = modul(X);
fclose(in);
in = fopen("input1.txt", "w");
vivod(X, in);
break;
}
};
printf("Press any key....");
getch();
clrscr();
printf("Specify the input method for second number.\n");
printf("1. - Input keyboard\n");
printf("2. - Input data from file\n");
printf("3. - Create input file and read data from it\n");
printf("4. - Skip\n");
printf("\t Enter your choice:");
scanf("%d", &inMethod2);
switch (inMethod2) {
case 1: { vvod(Y,NULL);
trigon2(Y); double r = modul(Y);
break;}
case 2: {
fclose(in);
in = fopen("input2.txt","r");
vvod(Y,in);
trigon2(Y); double r = modul(Y);
break;
}
case 3: {
vvod(Y,NULL);
trigon2(Y); double r = modul(Y);
fclose(in);
in = fopen("input2.txt", "w");
vivod(Y, in);
break;
}
};
printf("Press any key....");
getch();
clrscr();
do {
printf("1. Make a sum of complex numbers\n");
printf("2. Make the difference of complex numbers\n");
printf("3. Make the multiplication of complex numbers\n");
printf("4. Make the division of complex numbers\n");
printf("5. Make a module of the first number\n");
printf("6. Make a module of the second number\n");
printf("7. Translate the first number in trugonomic form\n");
printf("8. Translate the second number in trugonomic form\n");
printf("9. Raise the first number to the power of the formula Moivre\n");
printf("10. Raise the second number to the power of the formula Moivre\n");
printf("11. Exit the program\n");
printf("\t Enter your choice:");
scanf("%d",&v);
switch (v) {
case 1:{ // summa chisel
if(inMethod1 == 4 || inMethod2 == 4) {
printf("error\n");
} else {
Z = summa(X,Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: { vivod(X,NULL);
printf(" + \n");
vivod(Y,NULL);
printf(" = ");
vivod(Z,NULL); break;
}
case 2: {
vivod(X,out);
fprintf(out," + \n");
vivod(Y,out);
fprintf(out," = ");
vivod(Z,out);
break;
}
}
}
printf("Press any key....");
getch();
clrscr();
break;
};
case 2:{ // raznost chisel
if(inMethod1 == 4 || inMethod2 == 4) {
printf("error\n");
} else {
Z = raznost(X,Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: { vivod(X,NULL);
printf(" - \n");
vivod(Y,NULL);
printf(" = ");
vivod(Z,NULL); break;
}
case 2: {
vivod(X,out);
fprintf(out," - \n");
vivod(Y,out);
fprintf(out," = ");
vivod(Z,out);
break;
}
}
};
printf("Press any key....");
getch();
clrscr();
break;};
case 3:{ // proizvedenie
if(inMethod1 == 4 || inMethod2 == 4) {
printf("error\n");
} else {
Z = proizv(X,Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: { vivod(X,NULL);
printf(" * \n");
vivod(Y,NULL);
printf(" = ");
vivod(Z,NULL); break;
}
case 2: {
vivod(X,out);
fprintf(out," * \n");
vivod(Y,out);
fprintf(out," = ");
vivod(Z,out);
break;
}
}
}
printf("Press any key....");
getch();
clrscr();
break;};
case 4:{ // delenie
if(inMethod1 == 4 || inMethod2 == 4) {
printf("error\n");
} else {
Z = del(X,Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: { vivod(X,NULL);
printf(" / \n");
vivod(Y,NULL);
printf(" = ");
vivod(Z,NULL); break;
}
case 2: {
vivod(X,out);
fprintf(out," / \n");
vivod(Y,out);
fprintf(out," = ");
vivod(Z,out);
break;
}
}
};
printf("Press any key....");
getch();
clrscr();
break;};
case 5: { // modul pervogo chisla
if(inMethod1 == 4) {
printf("error\n");
} else {
double r = modul(X);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: {
printf("|\n"); vivod(X,NULL); printf("|\n");
printf("=%.2f\n",r);
break;
}
case 2: {
fprintf(out,"|\n"); vivod(X,out); fprintf(out,"|\n");
fprintf(out,"=%.2f\n",r);
break;
}
};
}
printf("Press any key....");
getch();
clrscr();
break;};
case 6:{ // modul vrotogo chisla
if(inMethod2 == 4) {
printf("error\n");
} else {
double r = modul(Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: {
printf("|\n"); vivod(Y,NULL); printf("|\n");
printf("=%.2f\n",r);
break;
}
case 2: {
fprintf(out,"|\n"); vivod(Y,out); fprintf(out,"|\n");
fprintf(out,"=%.2f\n",r);
break;
}
};
}
printf("Press any key....");
getch();
clrscr();
break;
};
case 7:{
if(inMethod1 == 4) {
printf("error\n");
} else {
trigon(X); double r = modul(X);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: {
printf("%.2lf(cos(%.2lf)+i*
break;
}
case 2: {
fprintf(out,"%.2lf(cos(%.2lf)+
break;
}
}
}
printf("Press any key....");
getch();
clrscr();
break;
}
case 8:{
if(inMethod2 == 4) {
printf("error\n");
} else {
trigon2(Y); double r = modul(Y);
printf("1. - output on display\n");
printf("2. - output in file\n");
scanf("%d",&v2);
switch (v2) {
case 1: {
printf("%.2lf(cos(%.2lf)+i*
break;
}
case 2: {
fprintf(out,"%.2lf(cos(%.2lf)+
break;
}
}
}
printf("Press any key....");
getch();
clrscr();
break;
};
case 9:{
if(inMethod1 == 4) {
printf("error\n");
} else {
printf("Enter the degree of:"); scanf("%d",&n);
printf("1. - display\n");
printf("2. - file\n");
scanf("%d",&v2);
switch (v2){
case 1: {
compl_pow(X,n,0);
break;
}
case 2: {
compl_pow(X,n,1);
}
}
}
printf("Press any key....");
getch();
clrscr();
break;
};
case 10:{
if(inMethod2 == 4) {
printf("error\n");
} else {
printf("Enter the degree of:"); scanf("%d",&n);
printf("1. - display\n");
printf("2. - file\n");
scanf("%d",&v2);
switch (v2){
case 1: {
compl_pow(Y,n,0);
break;
}
case 2: {
compl_pow(Y,n,1);
}
}
}
printf("Press any key....");
getch();
clrscr();
break;
};
case 11:{fclose(in); fclose(out); exit(0); };
};
} while (1);
}
1) uk.wikipedia.org/wiki/
2)
8