Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1-semestr / 5-LEKCIYA
.pdf
5-lekciya. Bir ólshemli massivler. Statikalıq massivler. Elementlerdi izlew
usılı. Elementler ústinde ámeller.
Jobası:
1. Kirisiw: Massivler haqqında ulıwma túsinik
2. Bir ólshemli massivlerdi járiyalaw hám inicializaciyalaw
3. Statikalıq massivler
4. Massiv elementlerine múrájat etiw
5. Elementlerdi izlew usılları
6. Massiv elementleri ústinde ámeller
Programmalastırıwda kóp jaǵdaylarda bir tiptegi kóp sanlı maǵlıwmatlardı
saqlawǵa tuwra keledi. Mısalı, bir topar studentleriniń bahaların, bir aydaǵı hawarayı temperaturasın yamasa bir qatardaǵı sanlardı saqlaw ushın hárbir ózgeriwshi
ushın ayrıqsha atama berip shıǵıw qolaysız hám natiyjeli emes.
Massiv – bul bir atama astında birlestirilgen, birdey tiptegi turaqlı
muǵdardaǵı elementlerdiń tártiplengen jıynaǵı bolıp tabıladı. Massivler
maǵlıwmatlardı sistemalı túrde saqlawǵa hám olarǵa tez baylanısıwǵa
múmkinshilik beredi. C++ tilinde massivlerdiń eń kóp qollanılatuǵın túri bul bir
ólshemli massivler bolıp tabıladı.
Bir ólshemli massivlerdi járiyalaw hám inicializaciyalaw
Bir ólshemli massivti járiyalaw ushın onıń tipin, atamasın hám kólemin (elementler
sanın) kórsetiw kerek.
Ulıwma kórinisi:
tip atama[kólem];
tip: Massiv elementleriniń maǵlıwmat tipin kórsetedi (mısalı, int, double,
char).
atama: Massivke beriletuǵın at.
kólem: Massiv qansha elementti saqlay alıwın kórsetetuǵın pútin san. Massiv
kólemi turaqlı (constanta) bolıwı kerek.
Mısal:
// 10 pútin sandı saqlaw ushın massiv járiyalaw
int sanlar[10];
// 5 ha'qiyqiy sandı saqlaw ushın massiv
double bahalar[5];
// 26 belgini (simvoldı) saqlaw ushın massiv
char alfavit[26];

Massivti inicializaciyalaw (baslanǵısh mánis beriw)
Massivti járiyalaw waqtında oǵan birden baslanǵısh mánislerdi beriw múmkin.
Bunıń ushın figuralı qawsırmalar {} qollanıladı.
// 5 elementten ibarat pútin sanlı massivti inicializaciyalaw
int a[5] = {10, 20, 30, 40, 50};
// Eger inicializatorlar sanı massiv kóleminen kem bolsa,
// qalǵan elementler avtomat túrde nolge teńlestiriledi.
int b[7] = {5, 15, 25}; // b[3], b[4], b[5], b[6] elementleri 0 boladı
// Eger járiyalaw waqtında kólem kórsetilmese,
// ol inicializatorlar sanına qaray avtomat anıqlanadı.
int c[] = {1, 2, 3, 4, 5, 6}; // kólemi 6 ǵa teń bolǵan massiv
Statikalıq massivler
C++ tilinde massivler yadtan orın alıwına qaray statikalıq hám dinamikalıq bolıp
bólinedi. Biz házir kórip atırǵan massivler statikalıq massivler dep ataladı.
Statikalıq massivlerdiń ózgeshelikleri:
Turaqlı kólem: Statikalıq massivtiń kólemi programma kompilyaciya etiliw
waqtında anıqlanadı hám programma islep turǵan waqıtta onı ózgertip bolmaydı.
Kólem pútin sanlı konstanta menen beriliwi shárt.
Yadtan orın alıwı: Eger massiv funkciya ishinde járiyalansa, ol stek (stack)
yadtan orın aladı. Eger ol barlıq funkciyalardan sırtda (global) járiyalansa, ol
yadtıń statikalıq bóliminen orın aladı.
Ómiri: Funkciya ishinde járiyalanǵan statikalıq massiv sol funkciya isin
tamamlaǵanǵa shekem bar boladı. Global massiv bolsa programma
tamamlanǵanǵa shekem saqlanadı.
Mısal:
#include <iostream>
void funkciya() {
// Bul massiv tek ǵana 'funkciya' islegende bar boladı
int lokal_massiv[3] = {1, 2, 3};
std::cout << "Lokal massiv elementi: " << lokal_massiv[0] <<
std::endl;
}
// Bul massiv programma baslanǵannan tamamlanǵanǵa shekem bar boladı
int global_massiv[4] = {10, 20, 30, 40};
int main() {
funkciya();
std::cout << "Global massiv elementi: " << global_massiv[0] <<
std::endl;
return 0;
}
Massiv elementlerine baylanısıw

Massivtiń hárbir elementi óziniń unikal nomerine (indeksine) iye.
Indeksler 0 den baslanadı. Massivtiń n elementten ibarat bolsa, onıń
indeksleri 0 den n-1 ge shekem boladı.
Elementke baylanısıw ushın massiv ataması hám kvadrat qawsırma
[] ishinde onıń indeksi kórsetiledi.
Mısal:
int a[5] = {10, 20, 30, 40, 50};
// Massivtiń birinshi elementin (indeksi 0) ózgeriwshige júklew
int birinshi_element = a[0]; // birinshi_element = 10
// Massivtiń úshinshi elementine (indeksi 2) jańa mánis beriw
a[2] = 35; // a massivi endi {10, 20, 35, 40, 50} boladı
// Massivtiń eń aqırǵı elementin (indeksi 4) shıǵarıw
std::cout << a[4] << std::endl; // Natiyje: 50
Itibar beriń: Massiv shegarasınan shıǵıp ketiw (mısalı, a[5] ke baylanısıw)
programmanıń nadurıs islewine yamasa qátege ushırawına alıp keledi.
Kompilyator bul qáteni bárqulla anıqlay almaydı.
Elementlerdi izlew usılları
Massivten belgili bir mániske iye elementti tabıw kóp ushırasatuǵın máselelerden
biri bolıp tabıladı. Tómende eń kóp qollanılatuǵın eki izlew usılın kórip shıǵamız.
a) Sızıqlı izlew (Linear Search)
Bul eń ápiwayı izlew usılı. Ol massivtiń birinshi elementinen baslap, izlenip
atırǵan element tabılǵanǵa shekem yamasa massivtiń aqırına shekem izbe-iz
tekserip shıǵadı.
Algoritmi:
1. Massivtiń birinshi elementinen baslań (i = 0).
2. Házirgi elementti (massiv[i]) izlenip atırǵan mánis penen salıstırıń.
3. Eger olar teń bolsa, elementtiń indeksin (i) qaytarıń hám izlewdi toqtatıń.
4. Eger teń bolmasa, keyingi elementke ótiń (i di birge arttırıń).
5. Eger massivtiń aqırına shekem tabılmasa, elementtiń joq ekenligin bildiriwshi
mánisti (mısalı, -1) qaytarıń.
Kod mısalı:
#include <iostream>
int siziqliIzlew(int arr[], int n, int x) {
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
return i; // Element tabıldı, indeksin qaytaramız

}
}
return -1; // Element tabılmadı
}
int main() {
int sanlar[] = {2, 8, 5, 12, 45, 21};
int izleniwshi_san = 12;
int n = sizeof(sanlar) / sizeof(sanlar[0]);
int natiyje = siziqliIzlew(sanlar, n, izleniwshi_san);
if (natiyje == -1) {
std::cout << "Element massivte joq" << std::endl;
} else {
std::cout << "Element " << natiyje << "-indekste tabıldı" <<
std::endl;
}
return 0;
}
b) Ekilik (Binar) izlew (Binary Search)
Bul usıl sızıqlı izlewge qaraǵanda álleqayda tezirek isleytuǵın, biraq bir zárúrli
shárti bar: massiv aldınnan sortlanǵan (tártiplengen) bolıwı kerek.
Algoritmi:
1. Massivtiń baslanǵısh (tómen) hám aqırǵı (joqarı) shegaraların anıqlań.
2. Ortańǵı elementti tabıń: orta = (tómen + joqarı) / 2.
3. Ortańǵı elementti izlenip atırǵan mánis penen salıstırıń:
o Eger teń bolsa, izlew tabıslı boldı, indeksti qaytarıń.
o Eger izlenip atırǵan mánis ortańǵıdan kishi bolsa, izlewdi massivtiń tómengi (shep)
bóliminde dawam ettiriń (jańa joqarı shegara orta - 1 boladı).
o Eger izlenip atırǵan mánis ortańǵıdan úlken bolsa, izlewdi massivtiń joqarı (oń)
bóliminde dawam ettiriń (jańa tómen shegara orta + 1 boladı).
4. Tómen shegara joqarı shegaradan úlken bolıp ketkenshe 2- hám 3- qádemlerdi
tákirarlań. Eger usı waqıtqa shekem element tabılmasa, ol massivte joq bolǵanı.
Kod mısalı:
#include <iostream>
#include <algorithm> // sortlaw ushın
int binarIzlew(int arr[], int shep, int on, int x) {
while (shep <= on) {
int orta = shep + (on - shep) / 2;
if (arr[orta] == x) {
return orta; // Element tabıldı
}
if (arr[orta] < x) {
shep = orta + 1; // Oń tárepten izleymiz

} else {
on = orta - 1; // Shep tárepten izleymiz
}
}
return -1; // Element tabılmadı
}
int main() {
int sanlar[] = {2, 5, 8, 12, 21, 45}; // Massiv sortlanǵan bolıwı
kerek
int izleniwshi_san = 45;
int n = sizeof(sanlar) / sizeof(sanlar[0]);
int natiyje = binarIzlew(sanlar, 0, n - 1, izleniwshi_san);
if (natiyje == -1) {
std::cout << "Element massivte joq" << std::endl;
} else {
std::cout << "Element " << natiyje << "-indekste tabıldı" <<
std::endl;
}
return 0;
}
Massiv elementleri ústinde ámeller
Massivler menen islesiwde elementlerdi qosıw, óshiriw hám olardı sortlaw sıyaqlı
ámeller kóp qollanıladı.
a) Elementti qosıw
Statikalıq massivtiń kólemi turaqlı bolǵanı ushın, oǵan jańa element "qosıw"
túsinigi shártli bolıp tabıladı. Eger massivte bos orın bar bolsa, elementti qosıw
múmkin. Ádette, bul kórsetilgen poziciyaǵa elementti jaylastırıp, onnan keyingi
elementlerdi bir orınǵa jılıstırıw arqalı ámelge asırıladı.
Mısal (belgili poziciyaǵa qosıw):
#include <iostream>
int main() {
int arr[10] = {10, 20, 30, 40, 50}; // Massivte 5 element bar
int n = 5; // Házirgi elementler sanı
int pos = 2; // Qosılatuǵın poziciya (indeks)
int value = 25; // Qosılatuǵın mánis
// Jılıstırıw
for (int i = n - 1; i >= pos; i--) {
arr[i + 1] = arr[i];
}
arr[pos] = value; // Jańa elementti qoyıw
n++; // Elementler sanın arttırıw
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}

// Natiyje: 10 20 25 30 40 50
return 0;
}
b) Elementti óshiriw
Elementti óshiriw de onıń izindegi elementlerdi bir poziciya shepke jılıstırıw arqalı orınlanadı.
Mısal (belgili poziciyadaǵı elementti óshiriw):
#include <iostream>
int main() {
int arr[10] = {10, 20, 30, 40, 50};
int n = 5;
int pos = 2; // Óshiriletuǵın poziciya (indeks 2 de 30 tur)
// Jılıstırıw
for (int i = pos; i < n - 1; i++) {
arr[i] = arr[i + 1];
}
n--; // Elementler sanın kemeytiw
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
// Natiyje: 10 20 40 50
return 0;
}
c) Massivti sortlaw
Massiv elementlerin ósiw yamasa kemeyiw tártibinde jaylastırıw kóp máselelerdi
sheshiwde zárúrli basqısh bolıp tabıladı (mısalı, binar izlew ushın). C++ standart
kitapxanasında algorithm baslı faylında (header file) sort() funkciyası bar.
Mısal:
#include <iostream>
#include <algorithm> // sort() funkciyası ushın
int main() {
int sanlar[] = {8, 2, 12, 5, 45, 21};
int n = sizeof(sanlar) / sizeof(sanlar[0]);
// Massivti ósiw tártibinde sortlaw
std::sort(sanlar, sanlar + n);
std::cout << "Sortlanǵan massiv: ";
for (int i = 0; i < n; i++) {
std::cout << sanlar[i] << " ";
}
// Natiyje: Sortlanǵan massiv: 2 5 8 12 21 45
return 0;
}

Jáne de teoriyalıq maǵlıwmatlar:
Yadta izbe-iz jaylasqan bir qıylı tiptegi mánislerge massiv delinedi. Ádette
massivlerge bolǵan talap, úlken kólemdegi, biraq sheklengen muǵdardaǵı hám
tártiplengen mánislerdi qayta islew menen baylanıslı máselelerdi sheshiwde júzege
keledi. Máselen, studentler toparınıń reyting balları menen islesiw máselesi
qoyılǵan. Bunda topardıń ortasha reytingin anıqlaw, reytinglerdi kemeyiwi
boyınsha tártiplestiriw, konkret studenttiń reytingi haqqında maǵlıwmat beriw hám
basqa máselelerdi sheshiw zárúr bolsın. Belgilengen máselelerdi sheshiw ushın
berilgenlerdiń tártiplengen izbe-izligi zárúr boladı. Bul jerde tártiplengenlik mánisi
sonda, izbe-izliktiń hár bir mánisi óz ornına iye boladı. Berilgenler izbe-izligin eki
túrli usılda payda etiw múmkin. Birinshi jol –hár bir reyting ushın óz aldına
ózgeriwshi anıqlaw: Reyting1,…, ReytingN. Biraq, topardaǵı studentler sanı jeterli
dárejede úlken bolǵanda, bul ózgeriwshiler qatnasqan programmanı dúziw úlken
qıyınshılıqlardı júzege keltiredi. Ekinshi jol – berilgenler izbe-izligin jalǵız at
penen anıqlap, onıń mánislerine múrájáttı, sol mánislerdiń izbe-izlikte jaylasqan
ornınıń nomeri (indeksi) arqalı ámelge asırıw esaplanadı. Reytingler izbe-izligin
Reyting dep atap, onıń mánislerine Reyting1,…,ReytingN kórinisinde múráját etiw
múmkin. Ádette berilgenlerdiń bunday kórinisine massivler delinedi. Massivlerdi
matematikadaǵı sanlar vektorına uqsatıw múmkin, sebebi vektor da óziniń
individual atına iye hám ol fiksirlengen muǵdardaǵı bir tiptegi mánislerden –
sanlardan ibarat.
Demek, massiv – bul fiksirlengen muǵdardaǵı ayrım mánislerdiń (massiv
elementleriniń) tártiplengen jıynaǵı esaplanadı. Barlıq elementler birdey tipte
bolıwı kerek hám bul tip element tipi yáki massiv ushın tayanısh tipi dep ataladı.
Joqarıdaǵı keltirilgen mısalda Reyting – haqıyqıy tiptegi vektor dep ataladı.
Programmada isletiletuǵın hár bir konkret massiv óziniń individual atına iye
bolıwı kerek. Bul atqa tolıq ózgeriwshi delinedi, sebebi onıń mánisi massivtiń ózi
boladı. Massivtiń hár bir elementi massiv atı, hámde kvadrat qawısqa alınǵan hám
element selektorı dep atalıwshı indeksti kórsetiw arqalı áshıq túrde belgilenedi.
Múráját sintaksisi:

<massiv atı>[<indeks>]
bul kóriniske jeke ózgeriwshi delinedi, sebebi onıń mánisi massivtiń óz
aldına elementi. Bizlerdiń mısalda, Reyting massiviniń óz aldına komponentlerine
Reyting[1],…,Reyting[N] jeke ózgeriwshiler arqalı múráját etiw múmkin.
Basqasha aytqanda bul ózgeriwshiler indeksli ózgeriwshiler dep ataladı.
Massiv indeksi sıpatında pútin san qollanıladı. Ulıwma alǵanda indeks
sıpatında pútin san mánisin qabıl qılatuǵın qálegen ańlatpa isletiliwi múmkin hám
onıń mánisi massiv elementi nomerin anıqlaydı. Ańlatpa sıpatında ózgeriwshi de
alınıwı múmkin, ózgeriwshiniń mánisi ózgeriwi menen múráját etilip atırǵan
massiv elementin anıqlawshı indeks te ózgeredi. Solay etip, programmadaǵı bir
indeksli ózgeriwshi arqalı massivtiń barlıq elementlerin belgilew múmkin boladı.
Máselen, Reyting[i] ózgeriwshisi arqalı i ózgeriwshiniń mánisine baylanıslı túrde
Reyting massiviniń qálegen elementine múráját etiw múmkin.
Haqıyqıy tiptegi (float, double) mánisler toplamı sheksiz bolǵanlıǵı sebepli
olar indeks sıpatında isletilmeydi.
C++ tilinde indeks barqulla 0 den baslanadı hám onıń eń úlken mánisi
massiv járiyalanıwındaǵı uzınlıqtan birge kem boladı.
Massiv járiyalanıwı tómendegishe boladı:
< tip> <at> [<uzınlıq>]={baslanǵish mánisler}
Bul jerde <uzınlıq> - turaqlı ańlatpa. Mısallar:
int m[6] = {1, 4, -5, 2, 10, 3];
float a[4];
Massiv statikalıq hám dinamikalıqalıq bolıwı múmkin. Statikalıq massivtiń
uzınlıǵı aldınnan belgili bolıp, ol yadta belgili adresten baslap izbe-iz jaylasadı.
Dinamikalıqalıq massivtiń uzınlıǵı programma orınlanıw waqtında anıqlanıp, ol
dinamikalıqalıq yadta usı waqıtta bos bolǵan adreslerge jaylasadı. Máselen:
int m[6];
kórinisinde járiyalanǵan bir ólshemli massiv elementleri yadta tómendegishe
jaylasadı:

1-súwret. Bir ólshemli massivtiń yadtaǵı jaylasıwı.
Massivtiń i – elementine m[i] yáki *(m+i) – qurallı múráját etiw múmkin.
Massiv uzınlıǵı sizeof(m) ámeli arqalı anıqlanadı.
Massiv járiyalanıwında onıń elementlerine baslanǵish mánisler beriw
múmkin hám onıń bir neshe variantları bar.
1) ólshemi kórsetilgen massiv elementlerin tolıq inicializacialaw:
int t[5] = {-10, 5, 15, 4, 3};
Bunda 5 elementten ibarat bolǵan “t” atlı pútin tiptegi bir ólshemli massiv
járiyalanǵan hám onıń barlıq elementlerine baslanǵısh mánisler berilgen. Bul
járiyalaw tómendegi járiyalaw menen ekvivalent:
int t[5];
t[0] = -10; t[1] = 5; t[2] = 15; t[3] = 4; t[4] =
3;
2) ólshemi kórsetilgen massiv elementlerin tolıq emes inicializacialaw:
int t[5] = {-10, 5, 15};
Bul jerde tek ǵana massiv basındaǵı úsh elementke baslanǵısh mánisler
berilgen. Sonı aytıp ótiw kerek, massivtiń basındaǵı yáki ortasındaǵı elementlerine
mánisler bermesten, onıń aqırındaǵı elementlerge baslanǵısh mánis beriw múmkin
emes. Egerde massiv elementlerine baslanǵısh mánis berilmese, onda kelisim
boyınsha static hám extern modifikatorı menen járiyalanǵan massiv ushın
elementleriniń mánisi 0 sanına teń dep, automatic massivler elementleriniń
baslanǵısh mánisleri belgisiz esaplanadı.
3) ólshemi kórsetilmegen massiv elementlerin tolıq inicializacialaw:
int t[] = {-10, 5, 15, 4, 3};
Bul mısalda massivtiń barlıq elementlerine mánisler berilgen esaplanadı,
massiv uzınlıǵı kompilyator tárepinen baslanǵısh mánisler sanına qarap anıqlanadı.
Egerde massiv uzınlıǵı berilmese, baslanǵısh mánisi beriliwi shárt. Massivti
járiyalawǵa mısallar:

char ch[4] = {„a‟, „b‟, „c‟, „d‟}; //belgiler massivi
int in[6] = {10, 20, 30, 40}; //pútin sanlar massivi
char str[]=”abcd”; //qatar uzınlıǵı 5 ke teń, sebebi onıń
//aqırına „\0‟ belgisi qosıladı
char str[] = {„a‟, „b‟, „c‟, ‟d‟};
//joqarıdaǵı qatardıń basqasha jazılıwı
Másele. Bir ay ishindegi kúndelik temperaturalar berilgen. Ay ushın ortasha
temperaturanı esaplaw programması dúzilsin. Programma teksti:
int main()
{
const int n = 30;
int temp[n];
int i, s, temp_ortasha;
cout << “Kúnlik temperaturanı kiritiń:\n”
for(i = 0; i < n; i++)
{
cout << “\n temp[“ << i << ”]=”;
cin >> temp[i];
}
for(i = 0, s = 0; i < n; i++)
s += temp[i];
temp_ortasha = s / n;
cout << “Kúnlik temperatura:\n”;
for(i = 0; i < n; i++)
cout << “\ttemp[“ << i << ”]=” << temp[i];
cout << ”Aydaǵı ortasha temperature = “ << temp_ortasha;
return 0;
}
Соседние файлы в папке 1-semestr
