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

3-LEKCIYA_

.docx
Скачиваний:
0
Добавлен:
27.11.2023
Размер:
43.87 Кб
Скачать

3-LEKCIYA. TARMAQLANÍWSHÍ HÁM TAŃLAW OPERATORLARÍ. TARMAQLANÍWSHÍ OPERATORLAR HÁM OLARDÍŃ ISLEW TÁRTIBI. TERNAR OPERATORÍ. SHÁRTSIZ ÓTIW OPERATORÍ.

Tarmaqlanıwshı esaplaw proceslerin algoritmlestiriw hám programmalastırıwda kóplegen máselelerdi sheshiwde ayırım procesler belgili shárt yaki shártlerdiń qoyılıwına qarata orınlanadı. Bunday procesler tarmaqlanıwshı procesler dep ataladı. Tarmaqlanıwshı esaplaw procesleri ápiwayı hám quramalı boladı. Bul procestegi tarmaqlardıń sanına baylanıslı. Belgili bir tarmaqlanıwshı process quramına da tarmaqlanıwlar bolıwı múmkin. Bunday tarmaqlanıwları bar esaplaw procesleri quramalı tarmaqlanıwshı procesler dep ataladı. C++ tilinde tarmaqlanıwshı proceslerdi programmalastırı ushın shártsiz, shártli ótiw hám tańlaw operatorlarınan paydalanıladı.

Tarmaqlanıwshı algoritm. Tapsırma: Eki pútin sandı kirgiziń hám olardan kishisin ekranǵa shıǵarıń. Sheshim ideyası: Ekranǵa birinshi san shıǵıwı kerek, egerde ol ekinshi sannan kishi bolsa, yamasa ekinshi san shıǵıwı kerek, egerde birinshi san kishi bolsa. Ózgeshelikleri: ámeldi orınlaw bir neshe shártlerge baylanıslı (eger ... yamasa ...).

Eger algoritmniń orınlanıw izbe-izligi bir neshe shártlerge baylanıslı bolsa ol tarmaqlanıwshı dep ataladı.

Tarmaqlanıwshı operatorlar. Aldınǵı mısal retinde keltirilgen programmalarda operatorlar jazılıw quramında izbe-iz hám tek bir ret orınlanǵan jaǵdaylar, yaǵnıy sızıqlar keltirilgen.

If operatorı

If operatorı qandayda bir shártti shınlıqqa tekseriw nátiyjesine bola

programmada tarmaqlanıwdı ámelge asıradı:

if (<shárt> )<operator>;

Bul jerde <shárt> hár qanday ańlatpa bolıwı múmkin, ádette ol salıstırıw ámeli boladı.

Eger, shárt 0 mánisinen parıqlı yamasa shın (true) bolsa, <operator> orınlanadı, keri jaǵdayda, yaǵnıy shárt 0 yamasa jalǵan (false) bolsa, hesh qanday ámel orınlanbaydı hám basqarıw if operatorınan keyingi operatorǵa ótedi (eger, ol bar bolsa). Usı jaǵday 4.1-súwrette kórsetilgen.

C++ tiliniń qurılmaları operatlorlardı blok kórinisinde dúziwge imkan beredi. Blok - ‘{‘ hám ‘}’ belgi aralıǵına alınǵan operatorlar izbe-izligi bolıp, ol kompilyator tárepinen pútin bir operator dep qabıl etiledi. Blok ishinde járiyalaw operatorları da bolıwı múmkin hám olarda járiyalanǵan ózgeriwshiler tek ǵana sol blok ishinde kórinedi (ámel qıladı), bloktan sırtta kórinbeydi. Bloktan keyin ‘;’ belgisi qoyılmawı múmkin, biraq blok ishindegi hár bir ańlatpa ‘;’ belgisi menen juwmaqlanıwı shárt.

1-súwret. if() shárt operatorınıń blok sxeması

Tómende keltirilgen programmada if operatorınan paydalanıw kórsetilgen.

#include <iostream.h>

using namespace std;

int main()

{

int b; cin >> b; if(b > 0)

{ // b > 0 shárt orınlanǵan jaǵday

...

cout << “b - oń san”;

...

}

if(b < 0)

cout << “b - teris san”; //b < 0 shart orınlanǵan jaǵday

return 0;

}

Programma orınlanıwı procesinde pútin tiptegi b ózgeriwshi járiyalanadı hám onıń mánisi klaviaturadan oqıladı. Keyin b mánisin 0 sanınan úlkenligi tekseriledi, eger shárt orınlansa (true), ol jaǵdayda ‘{‘ hám ‘}’ belgiler ishindegi operatorlar orınlanadı hám ekranǵa “b - oń san” xabarı shıǵadı. Eger shárt orınlanbasa, bul operatorlar sheklep ótiledi. Náwbettegi shárt operatorı b ózgeriwshi mánisin terislikke tekseredi, eger shárt orınlansa, jalǵız cout kórsetpesi orınlanadı hám ekranǵa “b - teris san” xabarı shıǵadı.

if - else operatorı.

Shárt operatorınıń if - else kórinisi tómendegishe:

if (<shárt-ańlatpa>) <operator1>; else <operator2>;

Bul jerde <shárt-ańlatpa> 0 mánisinen parıqlı yamasa true bolsa, <operator1>, keri jaǵdayda <operator2> orınlanadı. if-else shárt operatorı mazmunına bola algoritmniń tarmaqlanıwshı blogın ańlatadı: <shárt-ańlatpa> - shárt blogı (romb) hám

<operator1> bloktıń «awa» shaqasına, <operator2> bolsa bloktıń «yaq» shaqasına sáykes keliwshi ámeller blokları dep qaraw múmkin (2-súwret).

2-súwret. if - else shárt operatorınıń blok sxeması

Mısal sıpatında diskriminanttı esaplaw usılı járdeminde ax2+bx+c=0 kórinisindegi kvadrat teńleme sheshimlerin tabıw máselesin kóreyik:

#include <iostream.h>

#include <math.h>

int main()

{

float a, b, c;

float D, x1, x2;

cout << ”ax^2 + bx + c = 0 teńleme sheshimin tabıw.”;

cout << ”\n a - koefficientin kiritiń: ”;

cin >> a;

cout << ”\n b - koefficientin kiritiń: ”;

cin >> b;

cout << ”\n c - koefficientin kiritiń: ”;

cin >> c;

D = b * b – 4 * a * c;

if(D < 0)

{

cout << “Teńleme haqıyqıy sheshimge iye emes!”;

return 0;

}

else if(D == 0)

{

cout << “Teńleme jalǵız sheshimge iye: ”;

x1 = -b / (2 * a);

cout << ”\n x = “ << x1;

return 0;

}

else

{

cout << “Teńleme eki sheshimge iye: ”;

x1 = (-b + sqrt(D)) / (2 * a);

x2 = (-b - sqrt(D)) / (2 * a);

cout << ”\n x1 = “ << x1;

cout << ”\n x2 = “ << x2;

}

return 0;

}

Programma orınlanǵanda, birinshi náwbette teńleme koefficientleri - a, b, c ózgeriwshiler mánisleri kiritiledi, keyin diskriminant - D ózgeriwshi mánisi esaplanadı. Keyin D mánisiniń teris ekenligi tekseriledi. Eger shárt orınlı bolsa, pútin operator sıpatında keliwshi ‘{‘ hám ‘}’ belgileri arasındaǵı operatorlar orınlanadı hám ekranǵa “Teńleme haqıyqıy sheshimlerge iye emes” xabarı shıǵadı hám programma óz jumısın juwmaqlaydı (“return 0;” operatorın orınlaw arqalı). Diskriminant nolden kishi bolmasa, náwbettegi shárt operatorı onı nolge teńligin tekseredi. Eger shárt orınlı bolsa, keyingi qatarlardaǵı operatorlar blokı orınlanadı -ekranǵa “Teńleme jalǵız sheshimge iye:” xabarı, hámde х1 ózgeriwshi mánisi shıǵarıladı hám programma sol jerde óz jumısın juwmaqlaydı, keri jaǵdayda, yaǵnıy D mánisi nolden úlken jaǵdayı ushın else gilt sózinen keyingi operatorlar blogı orınlanadı hám ekranǵa “Teńleme eki sheshimge iye:” xabarı, hámde х1 hám х2 ózgeriwshiler mánisleri shıǵarıladı. Sol menen shárt operatorınan shıǵıladı hám tiykarǵı funkciyanıń return kórsetpesin orınlaw arqalı programma óz jumısın juwmaqlaydı.

Óz náwbetinde <operator1 > hám <operator 2> de shártli operator bolıwı múmkin. Ańlatpadaǵı hár bir else gilt sózi, aldındaǵı eń jaqın if gilt sózine tiyisli esaplanadı (tap ashılıwshı hám jabılıwshı qawıslar kibi). Bunı esapqa almasaq mazmun tárepinen qáteliklerge alıp keliwi múmkin.

Máselen:

if(x == 1)

if(y == 1) cout << ”x = 1 ham y = 1”;

else

cout << ”x <> 1”; Bul mısalda “x <> 1” xabarı х mánisi 1 hám y mánisi 1 bolmaǵan jaǵdayda da shıǵarıladı. Tómendegi variantta usı mazmundaǵı qátelik saplastırılǵan:

if(x == 1)

{

if(y == 1)

cout << ”x = 1 ham y = 1”;

}

else

cout << ”x <> 1”;

Ekinshi mısal sıpatında úsh pútin sannıń maksimal mánisin tabıwshı programma bólegin keltiriwimiz múmkin:

#include<iostream>

#include<math.h>

using namespace std;

int main(){

int x, y, z, max;

cin >> x >> y >> z;

if(x < y)

if(y < z)

max = z;

else

max = y;

else

if(x < z)

max = z;

else

max = x;

cout<<max;

return 0;

}

Shárt operatorında járiyalaw operatorların isletiw ruxsat etilmeydi, biraq ondaǵı bloklarda ózgeriwshilerdi járiyalaw múmkin hám bul ózgeriwshiler tek ǵana blok ishinde ámel qıladı. Tómendegi mısalda bul jaǵday menen baylanıslı qátelik kórsetilgen:

if(j > 0)

{

int i;

i = 2 * j;

}

else

i =- j; //qáte,sebebi i bloktan sırtta kórinbeydi

Másele. Berilgen tórt xanalı belgisiz sannıń basındaǵı eki cifrdıń qosındısı qalǵan cifrlar qosındısına teń yamasa teń emesligi anıqlansın (cifrlar qosındısı degende olarǵa sáykes san mánisleriniń qosındısı túsiniledi). Sannıń cifrların ajıratıp alıw ushın pútin sanlar arifmetikası ámellerinen paydalanadı:

#include <iostream.h>

int main()

{

unsigned int n, a3, a2, a1, a0; // n=a a a a kórinisinde

cout << ”\n n - mánisin kiritiń: ”;

cin >> n;

if(n < 1000 || n > 9999)

{

cout << ”Kiritilgen san 4 xanalı emes!”;

return 1;

}

a3 = n / 1000;

a2 = n % 1000 / 100;

a1 = n % 100 / 10;

a0 = n % 10;

if(a3 + a2 == a1 + a0)

cout << ”a3 + a2 = a1 + a0”;

else

cout << ”a3 + a2 <> a1 + a0”;

return 0;

Programma belgisiz pútin san kiritiwdi usınıs etedi. Eger kiritilgen san 4 xanalı bolmasa (n<1000 yamasa n>9999), bul haqqında хabar beriledi hám programma óz jumısın juwmaqlaydı. Keri jaǵdayda n sanınıń cifrları ajıratıp alınadı, hámde basındaǵı eki cifrdıń qosındısı - (a3+a2) qalǵan eki cifrlar qosındısı - (a1+a0) menen salıstırıladı hám olardıń teń yamasa teń emesligine qarap sáykes juwap shıǵarıladı.

Ternar operatorı

?: shárt ámeli.

Eger tekserilip atırǵan shárt salıstırmalı ápiwayı bolsa, shárt ámeliniń «?:» kórinisin isletiw múmkin:

shárt ańlatpa> ? <ańlatpa1 > : <ańlatpa2 >;

Shárt ámeli if shárt operatorına uqsas jaǵdayda isleydi: eger <shárt ańlatpa> 0 mánisinen parıqlı yamasa true bolsa, <ańlatpa1 >, keri jaǵdayda <ańlatpa2 > orınlanadı. Ádette ańlatpalar mánisleri qaysıdur ózgeriwshige ózlestiriledi.

Mısal sıpatında eki pútin san maksimumın tabıw máselesin kóreyik.

#include <iostream.h>

using namespace std;

int main()

{

int a, b, c;

cout << ”a hám b sanlar maksimumın tabıw.”;

cout << ”\n a - mánisin kiritiń:”;

cin >> a;

cout << ”\n b - mánisin kiritiń:”;

cin >> b;

c = a > b ? a : b;

cout << ”\n Sanlar maksimumı: ” << c;

return 0;

}

Programmadaǵı shárt operatorı mánis beriw operatorınıń quramına kirgen

bolıp, a ózgeriwshiniń mánisi b ózgeriwshiniń mánisinen úlkenligi tekseriledi. Eger shárt shın bolsa, c ózgeriwshisine a ózgeriwshi mánisin, keri jaǵdayda b ózgeriwshiniń mánisin ózlestiredi hám c ózgeriwshisiniń mánisi shıǵarıladı.

?: ámeliniń mánis qaytarıw qásiyetinen paydalanǵan jaǵdayda, onı tikkeley cout kórsetpesine jazıw arqalı da qoyılǵan máseleni sheshiw múmkin:

#include <iostream.h> using namespace std;

int main()

{

int a, b;

cout << ”a hám b sanlar maksimumın tabıw.”;

cout << ”\n a- mánisin kiritiń:”;

cin >> a;

cout << ”\n b- mánisin kiritiń:”;

cin >> b;

cout << ”\n Sanlar maksimumı: “ << (a > b) ? a : b;

return 0;

}

Shártsiz ótiw operatorı

goto operatorı

Shártsiz ótiw operatorınıń ulıwma kórinisi tómendegishe:

goto <belgi>;

goto operatorınan keyin basqarıw <belgi> ge uzatıladı hám programmanıń orınlanıwı sol jerden dawam etedi.

belgi - bul dawamında ':' qoyılǵan identifikator.

Mısal ushın : belgi :;

Belgi hár qanday operator aldından isletiliwi múmkin, sonıń menen birge shárt operatorı aldından da.

Mısal : N natural sanın kirgiziwdi usınıs etiwshi programma dúzilsin. Eger natural bolmaǵan san kiritilse, qayta kirgiziw usınıs etilsin.

#include <iostream>

#include <math. h>

using namespace std;

int main ()

{

float n;

belgi :

cout << “natural san kiritiń” << endl;

cin >> n;

if (( ceil (n)! =n) or (n <= 0))

goto belgi ;

cout << “Natural san kirgizildi” << endl;

return 0;

}

Programma orınlanıwı processinde birinshi náwbette n sanı kiritiledi, keyin kiritilgen sannı natural san emesligi tekseriledi. Eger shárt ras (true) baha qaytarsa belgige qaytadı hám n sanı qayta kiritiliwi soraladı. Keri jaǵdayda yáni n sanı natural san bolsa, “Natural san kirgizildi” xabarı shıǵarıladı.

Tańlaw operatorı

Switch operatorı.

Shárt operatorınıń jáne bir kórinisi switch tańlaw operatorı bolıp, onıń sintaksisi tómendegishe:

switch (<ańlatpa>)

{

case <turaqlı ańlatpa > : <operatorlar toparı >; break;

case <turaqlı ańlatpa > : <operatorlar toparı >; break;

case <turaqlı ańlatpa > : <operatorlar toparı >; break;

default : <operatorlar toparın+1>;

}

Bul operator tómendegishe ámel qıladı: birinshi náwbette <ańlatpa> mánisi esaplanadı, keyin bul mánis case gilt sózi menen ajıratılǵan <turaqlı ańlatpai> menen salıstırıladı. Eger olar birdey bolsa, sol qatardagi ‘:’ belgisinen baslap, break gilt sózine shekem bolǵan <operatorlar toparıi> orınlanadı hám basqarıw tarmaqlanıwshı operatordan keyin jaylasqan operatorǵa ótedi. Eger <ańlatpa> hesh bir <turaqlı ańlatpai> menen sáykes kelmese, qurılmanıń default bólegindegi <operatorlar toparın+1> orınlanadı. Sonı belgilep ótiw kerek, qurılmada default gilt sózi tek ǵana bir márte ushırawı múmkin.

Mısal ushın, kiriw aǵımınan “Process dawam etilsin be?” sorawına paydalanıwshı tárepinen juwap alınadı. Eger bolımlı juwap alınsa, ekranǵa “Process dawam etedi!” xabarı shıǵarıladı hám programma óz jumısın tarmaqlanıwshı operatordan keyingi operatorlardı orınlaw menen dawam ettiredi, keri jaǵdayda “Process juwmaqlandı!” juwabı beriledi hám programma óz jumısın juwmaqlaydı. Bunda, paydalanıwshınıń ‘y’ yamasa ‘Y’ juwapları processti dawam ettiriwdi bildiredi, basqa belgiler bolsa processti juwmaqlawdı ańlatadı.

#include <iostream.h>

using namespace std;

int main()

{

char Juwap = ’ ’;

cout << ”Process dawam etsin be? (‘y’,’Y’): ”

cin >> Juwap;

switch(Juwap)

{

case ‘Y’:

case ‘y’:

cout<<”Process dawam etedi!\n”;

break;

default:

cout<<”Process juwmaqlanadı!\n”;

return 0;

}

... // process

return 0;

}

Ulıwma alǵanda, tańlaw operatorında break hám default gilt sózlerin isletiw májbúriy emes. Biraq bul jaǵdayda operator mazmunı buzılıwı múmkin. Máselen, default bólegi bolmaǵan jaǵdayda, eger <ańlatpa> hesh bir <turaqlı ańlatpai> menen birdey bolmasa, operator hesh qanday ámel orınlamastan basqarıw tańlaw operatorınan keyingi operatorǵa ótedi. Eger break bolmasa, <ańlatpa> qandayda bir <turaqlı ańlatpai> menen birdey bolǵan jaǵdayda, oǵan sáykes keliwshi operatorlar toparın orınlaydı hám «toqtatpastan» keyingi qatardaǵı operatorlar toparın da orınlawdı dawam etedi. Máselen, joqarıdaǵı mısalda break operatorı bolmasa hám processti dawam ettiriwdi tastıyqlawshı (‘Y’) juwap bolǵan jaǵdayda ekranǵa

Process dawam etedi!

Process juwmaqlanadı!

хabarları shıǵadı hám programma óz jumısın juwmaqlaydı (return operatorınıń orınlanıwı nátiyjesinde).

Tańlaw operatorı sanap ótiliwshi tiptegi turaqlılar menen birgelikte isletilgende nátiyje beredi. Tómendegi programmada reńler gammasın klassifikaciyalaw máselesi sheshilgen.

#include <iostream.h>

using namespace std;

int main()

{

enum Reńler{Qızıl, Toq_sarı, Sarı, Jasıl, kók, Kúlreń, Fiolet};

Reńler Reń;

//...

switch(Reń)

{

case Qızıl:

case Toq_sarı:

case Sarı:

cout << ”Íssı gamma saylandı.\n”; break;

case Jasıl:

case Kуk:

case Kúlreń:

case Fiolet:

cout << ”Suwıq gamma saylandı.\n”; break;

default:

cout << ”Raduga bunday reńge iye emes.\n”;

}

return 0;

}

Programma orınlanıwında basqarıw tańlaw operatorına kelgende, Reń mánisi Qızıl, Toq_sarı yamasa Sarı bolsa, “Íssı gamma saylandı” xabarı, eger Reń mánisi Jasıl, Kók, Kúlreń yamasa Fiolet bolsa, ekranǵa “Suwıq gamma saylandı” xabarı, eger Reń mánisi sanap ótilgen mánislerden parıqlı bolsa, ekranǵa “Raduga bunday reńge iye emes” xabarı shıǵarıladı hám programma óz jumısın juwmaqlaydı. switch operatorında járiyalaw operatorları da ushırawı múmkin. Biraq switch operatorı orınlanıwında «sekirip ótiw» jaǵdayları bolıwı esabına blok ishindegi ayrım járiyalawlar orınlanbawı hám bunıń aqıbetinde programma ishinde qátelik júzege keliwi múmkin:

//...

int k = 0, n = 0;

cin >> n;

switch(n)

{

int i = 10; //qáte, bul operator orınlanbaydı

case 1:

int j = 20; //eger n = 2 bolsa, bul járiyalaw

orınlanbaydı

case 2:

k += i + j; //qáte, sebebi i, j ózgeriwshiler belgisiz

}

cout << k;

//... Másele. Tómende sanap ótiliwshi tipler hám sol tiptegi ózgeriwshiler járiyalanǵan:

enum Birlik {decimetr, kilometr, metr, millimetr, santimetr};

float x; Birlik r;

r birlikte berilgen x уzgeriwshisiniń mбnisi metrlerde shıǵarılsın.

#include <iostream.h>

using namespace std;

int main()

{

enum

Birlik{decimetr, kilometr, metr, millimetr, santimetr};

float x, y;

Birlik r;

cout << "Uzınlıqtı kiritiń: x = ";

cin >> x;

cout << "Uzınlıq birlikleri\n";

cout << "0 - decimetr\n";

cout << "1 - kilometr\n";

cout << "2 - metr\n";

cout << "3 - millimetr\n";

cout << "4 - santimetr\n";

cout << "Uzınlıqtıń birligin saylań: r = ";

cin >> r;

switch(r)

{

case decimetr: y = x / 10; break;

case kilometr: y = x * 1000; break;

case metr: y = x; break;

case millimetr: y = x / 1000; break;

case santimetr: y = x / 100; break;

default:

cout << "Uzınlıq birligi nadurıs kiritildi!";

return 0;

}

cout << y << " metr";

return 0;

}

Соседние файлы в предмете Программирование на C++