Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Joqari darejeli programmalastiriwda C++ Last

.pdf
Скачиваний:
8
Добавлен:
03.12.2023
Размер:
2.03 Mб
Скачать

cin >> km[i].Utılıs;

cout<<"Qarsılas dárwazasına urılǵan toplar sanı:"; cin >> km[i].Urǵan_top;

cout << "Óz dárwazasınan ótkergen toplar sani: "; cin >> km[i].Ótkergen_top; km[i].Oyın=km[i].Utıs+km[i].Teńlik + km[i].Utılıs; km[i].Ochko=km[i].Utıs *3 + km[i].Teńlik;

}

free(atı); return km;

}

void Ótkeriw(Komanda &komanda1, const Komanda &komanda2)

{

komanda1.Atı = komanda2.Atı; komanda1.Utıs = komanda2.Utıs; komanda1.Teńlik = komanda2.Teńlik; komanda1.Utılıs = komanda2.Utılıs; komanda1.Urǵan_top = komanda2.Urǵan_top;

komanda1.Ótkergen_top = komanda2.Ótkergen_top; komanda1.Oyın = komanda2.Oyın;

komanda1.Ochko = komanda2.Ochko;

}

Komanda * Tablicanı_Tártiplestiriw(Komanda *km)

{

bool orın_almastı = true;

for(int i=0; i<komandalar_sanı-1 && orın_almastı; i++)

{

Komanda Waqtınsha; orın_almastı = false;

for(int j = i; j < komandalar_sanı - 1; j++)

{

/* j-komandanıń ochkosı (j+1) - komanda ochkosınan úlken bolsa, tákirarlawdıń keyingi qádemine ótilsin */

171

if(km[j].Ochko > km[j+1].Ochko) continue;

/* j hám (j+1)-komandalardıń ochkoları teń hám j-komanda utısları (j+1)-komanda utıslarınan kóp bolsa, tákirarlawdıń keyingi qádemine ótilsin */

if(km[j].Ochko == km[j+1].Ochko && km[j].Utis>km[j+1].Utis)

continue;

/* j hám (j+1)-komandalardıń ochkoları hám utıslar sanı teń hám j-komanda urǵan toplar sanı (j+1)- komanda urǵan toplardan kóp bolsa, tákirarlawdıń keyingi qádemine ótilsin */

if(km[j].Ochko == km[j+1].Ochko && km[j].Utis==km[j+1].Utis && km[j].Urgan_top>km[j+1].Urgan_top)

continue;

/* joqarıdaǵı shártlerdiń birewide

orınlanbasa, j hám (j+1)-komandalar orınları almastırılsın */

orın_almastı = true;

Ótkeriw(Waqtınsha, km[j]); Ótkeriw(km[j], km[j+1]); Ótkeriw(km[j+1], Waqtınsha);

}

}

return km;

}

172

void Tablicanı_Shıǵarıw(const Komanda *km)

{

char pr

= ‘ ’;

 

cout <<

"FUTBOL KOMAMDALARÍNÍŃ TURNIR TABLICASÍ\n";

 

cout <<

"------------------------------------------

\n";

cout

<<

"| KOMANDA | O | U | T | U |UrT|ÓtT|OCHKO|\n";

cout

<<

"------------------------------------------

\n";

for(int i = 0; i < komandalar_sanı; i++)

{

cout << "|" << km[i].Atı.substr(0,10); cout << ‘|’;

if(km[i].Oyın < 10) cout << pr;

cout << km[i].Oyın << “ |”;

if(km[i].Utıs < 10) cout << pr;

cout << km[i].Utıs << “ |”;

if(km[i].Teńlik < 10) cout << pr;

cout << km[i].Teńlik << “ |”;

if(km[i].Utılıs < 10) cout << pr;

cout << km[i].Utılıs << “ |”;

if(km[i].Urǵan_top < 10) cout << pr;

cout << km[i].Urǵan_top << “ |”;

if(km[i].Ótkergen_top < 10) cout << pr;

173

cout << km[i].Ótkergen_top << “ |”;

 

if(km[i].Ochko < 10)

 

cout << pr;

 

cout << km[i].Ochko << " |" << endl;

 

}

 

cout << "------------------------------------------

\n";

}

 

int main()

 

{

 

Komanda *komanda;

 

komanda = Berilgenlerdi_kiritiw();

 

komanda = Tablicanı_Tártiplestiriw(komanda);

 

Tablicanı_Shıǵarıw(komanda);

 

return 0;

 

}

 

Programma bas funkciya hám tómendegi wazıypalardı orınlawshı tórt

funkciyadan dúzilgen:

1)Komanda *Komandalar_Tablicası() - komandalar haqqındaǵı berilgenlerdi saqlaytuǵın Komanda strukturalarınan dúzilgen dinamikalıqalıq massiv jaratadı hám oǵan aǵımnan hár bir komanda berilgenlerin oqıp jaylastıradı. Payda bolǵan massivke kórsetkishti funkciya nátiyjesi sıpatında qaytaradı;

2)Komanda *Komandanı_Tártiplestiriw(Komanda *km) - argument arqalı kórsetilgen massivti másele shárti boyınsha tártipleydi hám sol massivke kórsetkishti qaytaradı;

3)void Ótkeriw(Komanda &komanda1, Komanda &komanda2) - komanda2

strukturasındaǵı maydanlardı komanda1 strukturasına ótkeredi. Bul funkciya

Tablicanı_Tártiplestiriw() funkciyasınan massivtegi eki strukturanıń ózara orınların almastırıw ushın shaqırıladı;

4) void Tablicanı_Shıǵarıw(const Komanda *km) - argumentte berilgen massivti turnir kestesi qálibinde shıǵaradı.

174

Úsh komanda haqqında maǵlıwmat berilgende programma islewiniń nátiyjesi tómendegishe bolıwı múmkin:

FUTBOL KOMANDALARÍNIŃ TURNIR TABLICASÍ

------------------------------------------

| KOMANDA | O | U | T | U |UrT|ÓtT|OCHKO|

------------------------------------------

|Bunyodkor

|20 |15 | 3

| 2

|30 |10 | 48

|

|Paxtakor

|20 |11

|

5

|

4

|20

|16 |

38

|

|Neftchi

|20 | 8

|

5

|

7

|22

|20 |

29

|

------------------------------------------

10.5. Dinamikalıqalıq strukturalar

Berilgenler ústinde islegende olardıń muǵdarı qansha bolıwı hám olarǵa yadta qansha orın ajıratıw kerekligi aldınnan belgisiz bolıwı múmkin. Programma islew waqtında berilgenler ushın zárúrlik boyınsha yadtan orın ajıratıw hám olardı kórsetkishler menen jalǵaw arqalı birden-bir struktura payda etiw processi yadtıń dinamikalıqalıq bólistiriliwi dep ataladı. Bul usılda payda bolǵan berilgenler kompleksine berilgenlerdiń dinamikalıqalıq stukturası delinedi, sebebi olardıń ólshemi programma orınlanıwında ózgerip turadı. Programmalastırıwda dinamikalıqalıq strukturalardan sızıqlı dizimler, stekler, náwbetler hám binar terekler salıstırmalı kóp qollanıladı. Olar bir-birinen elementler arasındaǵı baylanısları hám olar ústinde orınlanatuǵın ámelleri menen parıqlanadı. Programma islewinde strukturaǵa jańa elementler qosılıwı yaki óshiriliwi múmkin.

Hár qanday berilgenlerdiń dinamikalıqalıq stukturası maydanlardan dúziledi hám olardıń ayrımları qońsı elementler menen baylanısıw ushın xizmet etedi.

Másele. Nolden parıqlı pútin sanlardan ibarat sızıqlı dizim jaratılsın hám onnan kórsetilgen sanǵa teń element óshirilsin.

Pútin sanlardıń sızıqlı dizim kórinisindegi dinamikalıqalıq strukturası tómendegi maydanlardan dúziledi:

struct Shınjır

175

{

int element;

Shınjır *keyingi;

};

Programma teksti:

#include <iostream.h> struct Shınjır

{

int element;

Shınjır *keyingi;

};

Shınjır *Element_Jaylastırıw(Shınjır *z, int jańa_elem)

{

Shınjır *jańa = new Shınjır; jańa -> element = jańa_elem; jańa -> keyingi = 0;

if(z) //dizim bos emes

{

Shınjır *temp = z; while(temp -> keyingi)

temp = temp -> keyingi; //dizimnin aqırǵı

//elementin tabıw temp -> keyingi = jańa; //jańa elementti dizim

//aqırına qosıw

}

else z = jańa; //dizim bos

return z; // dizim basınıń adresin qaytarıw

}

Shınjır *Element_Óshiriw(Shınjır *z, int del_elem)

{

if(z)

{

176

Shınjır *temp = z;

Shınjır *aldınǵı = 0; //usı elementten aldınǵı

//elementke kÓrsetkish

while(temp)

{

if(temp -> element == del_elem)

{

if(aldınǵı) //óshiriletuǵın element //birinshi emes

{

/* óshiriletuǵın elementten aldınǵı elementti keyingi elementke jalǵaw

*/

aldınǵı->keyingi = temp->keyingi; delete temp; //elementti óshiriw temp = aldınǵı -> keyingi;

}

else

{

/* óshiriletuǵın element dizim basında */ z = z -> keyingi;

delete temp; temp = z;

}

}

else //element óshiretuǵın sanǵa teń emes

{

aldınǵı = temp;

temp = temp -> keyingi;

}

}

}

return z;

}

void Shınjır_Ekranǵa(Shınjır *z)

177

{

cout << "Shınjır elementleri: " << endl;

Shınjır *temp = z;

while(temp)

{

cout << temp -> element << ' '; temp = temp -> keyingi;

}

cout << endl;

}

Shınjır *Shınjırdı_Óshiriw(Shınjır *z)

{

Shınjır *temp = z; while(z)

{

z = z -> keyingi; delete temp;

}

return z;

}

int main()

{

Shınjır *Shınjır = 0; int san, del_element;

do

{

cout << “\nSan kiritiń (0-processti tamamalaw): “; cin >> san;

if(san)

shınjır = Element_Jaylastırıw(shınjır, san); } while(san);

178

Shınjır_Ekranǵa(shınjır);

cout << "\nÓshiriletuǵın elementti kiritiń: "; cin >> del_element;

shınjır = Element_Óshiriw(shınjır, del_element);

Shınjır_Ekranǵa(shınjır);

Shınjır = Shınjırdı_Óshiriw(shınjır); return 0;

}

Programmanıń bas funkciyasında sızıqlı dizim payda etiw ushın Shınjır tipindegi shınjır ózgeriwshisi anıqlanǵan bolıp, oǵan bos kórsetkish mánisi

0 berilgen (onıń ekvivalenti - NULL). Keyin tákrarlaw operatorı denesinde klaviaturadan pútin san oqıladı hám Element_Jaylastırıw() funkciyasın shaqırıw arqalı bul san dizim aqırına qosıladı. Funkciya jańadan payda bolǵan dizim basınıń adresin jáne shınjır ózgeriwshisine qaytaradı. Eger klaviaturadan 0 sanı kiritilse dizimdi payda etiw processi tamamlanadı. Aytayıq tómendegi sanlar izbe-izligi kiritilgen bolsın: 1,2,3,3,5,0. Bul jaǵdayda payda bolǵan dizim tómendegi kóriniste boladı (10.1-súwret):

shınjır

1 2 3 3 5

10.1-súwret. Bes sannan dúzilgen sızıqlı dizim

Payda bolǵan dizimdi kóriw ushın Shınjır_Ekranǵa() funkciyası shaqırıladı hám ekranda dizim elementleri shıǵarıladı. Dizim ústinde ámel sıpatında berilgen san menen ústi-ústine túsetuǵın elementlerdi óshiriw máselesi qaralǵan. Bunıń ushın óshiriletuǵın san del_element ózgeriwshine oqıladı hám ol Element_Óshiriw() funkciyası shaqırılıwında argument sıpatında uzatıladı. Funkciya bul san menen ústi-ústine túsetuǵın dizim elementlerin óshiredi hám ózgergen dizim basınıń adresin shınjır ózgeriwshisine qaytarıp beredi. Máselen, dizimnen 3 sanı menen ústi-ústine túsetuǵın elementler óshirilgennen keyin, ol tómendegi kóriniske iye boladı (10.2-súwret):

shınjır

1

179

2

5

 

10.2-súwret. Dizimnen 3 sanınıń óshirilgeninen keyingi kórinisi

Ózgergen dizim elementleri ekranǵa shıǵarıladı. Programma aqırında

Shınjırdı_Óshiriw() funkciyasın shaqırıw arqalı dizim ushın dinamikalıqalıq túrde ajratılǵan yad bosatıladı.

Dinamikalıqalıq strukturalarda ózgertiwler salıstırmalı kem ámellerde orınlanıwı, olar járdeminde máselelerdi ónimli sheshiwdiń tiykarlarınan biri esaplanadı.

10.6. Birlespeler hám olar ústinde ámeller

Birlespeler yadtıń bir aymaǵında hár qıylı tiptegi bir neshe berilgenlerdi saqlaw imkaniyatın beredi.

Birlespe járiyalanıwı union gilt sózi, onnan keyin identifikator hám blok ishinde hár qıylı tiptegi elementler járiyalanıwınan ibarat boladı, máselen:

union Birlespe

{

int n;

unsigned long N; char Qatar[10];

};

Birlespeniń bul járiyalanıwında kompilyator tárepinen Birlespe ushın onıń ishindegi eń kóp orın iyelewshi elementtiń - Qatar qatarınıń ólsheminde, yaǵnıy

10 bayt orın ajıratıladı. Waqıttıń hár bir momentide birlespede, járiyalanǵan maydanlardıń tek ǵana birewiniń tipinde berilgen bar dep esaplanadı. Joqarıdaǵı mısalda Birlespe ústinde ámel orınlanıwında onıń ushın ajıratılǵan yadta yaki int tipindegi n yaki unsigned long tipindegi N yaki Qatar qatar mánisi jaylasqan dep esaplanadı.

Birlespe maydanlarına dál struktura maydanlarına múráját etkendegidey ‘.’ arqalı múráját etiledi.

Strukturalardan parıqlı túrde birlespe járiyalanıwında tek ǵana onıń birinshi elementine baslanǵısh mánis beriw múmkin:

180