Розв’язання задач з використанням масивів
Мета роботи
Навчитися складати та реалізовувати у середовищі 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!