Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_ukazania_k_8_9_10_11_12_zadaniam.doc
Скачиваний:
9
Добавлен:
03.05.2019
Размер:
619.01 Кб
Скачать

2 Розв’язання задач з використанням масивів

2.1 Мета роботи

Навчитися складати та реалізовувати у середовищі Visual C++ програми обробки масивів.

2.2 Методичні вказівки до організації самостійної роботи студентів

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

Робота з покажчиками значно прискорює виконання програми. Якщо до покажчика масиву mas, наприклад, додати значення 3, це призводить до отримання нового покажчика на четвертий (!) елемент масиву. При цьому перехід виконується у відповідності до типу масиву.

Тісний зв'язок з покажчиками має визначений у мові C++ тип даних – масив, або вектор. Масиви — це структурований тип даних, які представляють собою безупинні блоки пам'яті, що містять безліч елементів того самого типу. Ознакою масиву при описі є наявність парних дужок — “[ ]”. Елементи масива нумеруються з 0. Наприклад:

int mas1[21]; char mas2[67];

де оголошені вектор mas1, що містить 21 елемента типу int і вектор mas2, що містить 67 елементів типу char.

У C++ дозволені два способи доступу до елементів вектора: з використанням механізму покажчиків і класичний — за допомогою індексу.

Застосування механізму покажчиків засновано на використанні факту, що ім'я вектора є покажчиком – константою, що дорівнює адресі початку вектора - першого байта першого елемента вектора (mas1==&mas1[0]). У результаті цього, використовуючи операцію разіменування «*» можна забезпечити доступ до будь – якого елемента вектора. Так, еквівалентними будуть звертання до i-го елементу вектора з використанням індексу — mas1[i] і посилання *(mas1+i), оскільки (mas1+i)==& mas1[i].

Багатомірні масиви в С++ представляються у виді векторів покажчиків на вектори - багатомірні вектора.

Використання механізму покажчиків для доступу до деякого і,j,k-го елементу тривимірного вектора може бути таким:

b[і][j][k]= = *(b[і][j]+k)= =*(*(b[і]+j)+k)= =*(*(*(b+і)+j)+k) .

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

Приклад 2.1 Знайти у масиві mas найменший елемент та його індекс.

#include <iostream.h>

#include <conio.h>

void main()

{

const int n=5;

int mas[n];

cout<<"Vvedit "<<n<<" elemetiv massivu "<<endl;

int i;

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

cin>>mas[i];

int imin=0;

for(i=1;i<n;i++)

if (mas[imin]>mas[i])

imin=i;

cout<<"min="<<mas[imin]<<"\tindex="<<imin<<endl;

getch();//задержка экрана

}

Приклад 2.2 Відсортувати масив mas дійсних чисел розміром 10 елементів за зменшенням.

#include <iostream.h>

#include <сonio.h>

void main()

{

int i, j;

float mas [10], rab;

cout<<"Vvеdі 10 elem \n";

for ( i=0; i<10; i++)

cin>>mas[i]; // cin>>*(mas+i);

cout<< " Isxodnik\n";

for( i=0; i<10; i++)

cout<<mas[i]; // cout<<*(mas+i)<<" ";

cout<<"\n"; // cout<<endl;

// Сортировка по убыванию

for (i=1; i<10; i++)

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

if(mas[j]<mas[j+1]) // if(*(mas+j) <*(mas+j+1))

{ rab= mas[j]; // { rab=*(mas+j);

mas[j] =mas[j+1]; // *(mas+j)=*(mas+j+1);

mas[j+1]=rab;} // *(mas+j+1)=rab; }

// Вывод результата

cout<< " Otsort massiv\n"<<"\n";

for (i=0; i<10; i++)

cout<< mas[i]<<” ”; // cout<<*(mas+i)<<" ";

getch(); //задержка экрана

}

Приклад 2.3 В багатовимірному масиві matr розміром 5*6 знайти суму елементів кожного рядка. Отриманий масив відсортувати за зростанням.

#include <iostream.h>

#include <conio.h>

void main()

{int i,j,sum,stk;

int matr[5][6], mas[5];

cout<<"Input matr\n";

// Ввод матрицы

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

for(j=0; j<6; j++) cin>> *(*(matr+i)+j);

// Определение суммы элементов строк

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

{sum=0;

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

sum+=*(*(matr+i)+j); *(mas+i)=sum;}

cout<< "Result mas\n";

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

cout<< *(mas+i)<<" ";

// Сортировка вектора mas по возрастанию

for( i=1; i < 5; i++)

for( j=0; j < 5-i; j ++)

if (*(mas+j)> *(mas+j+1))

{stk=*(mas+j); *(mas+j)= *(mas+j+1); *(mas+j+1)=stk;}

// Вывод отсортированного массива

cout<< "Result otsortirov mas\n";

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

cout<< *(mas+i)<<" ";

getch(); }

Приклад 2.4 Створити динамічний масив з n елементів (значення n ввести с клавіатури). Знайти кількість від’ємних елементів масиву.

#include <iostream.h>

#include <conio.h>

void main()

{

int n,i;

int *mas;

cout<<"Vvedit kilkist' strok (n)"<<endl;

cin>>n;

mas=new int[n];//створюємо динамічний масив

//Введення масиву

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

cin>>mas[i];

int kil(0);

//Підраховуємо кількість від’ємних елементів

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

if(mas[i]<0)

kil++;

cout<<"kil="<<kil<<endl;

delete [] mas; //вивільнюємо пам’ять

getch();

}

Приклад 2.5 Створити динамічний масив з n строк та m стовпців (значення n та m ввести с клавіатури). Знайти суму парних елементів масиву.

#include <iostream.h>

#include <conio.h>

void main()

{

int n,m,i;

int **mas;

cout<<"Vveditе kilkist' strok (n) i stolbcov (m)"<<endl;

cin>>n>>m;

//створюємо динамічний масив

mas=new int*[n]; //створюємо масив покажчиків

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

mas[i]=new int[m]; //створюємо динамічні строки

cout<<"Vveditе elementi massiva"<<endl;

//заповнюємо масив з клавіатури

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

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

cin>>mas[i][j];

// Виведення на экран вихідного мисиву

for(i=0;i<n;i++,cout<<endl)

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

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

int sum(0);

//Підраховуємо суму парних елементів

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

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

if(mas[i][j]%2==0)

sum+=mas[i][j];

cout<<"sum=="<<sum<<endl;

// вивільнюємо пам’ять

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

delete[]mas[i];//вивільнюємо строки

delete []mas; //вивільнюємо масив покажчиків

getch();//затримка екрану

}

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