Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сука лаби.docx
Скачиваний:
17
Добавлен:
12.05.2015
Размер:
848.39 Кб
Скачать

Порядок виконання роботи

А.При п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

У одновимірному комплексному масиві поміняти місцями елементи з найбільшою та найменшою дійсними частинами. Обчислити їх добуток.

Обчислити z = (x +y/w)*v-1 , z1 = eZ

2

У одновимірному комплексному масиві обчислити суму елементів , у яких дійсна частина менша ніж уявна , та добуток елементів із додатною уявною частиною.

Обчислити z = (x/y – w/v)*x + 2 , z1 = 2eZ

3

У одновимірному комплексному масиві полічити кількість елементів , у яких дійсна частина додатна , а уявна від’ємна , а також їх суму.

Обчислити z = (x*v-y/w)*2 + 3 , z1 = 3e2Z

4

У одновимірному комплексному масиві знайти елемент із найбільшим значенням середнього арифметичного його дійсної та уявної частин і поміняти з першим.

Обчислити z = (w/y + x)*v – 4 , z1 = 1.5e2Z

5

У одновимірному комплексному масиві обчислити суму елементів із додатною дійсною частиною і суму елементів із від’ємною уявною частинами. Наскільки відрізняються суми?

Обчислити z = (x*x – w/y)*v + 3 , z1 = 3e2.2Z

6

У одновимірному комплексному масиві поміняти місцями елементи з найбільшим та найменшим абсолютними значеннями. Обчислити їх суму.

Обчислити z = (x2 + y2)/w + v -1 , z1 = -1.5e3Z

7

У одновимірному комплексному масиві розташувати елементи у порядку зростання їх дійсної частини.

Обчислити z = x*y*v – w/x + 3 , z1 = 2.35e2.2Z

8

Якщо сума дійсних частин одновимірного комплексного масиву перевищує добуток уявних частин ,то масив переписати у зворотному порядку.

Обчислити z = x +y/v – w/x – 2 , z1 = 3.5e-2Z

9

Створити новий масив із елементів одновимірного комплексного масиву ,у яких сума їх дійсних та уявних частин перевищує їх добуток. Який його розмір?

Обчислити z = (y/x + w/v)*w + 1.5 , z1 = -0.5e2.7Z

10

У одновимірному комплексному масиві обчислити суму та кількість елементів , у яких аргумент не перевищує 1.

Обчислити z = (x*v + w/x)/y – 3.3 , z1 = 2.15e2Z

11

Визначити у одновимірному комплексному масиві найменшe середнє арифметичне дійсних частин двох сусідніх елементів та їх індекси ,елемент цієї двійки із найбільшою дійсною частиною .

Обчислити z = (w + v)/x – y*v – 3 , z1 = 5.5e2.4Z

12

Визначити у одновимірному комплексному масиві найбільшу різницю уявних частин двох сусідніх елементів та їх індекси , найменшу уявну частину цієї пари .

Обчислити z = [(w*v –y/x) + 2]*y , z1 = -0.5e2.7Z

13

Замінити у елементів одновимірного комплексного масиву від’ємні дійсні частини сумою дійсних частин першого та останнього елементів , зафіксувати кількість змін .

Обчислити z = (v*x+w/y)*x -1.1 , z1 = 1.75e-3Z

14

Визначити , наскільки сума елементів першої половини одновимірного комплексного масиву відрізняється від суми елементів другої половини . Замінити перший та останній елементи масиву відповідними сумами .

Обчислити z = (x – y + v)/w + x*y -3.3 , z1 = 1.8e0.24Z

15

Обчислити суму та добуток усіх елементів одновимірного комплексного масиву .Замінити елемент із найбільшою нормою сумою , а елемент із найменшою добутком .

Обчислити z = (w*x + x*y)/(w + v)-0.45 , z1 = 1.33e0.33Z

16

Обчислити у одновимірному комплексному масиві середнє арифметичне елементів із додатною уявною частиною та середнє арифметичне елементів із від’ємною дійсною частиною та перемножити їх ,усі елементи поділити на цей добуток .

Обчислити z = (v/x + w)*(y – x) +2.1 , z1 = 11.5e0.1Z

17

Визначити у одновимірному комплексному масиві найменший по модулю елемент та його індекс, суму елементів із додатними дійсними частинами , розташованих після нього , та кількість там елементів із від’ємними уявними частинами.

Обчислити z = (v + w)/(x – y) + w*x -0.3 , z1 = 0.55e-0.66Z

18

Визначити у одновимірному комплексному масиві найменшу норму добутку трьох сусідніх елементів та їх індекси , найменшу норму елемента цієї трійки.

Обчислити z = x*(w + v) – y*(w – v)/x -1.11 , z1 = 10.5e-0,02Z

19

Визначити у одновимірному комплексному масиві елемент із найменшою дійсною частиною та його індекс , добуток від’ємних уявних частин усіх елементів ,яким замінити уявну частину цього елементу.

Обчислити z = (w + v/x)*y – x*x + 1.23 , z1 = 1.11e0.11Z

20

Створити новий масив із елементів одновимірного комплексного масиву , у яких їх дійсна частина перевищує їх уявну частину. Який його розмір?

Обчислити z = x*y*v/w + w*w +2.44 , z1 = 4.5e3Z

21

У одновимірному комплексному масиві розташувати елементи у порядку зменшення їх дійсної частини.

Обчислити z = x/y/w + v/(x + 1) , z1 = 7.5e-3.3Z

22

Створити новий двовимірний масив із елементів одновимірного комплексного масиву: перший рядок – дійсні частини елементів,

другий рядок – уявні частини. У якому рядку більше додатних елементів?

Обчислити z = (x + 1)*(y+2)/(w – 3)+ v + 1 , z1 = 1.1e-3Z

23

У скількох елементів одновимірного комплексного масиву дійсна та уявна частини різного знака? Обчислити суму елементів із однаковими знаками частин.

Обчислити z = (w + 2v)/x + 2y -7 , z1 = -1.5e-4Z

24

У одновимірному комплексному масиві обчислити суму та кількість елементів , які у полярних координатах знаходяться у другому квадранті?

Обчислити z = (x-1)*(y + 2)/(w + v) – 3.3 , z1 = 1.9e6Z

25

Створити новий масив із комплексно-спряжених значень елементів заданого одновимірного комплексного масиву. Наскільки змінилася сума елементів?

Обчислити z = (y + w)*(x + 3)/v-y + .06 , z1 = 8.5e0.03Z

26

Створити еквівалент елементів одновимірного комплексного масиву X за таким правилом : кожному елементу ставиться у відповідність пара сусідніх елементів, із яких перший елемент – це модуль m заданого елемента ,а другий елемент – аргумент φ ,

XK = mk * exp (j φk).

Обчислити z = (x+1)/(y + 2)/(v-3)*(w + 2) , z1 = 1.87e43Z

27

Обчислити скалярний добуток двох половин елементів одновимірного комплексного масиву.

Обчислити z = x/(y + 2) – (w + 3)/v – 1.33 , z1 = 3.5e-3Z

28

Створити новий масив із елементів одновимірного комплексного масиву: перший рядок – суми дійсної та уявної частин елементів,

другий рядок - добутки дійсної та уявної частин. У якому рядку більше від’ємних елементів ?

Обчислити z = x +y*(w + v)/(y + w + v) -9 , z1 = -5.5e4Z

29

У якому квадранті полярних координат більше елементів одновимірного комплексного масиву із додатною дійсною частиною ?

Обчислити z = (x + y – w +v)/(x – y + w – v) + 1 , z1 = 7.5e-0.75Z

30

Обчислити скалярний добуток масиву дійсних частин та масиву уявних частин елементів одновимірного комплексного масиву. Порівняти його із сумою дійсних та уявних частин елементів.

Обчислити z = (x * y – w +v)/(x – y + w/ v) + 6 , z1 = -3.5e1.75Z

ДОДАТОК А

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 << " ";

}