- •Алгоритмічні мови та програмування Методичні вказівки
- •Алгоритмічні мови та програмування Методичні вказівки
- •03056, Київ, вул..Політехнічна, 12, корп. 17
- •Порядок виконання роботи
- •Загальні відомості для виконання лабораторної роботи
- •0X число (шістнадцяткове),
- •0 Число(число (вісімкове),
- •Результат виконання
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Доступ до елемента масиву
- •Запис вектора у стовпець (рядок) масиву
- •Зміна стовпців масиву
- •Додаткові засоби
- •Теоретична частина
- •Порядок виконання роботи
- •Теоретична частина
- •Порядок виконання роботи
- •Додаток
- •Порядок виконання роботи
- •Результати виконання програми
- •Результати виконання програми
- •Порядок виконання роботи
- •Добирання формул за дослiдними даними згiдно методу найменших квадратiв
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Порядок виконання роботи
- •//Функція
- •//Динамічні масиви
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
- •Порядок виконання роботи
Порядок виконання роботи
А.При пiдготовцi :
1. Ознайомитися із додатком А ,де наведені формули виконання операцій з комплексними числами та основні функції бібліотеки complex.h.
2.Ознайомитися з програмами COMPLEX1.CPP i COMPLEX2.CPP (додаток В) , у яких наведені приклади встановлення комплексного типу різними способами , приклади роботи із комплексними змінними та приклади виконання циклічних процедур. Комплексний тип змінних можна ввести :
а. Створенням відповідної структури із двох дійсних складових ,тоді операції із комплексними змінними перетворюються у операції зі змінними структурного типу , які краще реалізовувати у вигляді функцій або макрокоманд;
б. Використанням структурного типу complex подвійної точності із бібліотеки math.h , у якій крім означення типу немає програмних реалізацій операцій із комплексними змінними ;
в. Використанням спеціальної бібліотеки complex.h , у якій для типу complex переозначені усі операції та функції.
3. Розробити алгоритми та написати дві програми для виконання завдання у нижченаведеній таблиці із використанням введення комплексного типу за першим та третім способами. Підготувати тести для налагоджування програм.
4.Підготувати шаблон звіту.
В.У лабораторii:
1.Виконати підготовлені програми .
2.Порівняти результати обчислень та зробити висновки.
3.Заповнити звіт.
Змiст звiту:
1.Алгоритми розрахунків та програми. Результати виконання.
2.Порівняння результатів та відповідні висновки.
3.Пропозиції по роботі.
Таблиця завдань
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
ДОДАТОК А
1. Для комплексних змінних x = a + j b та y = c + j d арифметичні операції виконуються за такими алгоритмами :
Додавання z = x + y = (a + c) + j (b + d)
Віднімання z = x - y = (a - c) + j (b - d)
Множення z = x * y = (a*c – b*d) + j (a*d + b*c)
Ділення z = x / y = [(a*c + b*d) + j (-a*d + b*c)]/(c2 +d2 )
z = 1/x = ( a – j b)/ )/(a2 + b2 )
2. Основні співвідношення
алгебраїчний запис x = a + j b
норма n= a2 + b2
модуль або абсолютне значення m = √n
аргумент φ = arc tg (b/a)
тригонометричний запис x = m *(cos φ + j sin φ )
a = m*cos φ , b = m*sin φ
показниковий запис x = m* exp(j φ)
z = eX z = exp (x) = exp(a) * (cos b + j sin b)
3. Основні функції бібліотеки complex
Для комплексного x = a + j b :
дійсна частина a = real (x) , уявна частина b = imag (x) (тип double) ,
норма n = a2 + b2 = norm(x) ,
модуль (абсолютне значення) m = √n = abs(x) ,
аргумент φ = arc tg (b/a) = arg (x) ,
комплексно-спряжене значення a - j b = conj (x) ,
створення х із двох дійсних значень a,b x = complex (a,b)
ДОДАТОК B
Програма COMPLEX1.CPP
#include <iostream.h>
#include <conio.h>
#include <math.h>
#define n 4
/*Введення комплексного типу даних*/
#define COMPLEX1 struct complex_type1
COMPLEX1
{
float real;
float imag;
};
/* другий варiант введення комплексного типу даних */
struct complex_type2
{
double real;
double imag;
};
struct complex_type2 c2[n];
/* макрокоманда додавання */
#define add(zres, xarg, yarg) \
zres.real = xarg.real + yarg.real;\
zres.imag = xarg.imag + yarg.imag
/* функцiя додавання */
struct complex_type2 addc (complex_type2 xarg, complex_type2 yarg
{
complex_type2 t;
t.real = xarg.real + yarg.real;
t.imag = xarg.imag + yarg.imag;
return t;
}
/* функцiя множення */
COMPLEX1 mult ( COMPLEX1 xarg, COMPLEX1 yarg)
{
COMPLEX1 m;
m.real = xarg.real*yarg.real - xarg.imag*yarg.imag;
m.imag = xarg.real*yarg.imag + xarg.imag*yarg.real;
return m;
}
void main ()
{
/*операцiї зi змiнними типу COMPLEX1 */
COMPLEX1 x1 = {1, 3 }, y1 = {4, -5}, v1;
add(v1,x1, y1); //додавання
cout << "\n v1 = (" << v1.real << ")+j*(" << v1.imag << ")";
getch();
v1 = mult (x1, y1); //множення
cout << "\n v1 = (" << v1.real << ")+j*(" << v1.imag << ")";
getch();
/*операцiї зi змiнними типу complex_type2 */
complex_type2 x2 = {1, 3}, y2 = {4, -5}, v2;
add(v2,x2,y2);
cout << "\n v2 = (" << v2.real << ")+j*(" << v2.imag << ")";
getch();
v2=addc(x2,y2);
cout << "\n v2 = (" << v2.real << ")+j*(" << v2.imag << ")";
getch();
float v2abs, v2fi;
v2abs = sqrt(v2.real*v2.real + v2.imag*v2.imag);
v2fi = atan(v2.real/v2.imag);
// v2 = v2abs*(cos(v2fi) + j*sin(v2fi))
cout << "\n v2 = (" << v2abs << ")*(" << cos(v2fi) <<
" + j*(" << sin(v2fi) << "))";
getch();
clrscr();
COMPLEX1 c1[n]; float a, b; int i, im1, im2,im3, im4;
extern void prnt1(COMPLEX1 com[]);
clrscr ();
cout << "\n Введiть масив C1 (n комплексних чисел) \n";
for (i = 0; i < n; i ++)
{
cin >> a >> b;
c1[i].real = a; c1[i].imag = b;
}
prnt1(c1);
/*Циклiчний обчислювальний процес*/
/*Пошук номера першого елемента массиву,у
якого дiйсна частина перевищує уявну*/
cout << "\n\n\tПошук номера першого елемента массиву,\
\n\t y якого дiйсна частина перевищує уявну";
cout << "\n\n\t Простий цикл (C1) ";
i = 0;
m: if (c1[i].real > c1[i].imag)
{
im1 = i; cout << "\t im1 = " << im1;
goto m1;
}
i++;
if (i < n) goto m;
else
cout << "\t нема";
m1: getch();
cout<<"\n\n\t Цикл FOR (C2)";
for (i = 0; i < n; i ++)
{
if(c1[i].real > c1[i].imag)
{
im2 = i; cout << "\t im2=" << im2;
break;
}
}
if (i == n) cout << "\t нема";
getch();
cout << "\n\n\t Цикл WHILE (C3)";
i = 0;
while ( i < n)
{
if (c1[i].real>c1[i].imag)
{
im3 = i; cout << "\t im3 = " << im3;
break;
}
i++;
}
if (i == n) cout << "\t нема";
getch();
cout << "\n\n\t Цикл DO WHILE (C3)"; i = 0;
do
{
i++;
}
while (c1[i].real <= c1[i].imag);
im4=i;
if (i < n)
cout << "\t im4 = " << im4;
else
cout << "\t нема";
getch();
}
/*Функцiя виведення масиву*/
void prnt1(COMPLEX1 com[])
{
cout << " control1 ";
for (i = 0; i < n; i ++)
cout << com[i].real << "+j*" << com[i].imag << " ";
}