.0МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
/
Звіт
До лабораторної роботи № 6
На тему: «РОБОТА З МАСИВАМИ В С++»
З дисципліни «Основи програмування»
Лектор:
1.МЕТА РОБОТИ
Мета роботи – навчитися організовувати такі структури даних як масиви та освоїти основні методи програмування алгоритмів обробки масивів даних засобами мови С++.
2.ТЕОРЕТИЧНІ ВІДОМОСТІ
1. Що таке масив? Які типи масивів Ви знаєте?
Масив – це сукупність однотипних змінних, розміщених у послідовно пронумерованих суміжних комірках пам'яті. Масиви бувають статичні, фіксовані автоматичні та динамічні.
2. Який загальний вигляд опису одновимірного масиву? А двовимірного?
Загальний вигляд одновимірного масиву:
тип ім’я_масиву[розмір]
Загальний вигляд двовимірного масиву:
тип ім’я_масиву [розмір1][розмір2]
3. Що таке вказівник? Яка відмінність вказівника від звичайної змінної?
Вказівник— тип даних в комп'ютерних . Значення вказівника посилається на інше значення, що записане будь-де в пам'яті комп'ютера (фактично містить його адресу).
4. Яку роль відіграє ім’я масиву? Як можна його використати?
Ім’я масиву є вказівником на його перший елемент. Тому ім'я масиву можна використати в якості бази для зміщення вказівника..
5. Як здійснюється ініціалізація масиву? Які особливості ініціалізації багатовимірних масивів?
Ініціалізацію масиву можна здійснити: при оголошенні масиву або ввести значення з клавіатури. Ініціалізація двовимірного масиву здійснюється по рядках.
6. Опишіть відомі Вам способи доступу до елементів одновимірного масиву.
У С++ доступ до елементів масиву здійснюється за допомогою спеціального оператора []. В квадратних дужках вказується індекс елемента масиву, а перед ними – його ім'я. Також для доступу до елементів використовують вказівники.
7. Як можна організувати контроль виходу індексів за межі допустимого діапазону?
Якщо вказати в квадратних дужках неправильний розмір, все одно компілятор автоматично обчислить правильний розмір. Наприклад, при оголошенні:
int numbs[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8}
Компілятор «вважатиме», що масив містить 9 елементів. Однак, при цьому виникне проблема при наступному присвоєнні:
numbs[10] = 10;
Компілятор розпізнає помилку, коли присвоюється більше чисел, ніж задано елементів масиву:
int numbs[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
При цьому видається повідомлення «Занадто багато ініціалізаторів».
8. Як зберігаються в пам’яті багатовимірні масиви?
Багатовимірні масив, як і будь-які інші, зберігається в послідовних комірках пам'яті, а тому його можна представити як одномірний, пам’ятаючи, що ім'я масиву – це вказівник на його перший елемент.
9. Як визначити скільки оперативної пам’яті займає масив?
Об’єм пам'яті, який займає масив, рівний добутку розміру типу елементів масиву та кількості елементів в масиві. Наприклад, якщо масив містить 16 чисел типу int і тип int займає в пам’яті 2 байти, то цілий масив займатиме 2×16 = 32 байти.
10. Як здійснюється доступ до елементів багатовимірного масиву за допомогою індексів? А за допомогою вказівників?
Звертаються до елементів масиву так:
ім’я_масиву [індекс1][індекс2]
Або нехай двовимірний масив mas має розмірність n*m. Тоді елемент mas[i][j] можна представити як *(*mas+n*i+j). З іншого боку, вираз mas[i] є вказівником на перший елемент і-ого рядка, а тому *[mas[i]+j] – це j-ий елемент і-ого рядка.
11. Напишіть два різних оператора на С++, які б присвоювали вказівнику ptr адресу першого елемента четвертого рядка двовимірного масиву x[5]7].
*(*x+5*1+4) або *[х[1]+4]
12. Напишіть два різних оператора на С++, які інкрементують шостий елемент масиву array, використовуючи механізм індексації та вказівника зі зміщенням, відповідно.
cout « —array[5]; cout « —*(array + 5);
3.ІНДИВІДУВАЛЬНЕ ЗАВДАННЯ
ДОДАТОК 1
Написати програму для обробки даних, організованих у масив, згідно завдання наведеного варіанту. У програмі використати такі форми звертання до елементів масиву:
( на основі індексів,
( через розадресоване ім’я масиву і зміщення елемента.
6.З клавіатури ввести масив дійсних чисел. Утворити новий масив, кожен елемент якого дорівнює півсумі значень двох сусідніх елементів введеного вектора. Визначити номер мінімального елемента нового вектора.
КОД ПРОГРАМИ
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
void main()
{
const int n= 5;
const int k= 5;
int x[n],y[k], max,min,l=0, suma=0;
for(int i=0; i<n; i++) cin>>*(x+i);
for(int i=0, j=0; i<n; i++) {
max=min=y[0];
y[j]=(*(x+i)+*(x+i+1))/2;
cout<<"y["<<j<<"]"<<y[j]<<" "<<endl;
if(y[j]<min){
min=y[j];
l=j;
}
j++;
}
cout<<"\n";
cout<<"y["<<l<<"]"<<"min= "<<min;
system("pause");
}
РЕЗУЛЬТАТИ
/
ДОДАТОК 2
Написати програму для обробки даних, організованих у масив, згідно завдання наведеного варіанту. У програмах використати різні форми звертання до елементів багатовимірних масивів, у тому числі за допомогою конструкцій “вказівник на масив” і “вказівник на вказівник”. Враховувати, що кожен рядок матриці можна опрацьовувати як окремий елемент.
Ввести прямокутну матрицю цілих чисел. Вилучити з матриці рядок і стовпчик, на перетині яких знаходиться її найменший елемент.
КОД ПРОГРАМИ
#include <iostream>
#include <conio.h>
#include<stdlib.h>
#include <iomanip>
using namespace std;
void main()
{
const int N= 3;
const int M = 4;
int x[N][M], min,i_min,j_min,i ,j;
for(int i = 0; i < N; i++)
for(int j = 0; j < M;j++)
{
cout<<"Enter the "<<(j+1)<<" element of "<<(i+1)<<" row"<<endl;
cin>>x[i][j];
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
cout<<*(*x+i*M +j) <<" ";
}
cout<<endl;
}
cout<<endl;
min=x[0][0]; i_min=j_min=0;
for(int i = 0; i < N; i++)
for(int j = 0; j < M;j++)
{
if(x[i][j]<min) {min= *(*x + i*M+ j);
i_min=i;j_min=j;}
}
for( int i=0; i<N; i++){
for( int j=0; j<M; j++){
if((i_min!=i)&&(j_min!=j))
cout<<x[i][j]<<" ";
}
cout<<endl;
}
system("pause");
}
РЕЗУЛЬТАТИ
/
ВИСНОВОК
На цій лабораторні роботі я навчилася працювати з одновимірними та багатовимірними масивами і виконувати операції над ними. Також я дізналася, що таке вказівники ,як вони працюють і для чого вони потрібні.
БЛОК-СХЕМА №1
/
БЛОК-СХЕМА №2