Печать
Категория: C++
Просмотров: 1094

Массивҳо дар ҳалли бисёр масъалаҳо муфиданд. Масалан, барои нигоҳ доштани қимати ҳамаи элементҳои матриса, ҳаҷми маҳсулот дар ҳамаи моҳҳои сол ва ғайра. Массив (array) ин роҳест барои нигоҳ доштани бисёр қиматҳо зери як ном. Массив аз элементҳо иборат аст, элементҳои массив метавонанд тағйирёбандаҳои намуди дилхоҳ бошанд. Камтар пештар рафта мегӯям, ки сохтор (structure) ва синф (class) низ элементҳои массив шуда метавонанд. Массивҳоро метавон чунин тасаввур намуд:

[ ]   [ ]   [ ]   [ ]   [ ]   ...   [ ] 

Дар ин ҷо ҳар як ҷуфти қафсҳои квадратӣ ин элементи массив аст ва шумо метавонед маълумотро ба он дохил намоед. Массивро инчунин ҳамчун гурӯҳи элементҳои паҳлӯи ҳамдигар истода тасаввур кардан мумкин аст. Массивро, ба монанди тағйирёбандаҳо, пеш аз истифода бурдан эълон кардан зарур аст. Сохтори умумии эълони массив чунин аст:

type array_name[size]; 

Дар ин ҷо type - намуди элементҳои массив, array_name - номи массив, size - миқдори умумии элементҳои массив дар қафсҳои квадратӣ мебошанд. Ҳар як элементи массив рақами тартибии худро дорад, ки онро индекси элементи массив меноманд. Аён аст, ки индекс адади бутун аст. Рақамгузории элементҳои массив дар C++ аз нул оғоз меёбад. Яъне 0 - индекси элементи якуми массив мебошад. Индекси элементи дуюми массив 1 мебошад ва ҳоказо. Индекси элементи охирони массив size-1 (миқдори умумии элементҳои массив тарҳи 1) мебошад. Ҳамаи элементҳои як массив як намуд доранд. Яъне, массиви ададҳои бутун, массиви рамзҳо, массиви ададҳои ҳақиқӣ. Мисол:

//namuna20.cpp
#include <iostream>
#include <math>
int main() {
int i, x[5];
double y[5];
for(i=0; i<5; i++) {
cout<<"Elementi "<<i+1<<"-umro dokhil kuned: ";
cin>>x[i];
y[i]=sqrt(x[i]);
}
for(i=0; i<5; i++)
cout<<x[i]<<" "<<y[i]<<endl;
return 0;
}

Дар коди болои тағйирёбандаи бутун i, массиви x иборат аз 5 элемент, ки ҳар якаш тағйирёбандаи бутун ва массиви y иборат аз 5 элемент, ки ҳар якаш тағйирёбандаи ҳақиқӣ аст эълон шудаанд. Бо ёрии оператори for ду сикл ташкил карда шудааст. Дар сикл тағйирёбанда i аз 0 то 4 қимат гирифта, қиматҳои элементҳои массиви x, элементи якум - x[0], элементи дуюм - x[1], ..., элементи панҷум - x[4] аз клавиатура дохил карда мешаванд. Ва баробари ин қиматҳои элементҳои массиви y ҳисоб карда мешаванд, ки онҳо ба решаи квадратӣ аз элементҳои мувофиқи массиви x баробар мебошанд. Ҳангоми ба 5 баробар шудани i сикл хотима меёбад. Баъди ин, сикли дуюм оғоз меёбад, ки дар ин сикл қимати i ба нул баробар карда шуда, чопи қиматҳои массиви x ва решаи квадратӣ аз онҳо иҷро карда мешавад. Дар хотира расо барои 5 элементи бутун (массиви x) ва 5 элементи ҳақиқӣ (массиви y) мавқеъ забт карда шудааст. Агар кӯшиш кунед, ки ба элементи шашум y[i] қимат бахшед, барномаи шумо шикаст мехӯрад. Яъне бо элементи охирони массив эҳтиёткорона рафтор намудан лозим аст.

Мисоли дигар:

//namuna21.cpp 
#include <iostream>
#include <time>
#include <stdlib>
int main() {
const int n=15;
int i;
int y[n];
srand(time(NULL));
for(i=0; i<n; i++)
y[i]=rand()%100;
for(i=0; i<n; i++)
cout<<y[i]<<endl;
return 0;
}

Дар барнома калимаи махсуси const истифода шудааст, ки он барои эълон намудани ададҳои доимӣ, яъне ададҳое, ки дар рафти иҷрои барнома набояд тағйир ёбанд, лозим аст. Агар дар ёд дошта бошед, мо тағйирёбандаро ба пиёла монанд карда будем. Доимӣ ин ҳамин хел пиёлаест, ки ба он чизе, ки даруни ин пиёла аст расидан мумкин нест. Функсияи srand барои ҳосил намудани маҷмӯи нави ададҳои тасодуфӣ (random - тасодуф) лозим аст. Дар ин ҷо оператори srand(time(NULL)) барои дар вақти иҷрои барнома функсияҳои ададҳои тасодуфӣ ҳосил намояндаро ба ҳолати аввала овардан (initialize), яъне барои ҳар дафъа ҳосил намудани маҷмӯи нави ададҳои тасодуфӣ лозим аст. Дар y[i]=rand()%100 мо адади тасодуфии дар байни 0 ва 100 бударо ҳосил мекунем ва онро ба элементи массиви y мебахшем. Ба шумо зарур аст, ки қисмҳои гуногуни ин кодро тағйир дода, онро иҷро карда бинед.

Мисоли массиви якченакаи миқдори элементҳояш динамикӣ тағйирёбанда:

#include <iostream>
#include <new>
using namespace std;

int main ()
{
setlocale(0,"");
int i,n;
cout << "Ченаки массив: ";
cin >> n;
int *a;
a = new (nothrow) int[n];
if (a == nullptr) {
cout << "Хатоги: Аз хотира мавкеъ забт карда нашуд.";
}

for (i=0; i<n; i++)
{
cout << "a["<<i<<"]:";
cin >> a[i];
}
cout << "Шумо дохил намудед: "<<endl;
for (i=0; i<n; i++)
cout << a[i] << "; ";
cout<<endl;

delete [] a;

system("pause");

return 0;
}

Мисоли ҳосил намудани ададҳои тасодуфӣ дар C++ ва ҳисоб намудани суммаи ин ададҳо:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
int *arr;
int n,i;
cout<<"Array size:";
cin>>n;
arr = new int[n];
srand ( (unsigned) time(NULL) );
for(i=0;i<n;i++) {
arr[i]=rand()%101;
cout<<arr[i]<<"; ";
}
cout<<endl;
int s = 0;
for(i=0;i<n;i++) {
s+=arr[i];
}
cout<<"Sum:"<<s<<endl;

delete [] arr;

system("pause");
return 0;
}

САВОЛҲО БАРОИ МУСТАҲКАМКУНӢ
1. Массив чист?
2. Қимати индекси массив ва қимати элементи массив фарқият доранд?
3. Аломатҳои { ва } чӣ вазифа доранд?
4. Функсияи srand() барои чӣ лозим?