Скачиваний:
0
Добавлен:
20.09.2026
Размер:
541 Кб
Скачать
☆
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
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ǵı hawa­rayı 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