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



 

 

Мета роботи

 

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

 

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

 

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

Робота з покажчиками значно прискорює виконання програми. Якщо до покажчика масиву 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>

#include <conio.h>

int main()

{

const int n=5;

int mas[n];

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

int i;

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

{

   std::cin>>mas[i];

}

int imin=0;

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

{

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

       imin=i;

}

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

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

return 0;

}

 

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

 

#include <iostream>

#include <conio.h>

int main()

{

int i, j;

const int n = 10;

float mas [n], rab;

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

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

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

std::cout<< " Isxodnik\n";

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

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

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

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

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

   for (j=0;j<n-1-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;

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

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

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

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

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

return 0;

}

 

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

#include <iostream>

#include <conio.h>

int main()

{

int i,j,sum,stk;

const int n =5, m=6;

int matr[n][m], mas[n];

std::cout<<"Input matr\n";

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

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

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

       std::cin>> *(*(matr+i)+j);

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

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

{

   sum=0;

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

   {

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

   }

   *(mas+i)=sum;

}

std::cout<< "Result mas\n";

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

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

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

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

   for( j=0; j < n-1-i; j ++)

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

       {

           stk=*(mas+j);

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

           *(mas+j+1)=stk;

       }

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

std::cout<< "\nResult otsortirov mas\n";

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

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

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

return 0;

}

 

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

#include <iostream>

#include <conio.h>

int main()

{

int n,i;

int *mas;

std::cout<<"Vvedit kilkist' strok (n)\n";

std::cin>>n;

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

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

std::cout<<"Vvedit "<<n<<" elementiv massivu\n";

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

   std::cin>>mas[i];

int kil(0);

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

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

   if(mas[i]<0)

       kil++;

std::cout<<"kil="<<kil<<"\n";

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

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

return 0;

}

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

 

#include <iostream>

#include <conio.h>

int main()

{

int n,m,i;

int **mas;

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

std::cin>>n>>m;

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

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

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

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

std::cout<<"Vveditе "<<n<<"x"<<m <<" elementi massiva"<<std::endl;

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

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

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

       std::cin>>mas[i][j];   

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

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

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

       std::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];

std::cout<<"sum=="<<sum<<std::endl;

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

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

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

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

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

return 0;

}

 


Дата добавления: 2018-04-15; просмотров: 443; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!