Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
glinskiymetodichka-s.doc
Скачиваний:
24
Добавлен:
15.08.2019
Размер:
2.7 Mб
Скачать

§ 12. Масиви

1. Масиви. Масив - це впорядкований скінченний набір даних одного типу, які зберігаються в послідовно розташо­ваних комірках оперативної пам'яті і мають спільну назву. Назву масиву надає користувач.

Масив складається з елементів. Кожен елемент має індек­си, за якими його можна знайти у масиві. Кількість індексів визначає розмірність масиву. Розрізняють одно- та багатови­мірні масиви. Наприклад, двовимірний масив даних - це таб­лиця, що складається з декількох рядків і стовпців. У матема­тиці поняттю масив відповідають поняття вектора та матриці.

Загальний вигляд конструкції опису одномірного масиву такий:

<тип> <ім'я масиву>[<розмір>]

Розмір — це кількість елементів масиву. Розмір масиву необхідно знати і задавати заздалегідь, оскільки компілятор має зарезервувати для нього необхідний обсяг пам'яті. Розмі­ром може бути лише стала величина (не змінна).

Ім'я масиву у програмі змінювати не можна - це стала ве­личина, яка містить адресу першого елемента. Отже, назва масиву є вказівником на перший елемент.

Наприклад, команда int stud[5] оголошує масив з іменем stud, який складається із п'яти цілих чисел; команда float rist[10] оголошує масив rist, який містить десять чисел дійсного типу; char alphavit[6] - оголошення масиву із 6 символів.

Звернутись до елементів масиву можна двома способами: за допомогою імені масиву або використовуючи вказівники.

Зауваження 1. У навчальних цілях використання імен більш наочне, однак відповідно до професійного підходу слід надава­ти перевагу вказівникам.

Нумерація елементів масиву завжди починається з нуля. Щоб звернутись до деякого елемента, необхідно зазначити ім'я масиву, а у квадратних дужках - його номер. Наприк­лад, змінна stud[2] є третім елементом масиву stud, a stud[4] -п'ятим, оскільки масив stud має елементи

stud[O], stud[1], stud[2], stud[3] та stud[4].

Зауваження 2. Компілятор мови C++ не контролює належність індексу до заданого діапазону. Відповідальність за це несе про­граміст. Наприклад, якщо у програмі оголосити масив mas з п'ятьма дійсними числами і написати команду mas[54] = 2, то повідомлення про помилку не буде, проте невідомо, у яку ділянку пам'яті потрапить число 2 і що трапиться.

Назва масиву stud є вказівником на його перший елемент. Змінна *stud містить значення першого елемента масиву (еле­мента stud[O]). Оскільки всі елементи масиву розміщені у по­слідовних комірках оперативної пам'яті комп'ютера, то вка­зівник (stud+1) вказуватиме на другий елемент масиву (змі­щення відносно вказівника stud на одну одиницю пам'яті), а вказівник (stud + 4) - на п'ятий (зміщення на чотири одиниці).

Проініціалізувати масив (надати значення елементам масиву) можна одним із способів:

  • використовуючи принцип замовчування;

  • безпосередньо під час його оголошення;

  • застосовуючи команду присвоєння;

  • під час введення даних із клавіатури.

За замовчуванням усім елементам масиву надається зна­чення 0. Масив можна ініціалізувати повністю або частково відразу під час його оголошення, записуючи значення змін­них через кому у фігурних дужках. Наприклад,

int Stud[] = {2, 10, 5, 7, 3};

float rist[10] = {163.4, 154.6, 170, 172,8, };

char alphavit[6] = "Абетка"

або char alphavit[6] = {'А', 'б1, 'e', V, Y, 'a'}.

Перші чотири елементи масиву rist були проініціалізовані, а решта - ні. Масиви символів детальніше розглянемо у нас­тупному параграфі.

Якщо масив повністю ініціалізують під час оголошення,

то його розмір зазначати не обов'язково. У цьому випадку компілятор сам визначає, скільки пам'яті необхідно зарезер­вувати. У наведеному прикладі масив Stud складатиметься з п'яти цілих чисел.

Надати значення іншим елементам масиву rist або змінити значення вже проініціалізованих елементів можна командою присвоєння, наприклад, так: rist[3] = 175.4, rist[9] = 184.1 або так: *(rist + 2) = 164.5, *(rist + 7) = 148.0 тощо. Елементи масиву також можна вводити з клавіатури під час виконання програми, як це робимо для змінних простих стандартних типів.

Масиви-сталі (значення яких змінювати у програмі не можна) оголошують так: const int flag[] = {1, 2}.

Сталі масиви треба ініціалізувати під час оголошення, інакше елементам масиву автоматично будуть присвоєні ну­льові значення.

Для опрацювання елементів масиву найчастіше викорис­товують команду циклу for, хоча можна застосувати і while або do-while.

Приклад 1. Створити масив з перших ста цілих чисел і обчислити суму всіх його значень можна одним із способів:

Задачі відшукання в масиві конкретних даних розв'язу­ють методом сканування (перебирання, перегляду) всіх еле­ментів масиву за допомогою циклу й умовної команди, де зазначають умову пошуку потрібних даних.

2. Динамічне оголошення масивів. Під час компіляції програмного коду для статично оголошених масивів надається пам'ять. Для ефективного використання пам'яті призначене динамічне оголошення масивів, а саме:

<тип вказівника> *<назва> = new <тип змінної>[<кількість>];

Після виконання цієї команди буде виділена неперервна ділянка пам'яті обсягом

sizeof(тип змінної) * <кількість> ,

і назва масиву вказуватиме на початок цієї ділянки.

З динамічною змінною можна виконувати операції, визна-ч<<>>ні для даних відповідного базового типу.

Після опрацювання масиву вивільнити пам'ять можна за допомогою команди

Delete[] <назва вказівника на масив даних>;

Під час вивільнення пам'яті розмір масиву зазначати не потрібно.

Розв'яжемо задачу з прикладу 1, використовуючи дина­мічний розподіл пам'яті

int *n = new int [100]; // Виділяємо пам'ять для ста цілих чисел

for(intS = 0, k = O;k< 100;)

{ // Опрацьовуємо масив

*(n+k) = ++k;

S += *(n+k);

} delete[] n; // Вивільняємо пам'ять

За допомогою динамічних змінних можна розв'язати за­дачу почергового опрацювання одною програмою деякої кіль­кості великих масивів (якщо всі масиви не можливо одно­часно ввести у пам'ять). Задачу розв'язують так. Створюють масив, наприклад, *mas1 = new <тип>[<кількість>] і опрацьовують динамічні змінні *mas1, *(mas1+1), ... Вивільняють пам'ять deleteQ mas1. Створюють й опрацьовують елементи другого ма­сиву *mas2 = new <тип> [<кількість> ] і т.д.

Задача 1 (про АТС). Нехай у^ — це число викликів, які надходять на АТС за А-ту секунду. Припустимо, що yk - ви­падкове число зі значенням від 0 до ЗО. Утворити масив у з десятьма елементами (k = 1, 2, ..., 10). Обчислити суму викли­ків за перші 10 с роботи АТС. Визначити максимальну суму викликів, які надійшли за деяку одну секунду. Вивести ре­зультати обчислень.

Зауваження 3. Для того, щоб отримати ціле випадкове число з діапазону від 0 до п, можна скористатись функцією random(n), яка описана у модулі stdlib.h. Щоб під час виконання програ­ми кожен раз отримувати різні значення, перед використання функції randomO треба записати функцію randomize().

#include <iostream.h> // Програма до задачі про АТС

#include <conio.h>

#include <stdlib.h>

void main()

{

randomize();

clrscr();

inty[10];

cout << "Секунда \t Кількість викликів \n";

for (int S = 0, k = 0; k < 10; k++) {

y[k] = random (30);

cout << k+1 << "\t\t" << y[k] << "\n";

S += *(y + k); // або S += y[k];

}

cout << "\n S=" << S;

k = 0;

for (int max = *y; k < 10; k++)

if (*(y + k) > max)

max = *(y + k);

cout << "\n max = " << max;

getch(); }

Розв'яжемо задачу про АТС, використовуючи функції ко­ристувача, параметрами яких є масиви.

// Програма АТС 1 з використанням функцій

#inciude <iostream.h>

#include <conio.h>

#include <stdlib.h>

int Suma(inty[10]); intMax(inty[10]);

void main()

{

randomize(); clrscr();

inty[10];

cout << "Секунда \t Кількість викликів \n";

for (int S = 0, k = 0; k < 10; k++) {

y[k] = random(30);

cout << (k+1) << "\t\t" << y[k] << "\n"; }

S = Suma(y);

cout << "\n S=" << S;

int max;

max = Max(y);

cout<< "\n max = " << max;

getch();

}

//--------------------------------------------------------

intSuma(inty[10])

{

for (int S = 0, k = 0; k < 10; k++)

S += *(y + k);

return S; }

//------------------------------------------------------

lntMax(inty[10])

{

int k=0;

for (int max = *y; k < 10; k++)

if (*(y + k) > max) max = *(y + k);

return max;

}

Задача 2 (про створення нового масиву). Утворити масив у, елементи якого обчислюються за формулою yk = 1п(/г + 1) - 2, де k = 1, 2, ..., 10. Побудувати масив, який складається з від'єм­них елементів масиву у. Вивести результати обчислень. Якщо шуканих величин немає, то вивести про це повідомлення.

У наступній програмі змінна п визначає кількість від'єм­них елементів у новому масиві.

// Утворення масиву

#include <iostream.h>

#include <math.h>

#defineN10

void main()

{

float *y = new float[N];

float *g = new float[N];

int k, n;

cout << "\t Масив Y:\n";

for(k = 0, n = O;k<1O;k++)

{

*(y + k) = log(k+1)-2;

cout << k << "\t" << *(y + k) << "\n";

if (*(y + k) < 0)

{*(g + n) = *(y + k); n++;}

}

delete[] y;

cout<< "\t Масив G:\n";

for (k = 0; k < n; k++)

cout << k << "\t" << *(y + k) << "\n";

delete[] g;

}

3. Вказівники на функції. На практиці виникають задачі однакового опрацювання масивів з різною кількістю елемен­тів. Розглянемо, як просто у мові C++ подібні задачі розв'язу­ються за допомогою вказівників.

У наведеній нижче програмі для визначення елементів масивів, що обчислюються за допомогою різних формул, ви­користано тип даних - вказівник на функцію:

<тип результату> (*<назва>) (<тип аргументу 1 >,

<тип аргументу 2>,…, <тип аргументу n>)

Задача 3 (про масиви з різною кількістю елементів). Утвори­ти масив у, елементи якого задані формулою уm = lOcos/n + 2, т = 1, 2, ..., 7, та масив g з елементами gn = n2 / 2, n = 1, 2, ..., 9. Обчислити в цих масивах суми елементів більших, ніж 2. Ви­вести на екран результати обчислень.

// Масиви різної довжини

#include <iostream.h>

#include <conio.h>

#include <math.h>

#define Ny 7

#define Ng 9

float Fy(int m);

float Fg(int m);

void Utvoryty(float (*f)(int m), float *z, int n);

float Suma(float *z, int n);

void main()

{ float S;

float *y = new float[Ny];

cout << "Масив Y:\n";

Utvoryty(Fy, y, Ny);

S = Suma(y, Ny);

cout << "Сума елементів більших, ніж 2, у масиві Y = " << S;

delete[] у;

float *g = new float[Ng];

cout << "\n Масив G:\n";

Utvoryty(Fg, g, Ng);

S = Suma(g, Ng);

cout << "Сума елементів більших, ніж 2, у масиві G = " << S;

delete[] g; } //-------------------------------------------------------------------------------------------

float Fy(int m) {

float f = 10 * cos(m) + 2;

return f; }

//--------------------------------------------------------------------------

float Fg(int m)

{

float f = m * m / 2;

return f;

}

//-----------------------------------------------------------------------------

void Utvoryty(float (*f)(int m), float *y, int n)

{

for (int і = 0; і < n; i++)

{

*(y + i) = f(i);

cout << і << "\t" << y[i] << "\n"; }

}

//---------------------------------------------------------------------

float Suma(float *z, int n)

{

float S;

for (int і = 0; і < n; i++)

if (*(z + i) > 2) S += *(z + i);

return S;

}

4. Багатовимірні масиви. Якщо елемент масиву має не один, а декілька індексів, то такі масиви називаються багато­вимірними. Прикладами багатовимірних масивів можуть бути різноманітні табличні дані: річний табель учня, сторінка в шкільному журналі, таблиця результатів футбольних змагань тощо. Це двовимірні таблиці, яким у математиці відповідає поняття матриці.

Загальний вигляд конструкції опису багатовимірного (N-вимірного) масиву такий:

<тип> <ім'я масиву>[<р1>][<р2>]...[<pn>],

де р1 р2, ..., рn задають розміри для кожного виміру.

Кількість індексів визначає вимірність масиву: двовимірні масиви мають два індекси, тривимірні — три і т.д.

Усі багатовимірні масиви можна розглядати й опрацьовува­ти як одновимірні. Наприклад, тривимірний масив sal[5][20][30] можна інтерпретувати як п'ять масивів розміром 20X30, а ін­ші - як 20 одновимірних масивів, які містять по ЗО елементів.

Надалі, для простоти викладу, розглядатимемо двовимірні масиви.

Елементи двовимірного масиву визначаються іменем ма­сиву та двома індексами: перший індекс означає номер рядка, інший - номер стовпця, на перетині яких розміщений елемент.

Наприклад, оголосимо масив int doba[24][60]. Він містить елементи цілого типу і складається з 24 рядків і 60 стовпців. Елемент doba[23][59] розміщений на перетині останнього 24-го рядка та останнього 60-го стовпця (нумерація індексів масиву завжди починається з нуля).

Двовимірні масиви компілятор розглядає як послідовність одновимірних. Тому до елементів двовимірного масиву, як і для одновимірних, можна також звертатись через вказівники. У такому випадку це вказівник на вказівник одномірного масиву:

*(*(<назва вказівника>+<зміщення по рядках>) + <зміщення по стовпцях>)

Наприклад, елемент *(*(doba+2)+15) розміщений на перетині 3-го рядка та 16-го стовпця.

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

Приклад 2. Оголосимо і проініціалізуємо двовимірний ма­сив цілих чисел

int ball[2][3] = {4, 5, З, З, 5, 2}.

У такому випадку елементам надаються значення так:

bаll[0][0] = 4, ball[0][1] = 5, ball[0][2] = З,

bаll[1][0] = 3, ball[1][1] = 5, ball[1][2] = 2.

Двовимірні масиви автоматично ініціалізуються "по рядках", тобто спочатку модифікується зовнішній (правіший) індекс . Надавати значення елементам масиву можна і так: int bаll[2][3] = {{4, 5, 3}, {3, 5, 2}};

або так:

int ball[2][3] = {

4, 5, З, З, 5, 2

};

Задача 4 (про таблицю множення). Скласти програму для занесення в двовимірний масив р таблиці множення двох чи­сел і виведення масиву на екран.

// Програма Піфагор

#include <iostream.h>

#include <conio.h>

void main()

{

clrscr();

const n = 9;

int p[n][n];

for (int і = 0; і < n; i++)

{

for (int j = 0; j<n; j++)

{ // Множення чисел

p[i][j] = (i+1)*(j+1);

cout << p[i][j] << "\t";

}

cout << "\n"; // Для виводу масиву у вигляді таблиці

}

getch();

}

Задача 5 (про кондитерську фабрику). Кондитерська фаб­рика для виготовлення п'яти сортів цукерок використовує п'ять видів сировини. Нехай норми затрат аіj кожного виду си­ровини і на виробництво 1 т цукерок сорту j задані формулою a,j = |sini| + j (і, 7 = 1,2, ..., 5). Вивести на екран таблицю зат­рат сировини (тобто масив а). Визначити, для якого сорту цу­керок (imin) потрібно найменше сировини (min) третього виду.

// Програма Фабрика

#include <iostream.h>

#include <conio.h>

#include <math.h>

void Min(float v[5][5]);

void main()

{

clrscr();

float Vytraty[5][5];

cout << "\t\t\t Вид сировини\n";

cout<<"\t 1\t2\t3\t4\t5\n";

// Утворимо таблицю затрат

for (int і = 0; і < 5; i++) {

cout<< і + 1 << " сорт";

for (int j = 0; j<5; j++) {

*(*(Vytraty + i) + j) = 2 * fabs(sin(i + 1)) + j + 1;

// Вивід елементів і-го рядка

cout << *(*(Vytraty + і) + j) << "\t"; } cout << "\n"; // Перехід на новий рядок

}

Min(Vytraty); // Виклик процедури Min

getch();

}

//------------------------------------------------------------------------

void Min(float v[5][5])

{ /* Припустимо, що найменше сировини третього

виду потрібно для цукерок першого сорту */

int imin = 1;

float min = *(*v);

for (int і = 1; і < 5; І++)

{

// Переглядаємо елементи 3-го рядка

if (*(*(v + і) + 3) < min)

{

min = *(*(v + і) + З);

imin = і; }

}

cout << "\n Найменше сировини третього виду \n";

cout << "потрібно для цукерок" << imin << " сорту";

}

Зауваження 6. Нехай задана деяка матриця atj, і, j = 1, 2, ..., n. Тоді вирази і = /', і < j та і > j визначають відповідно еле­менти головної діагоналі, елементи над і під головною діаго­наллю цієї матриці.

Задача 6 (про добуток матриць). Задано матрицю А розмі­ром 2X3 та матрицю В розміром 3X4. Обчислити їх добуток. З курсу математики відомо, що матриця С = АВ матиме

розмір 2 х 4 і її елементи визначаються за формулою

// Програма Добуток матриць

#include <iostream.h>

#include <conio.h>

#define N 2

#define M 3

#define K 4

void main()

{

clrscr();

inti, j, k;

int A[N][M];

int B[M][K];

cout << "Уведіть матрицю А\п";

for (i = 0; і < N; i++)

for (j = 0; j < M; j++)

cin >> A[i][j];

cout << "Уведіть матрицю В\n";

for (i = 0; і < М; І++)

for (j = 0; j < K; j++)

cin >> B[i][j];

int C[N][K];

cout << "Матриця С: \n";

for (i = 0; і < N; i++)

{

for (j = 0; j < K; j++)

{

C[i][j] = 0;

for (k = 0; k < M; k++)C[i][j] += A[i][k] * B[k][j];

cout << C[i][j] << "\t";

}

cout<< "\n";

}

getch();

}

5. Упорядкування масивів. Задачі впорядкування даних у масиві мають важливе практичне значення. Прикладами та­ких даних можуть біти телефонні довідники (дані, упорядко-

вані за прізвищем адресатів), бібліотечні каталоги, розклади руху потягів тощо. Упорядковані дані значно легше опрацьо­вувати, оскільки серед них набагато швидше можна відшука­ти потрібну інформацію.

Дані у масиві можна впорядковувати за зростанням (від меншого до більшого) або за спаданням (від більшого до мен­шого).

Задача 7 (про упорядкування масиву). Розглянемо масив А, який містить цілі числа 5, 2, 3, 6, 1, 4. Упорядкувати цей масив за зростанням значень.

Є багато різних способів упорядкування даних в однови-мірному масиві. Розглянемо декілька з них.

Метод обміну ("бульки"). Читаємо два перші елементи масиву (5 та 2) і порівнюємо їх між собою. Якщо перший еле­мент більший за другий, то міняємо їх місцями (стане 2 і 5). Далі розглядаємо другий і третій елемент (тепер це елементи 5 і 3) і порівнюємо їх між собою. Якщо треба, то міняємо їх місцями (стане 3 і 5). Потім порівнюємо третій і четвертий елементи (5 і 6) і так далі. Отримаємо масив 2, 3, 5, 1, 4, 6. Таким чином максимальний елемент (це елемент 6) опинився в самому кінці масиву, тобто там, де потрібно. Після цього знову розглядаємо масив, але вже без останнього елемента. Застосовуємо метод обміну до нового масиву (2, 3, 5, 1, 4). На останньому місці опиниться 5. Далі знов розглядатимемо ма­сив без останнього елемента і застосовуватимемо метод обміну і т. д. Якщо масив має п елементів, то метод обміну треба застосувати п - 1 разів до кожного разу меншої кількості елементів. Упорядковані елементи будуть нагромаджуватись із кінця масиву.

Складемо програму

// Впорядкування масиву методом обміну елементів

#include <iostream.h>

#include <conio.h>

void sort(int m[6]);

void main()

{

clrscr();

int i;

int a[6];

cout << "Введіть б чисел: \п";

for (i = 0; і < 6; i++)

сіn >> *(a + і);

sort(a);

cout << "Упорядкований масив: \п"

for (i = 0; і < 6; І++)

cout << *(a + i) << "\n";

getch();

}

//----------------------------------------------------------------

void sort(int m[6])

{

int temp, i, j;

for (i = 0; і < 5; i++)

for (j = 0; j < 6 - і -1; j++)

if(*(m + j)>*(m + J+1))

{

temp = *(m + j + 1);

*(m + j+1) = *(m+j);

*(m + j) = temp;

}

}

Зауваження 7. Оскільки назва масиву — це вказівник на пер­ший елемент цього масиву, а функції користувача можуть повертати значення у програму не тільки за допомогою коман­ди return, а й через вказівники, то у програмі сортування маси­ву міняємо місцями значення елементів масиву а за допомогою функції sort(), використовуючи вказівники.

Розглянемо інші методи упорядкування масивів.

Метод мінімальних елементів. Розглядають увесь ма­сив і визначають номер мінімального елемента. Тоді перший елемент міняють місцями з мінімальним. Далі розглядають новий масив, уже без першого елемента. У ньому знов відшу­кують найменший та роблять заміну і т. д. Упорядковані елементи поступово переноситимуться на початок масиву. Цей метод - один з найпростіших, але найтриваліший.

Метод вставки. Поступово порівнюємо перший елемент зі всіма іншими, доки не знайдемо елемент менший від нього. Перша позиція в масиві — позиція вставки. Знайдений менший елемент і його індекси запам'ятовують. Усі елементи масиву, починаючи від позиції вставки до елемента, що передує знайденому, зміщують праворуч. Значення знайдено­го елемента записують у позицію вставки і порівнюють його з елементами, що залишилися. Якщо буде виявлено ще мен­ший елемент, то повторюють процедуру вставки, і так доти, доки не дійдуть до кінця масиву - лише після цього перший елемент буде на місці. Розглядають масив без першого елемента і застосовують до нього описаний метод.

Зауваження 8. У модулі stdlib.h описана стандартна функція qsort(), яка дає змогує упорядковувати елементи масиву. Її сиг­натура така:

qsort (*<елемент>, <кількість елементів>, <розмір одного елементу>, <функція порівняння>);

де *<елемент> - вказівник на перший елемент масиву, функція порівняння - стандартна функція порівняння або функція, створена користувачем.

Вправи

  1. Модифікуйте програму про АТС і визначте, під час якої секунди надійшла максимальна кількість викликів. Розв'яжіть задачу без вико­ристання вказівників. Результати виконання програми запишіть у файл ats.txt.

  2. Модифікуйте програму про створення нового масиву: утворіть ма­сив з мінімального і максимального значень елементів масиву у. Роз­в'яжіть задачу без використання вказівників.

  3. Модифікуйте програму про створення нового масиву, використо­вуючи функції користувача.

  4. Модифікуйте програму Піфагор, використовуючи вказівники.

  5. Розв'яжіть задачу про масиви з різною кількістю елементів:

а) без використання вказівників;

б) без використання функцій користувача.

6. Розв'яжіть задачу про добуток матриць:

а) з використанням вказівників;

б) за допомогою функцій користувача;

в) використовуючи динамічний розподіл пам'яті.

  1. Задано масив а, елементи якого обчислюються за формулою аij = і + j2, де і, j = 1, 2, ..., 5. Утворіть і виведіть масив у, який складається з тих елементів масиву а, значення яких більше, ніж 20. Обчисліть кількість елементів масиву у. Масив а вивести у вигляді матриці 5X5. Якщо шуканих даних немає, то виведіть про це повідомлення.

  2. Виконайте програму Сортування масиву для різних наборів чисел. Модифікуйте програму так, щоб можна було відсортувати числа за спаданням значень.

  3. Складіть програму сортування методом мінімальних елементів і методом вставки.

10.Які з наведених нижче записів неправильні? Поясніть чому.

а)(u + і) = &(u[і]) г) *(u + і) = u[і] є) *(&u[і]) = u[і]

б)(u + і) = *(u[і]) д) *(u + і) = &(u[і]) ж) &(*(u + і)) = u + і

в)(u + і) = u[і] є) *(u + і) = *(u[і]) з) &(u[0]) = u Вважати, що u-масив, описаний як int u[10].

11. Обчисліть суму (добуток) парних (непарних) елементів одномір­ного масиву:

а) можна застосовувати лише операцію %;

б) не дозволено застосовувати жодних функцій та операцію %, явного чи неявного приведення типу;

в) дозволено застосовувати явне чи неявне приведення типу (int).

  1. Розв'яжіть задачу № 10 з розділу "Задачі" свого варіанта, вико­ристовуючи: а) імена масивів; б) вказівники; в) функції користувача; г) динамічний розподіл пам'яті. Результати виконання програми виведіть на екран і у файл.

  2. Розв'яжіть задачу № 11 з розділу "Задачі" вашого варіанта, ви­користовуючи: а) імена масивів; б) вказівники; в) функції користувача; г) динамічний розподіл пам'яті.

  3. Розв'яжіть задачу № 12 вашого варіанта з розділу "Задачі".

15. Розв'яжіть задачу № 13 вашого варіанта з розділу "Задачі" а) використовуючи вказівники; б) за допомогою функцій користувача; в) без використання функцій користувача.

  1. Розв'яжіть задачу № 14 вашого варіанта з розділу "Задачі", використовуючи: а) імена масивів; б) вказівники; в) функції користува­ча; г) динамічний розподіл пам'яті. Результати виконання програми виведіть на екран і у файл.

  2. Розв'яжіть задачу № 15 з розділу "Задачі" вашого варіанта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]