Приклади програм
Приклад 1.Дано дві дійсні змінні. Здійснити взаємний обмін їх значень. Розробити функцію обміну значеннями двох дійсних змінних.
Розв’язок.
#include <iostream> #include <conio.h> using namespacestd;voidSwapAB(double*a,double* b); // Формальні// параметри-вказівникиint main(){ doublea,b; cout << "a = "; cin >> a; cout << "b = "; cin >> b; SwapAB(&a, &b); //Фактичні параметри - адреси змінних cout << "a = " << a << " b = " << b << '\n';cout << "Press any key"; _getch();return0;}void SwapAB(double*a,double *b){ doublebuf = *a; *a = *b; *b = buf;return;}
Приклад 2.Дано
натуральне числоn(
)
і дійсні числа
,
,
…,
.
Замінити елементи послідовності
,
,
…,
новими значеннями
,
,
…,
,
обчислюваними за таким правилом:
,
де
,
,
.
Визначити три функції – уведення
послідовності, обчислення значень
(середнє) і
(оцінка величини, що має назву «дисперсія»)
і перетворення послідовності.
Розв’язок.
#include<iostream> #include<conio.h>using namespacestd;// Прототипи функційintReadArray(double*x,int*n, int N = 20); // Уведення voidPrintArray(double*x,intn);// Виведення масивуdoubleSum(double*x,intn);// Підсумовування елементівvoidMeanAndDisp(double*Mean,double*Variance,// Обчис-double*x,intn);// лення середнього і дисперсіїintTransformtion(double*x,intn,// Перетворенняdoublem,doubles);// масивуintmain() {doublex[20],m,s;intn;do{ }while(ReadArray(x, &n, sizeof(x) /sizeof(x[0])) == -1);MeanAndDisp(&m, &s,x,n);if(Transformtion(x,n,m,s) == -1)cout<< "Error\n";elsePrintArray(x,n);cout<< "Pressanykey"; _getch();return0; }// Функція введення масивуintReadArray(double*x,int*n, int N) {cout<< "n= ";cin>> *n;// Розіменування вказівникаif(*n< 1 || *n>sizeof(x))// Невірне значенняnreturn-1;// Код помилкової ситуаціїfor(inti= 0;i< *n;i++) {// Оскільки ім'я масиву - вказівник можнаcout<< "x[" <<i<< "] = ";// використовуватиcin>>x[i];// індексування} return 0; // Нормальне завершення функції} // Функція виведення масивуvoid PrintArray(double *x, int n){ for (int i = 0; i < n; i ++) cout << x[i] << " "; cout << '\n'; return; // Вихід з void-функції} // Функція підсумовування елементів масивуdouble Sum(double *x, int n){ double m = 0; for (int i = 0; i < n; i++) m += x[i]; return m;} // Функція обчислення середнього і оцінки дисперсіїvoid MeanAndDisp(double *Mean, double *Variance, double *x, int n){ // Оскільки Mean і Variance - вказівники, їх розімену- // вання забезпечує доступ до відповідних змінних поза *Mean = Sum(x, n) / n; // функцією *Variance = 0; for (int i = 0; i < n; i ++) *Variance += (x[i] - *Mean) *(x[i] - *Mean); *Variance /= (n - 1); return; // Вихід з void-функції} // Функція перетворення масивуint Transformtion(double *x, int n, double m, double s){ // Оскільки x - вказівник уміст масиву змінюватиметься if (n == 1) // Перетворення неможливе? return -1; // Код помилкової ситуації for (int i = 0; i < n; i ++) // Перетворення масиву x[i] = (x[i] - m) / sqrt(s); return 0; // Нормальне завершення функції }
Приклад 3.Дано
натуральне числоn(
)
і два цілочислових масивиVіW, кожен з яких має
не більшеnелементів.
Видалити з масивуVусі елементи, що містяться в масивіW.
Визначити і використати функцію, що
видаляє з одновимірного цілочислового
масиву всі числа, які входять у другий
масив.
Розв’язок.
#include <iostream> #include <conio.h> using namespacestd;// Прототипи функційintReadArray(int*x,int*n, int N = 100);voidPrintArray(int*x,intn);voidDifference(int *V,int *nV,int *W,int nW);int main() {int V[100], W[100];int nV, nW; cout << "Array V:\n";do// Уводимо розмір масивуVі його елементи{ }while(ReadArray(V, &nV, sizeof(V) /sizeof(V[0])) == -1); cout << "Array W:\n";do// Уводиморозмір масивуWі його елементи{ }while(ReadArray(W, &nW, sizeof(W) /sizeof(W[0])) == -1); Difference(V, &nV, W, nW);// ОбчислюємоV = V – WPrintArray(V, nV); cout << "Press any key"; _getch();return0; }// Функція введення масивуintReadArray(int*x,int*n, int N) { cout << "Count of elements: "; cin >> *n;// Розіменування вказівникаif(*n < 1 || *n >N) // Невірне значенняnreturn -1;// Код помилкової ситуаціїfor(inti = 0; i < *n; i++) {// Оскільки ім'я масиву - вказівник можна вико-cout << "Element[" << i << "] = ";// ристовуватиcin >> x[i];// індексування}return0;// Нормальне завершення функції}// Функція виведення масивуvoidPrintArray(int*x,int n) {if(n == 0) cout << "Empty";elsefor(inti = 0; i < n; i ++) cout << x[i] << " "; cout << '\n';return;// Вихідзvoid-функції}// Функція нового масиву Vvoid Difference(int *V,int *nV,int *W,int nW) {// Оскільки x- вказівник уміст масиву змінюватиметьсяbool Flag;int i = 0, k = 0;while (i < *nV) { Flag =true;// Вважаємо, що V[i]відсутнє в Wfor (int j = 0; j < nW; j++)if (V[i] == W[j]) {// Значення V[i] міститься в масиві WFlag =false;break; }if(Flag)// Якщо V[i] відсутнє в масиві W, {// Записуємо його у позицію k масиву VV[k] = V[i]; k++; } i++;// Переходимо до розгляду нового елемента } *nV = k; // Новий розмір масиву V return; // Вихід з void-функції}
