Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Muasir proq dil C++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
7.31 Mб
Скачать

4.3. Budaqlanan alqoritmlərin proqramlaşdırılması

4.3.1. Şərt operatoru

Ümumi formatı belədir:

  1. əgər şərtin (ifadənin) doğru oldu­ğu zaman yerinə yeti­ri­lən operator təkdirsə:

if (ifadə) operator;

  1. əgər belə operatorlar bir neçə­dir­sə:

if (ifadə) { operator 1;

operator2;

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

operator n; }

Bu halda “ifadə” qiyməti tam qiymətə gətirilə bilən ixti­ya­ri ifa­də­dir. Əgər onun qiyməti sıfırdan fərqlidirsə (doğru­dur­sa), on­da “ operator” yerinə yetirilir.

İfadəni müəyyən qiymətlə müqayisə edərkən münasibət ope­ratorlarından (== və ya !=) istifadə etmək lazımdır.

if (ifadə = = qiymət) operator;

və ya

if (ifadə != qiymət) operator;

Burada operator sadə və ya mürəkkəb ola bilər.

Qeyd 1. if (ifadə !=0) operator;

operatoru

if (ifadə) operator;

operatoruna ekvivalentdir.

Qeyd 2. if (ifadə=qiymət) operator;yazmaq olmaz, çünki = işa­rə­si mənimsətmə əməliyyatını göstərir.

Şərti göstərən ifadə kiçik mötərizədə yazılır. if opera­to­ru iki bu­da­ğa malikdir, onlardan biri alternativ olur. Belə sxe­m­ “şaxələnmə” adlanır. “Şaxələnmə” strukturunun təşkili üçün else operatoru istifadə olunur. O, if operatorunun genişlənməsi və ya onun alternativ hissəsidir:

  • əgər ifelse – dən sonra sadə (tək) operatorlar gəlir­sə:

if(ifadə) operator1;

else operator2;

  • əgər operatorlar mürəkkəbdirsə:

if (ifadə) {operator 1 ;

operator 2;

}

else {operator 3;

operator 4;

}

if operatorunun daxili operatorları olaraq istənilən ope­ra­tor­lar, həmçinin şərt operatorları istifadə olunur:

if(ifadə 1)

operator 1;

else if (ifadə 2)

operator 2;

else if (ifadə 3)

operator 3;

. . . .

else if (ifadə n)

operator n;

else // məcburi olmayan hissə

operator_ susmaya_ görə;

Bu cür konstruksiyalarda else hissəsi əvvəlki ən yaxın if -lə əlaqələndirilir ( else hissəsi olmayan).

Qeyd 3. if – else operatorunu onun funksional qiy­mə­ti­ni­ də­­­yiş­­­məyərək daha kompakt yazmaq olar. Bu halda o, şərt­ ifa­də­si adlanır:

ifadə 1? ifadə 2; ifadə 3;

Proqram ifadə 1 – i hesablayır: əgər o, yalandırsa, ifadə 2 ­ye­rinə yetirilir; əgər o da yalandırsa, ifadə 3 yerinə yetirilir. Bu isə tamamilə

if (ifadə1) ifadə 2

else ifadə 3

sintaksisinə analojidir. Aşağıdakı proqram fraqmentləri ekvi­va­lent­dir.

. . . . . . . . . . . . . . . . .

if (meas== “y”) value­=(meas==”y”)?­100:;

value= 100; . . . . . . . . .

else

value=0;

. . . . . . . .

Lakin aydınlıq (əya­ni­lik) nöqteyi-nəzərindən şərt ope­ra­to­ru daha əlverişlidir.

Misal 4.2. Kvadrat tənliyin həlli üçün proqram.

#include <stdio.h>

#include <stdlib.h>

# include "math.h"

int main()

{ float a,b,c, x1,x2, d;

printf("a=");

scanf (" %f", &a);

printf("b=");

scanf("%f",&b);

printf("c=");

scanf("%f",&c);

d=b*b-4*a*c;

if (d<0) printf( " heqiqi helli yoxdur \n ");

else {

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

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

printf (" kokler: x1=%3.2f\n x2=%3.2f\n",x1,x2);

} printf ("\n <Enter>\n " );

return 0;

}

Alınmış nəticə:

4.3.2. Tez-tez rast gəlinən səhvlər

  1. Münasibət ifadəsindən sonra nöqtə vergül (;) qoymaq ol­maz:­

if (num% 2 ==0); // burada nöqtə vergül yazmaq olmaz!

cout<<” reqem cutdur”<<endl;

  1. Bir neçə şərt operatoru üçün sistem mötərizələri vacibdir:

if (num %2==0)

cout<<” reqem cutdur”<<endl;

cout<<” Reqem cut deyil”<<endl;

Əgər istifadəçi tək ədəd, məsələn, 13 daxil edərsə, onda

cout<<” reqem cutdur”

instruksiyası işləməyəcək, ona görə ki, münasibət ifadəsinin qiy­məti yalana bərabərdir. Lakin növbəti

Reqem cut deyi­l”­­­ ­

simvol sətri təsvir olunacaq. Ona görə ki,

cout <<”Reqem cut deyil”

instruksiyası şərt ope­ra­toruna aid deyil.

Misal 4.3.

#include <cstdlib>

#include <iostream>

#include<conio.h>

using namespace std;

int main(int argc, char *argv[])

{int num;

cin>>num;

if(num%2==0)

cout<<"reqem cutdur"<<endl;

cout<<"Reqem cut deyil"<<endl;

getch();

return 0;

}

Əgər şərt operatorunda bir instruksiyadan ço­xu­nun yerinə ye­ti­rilməsini istəyiriksə, onda bu instruk­si­ya­ları hökmən sistem mö­tərizələri daxilinə almalıyıq:

if (num % 2 ==0)

{

cout<<” reqem cutdur”<<endl;

cout<<” Reqem tek deyil”<<endl;

}

Burada yalnız məntiqi ifadə doğruya bərabər ol­duq­­da iki ifadə yerinə yetiriləcək.

  1. Bərabərlik operatoru əvəzinə mənimsətmə opera­to­ru­­nu istifadə etmək olmaz.

if (num% 2 =0) // düzgün olmayan operator!

cout<<” Reqem cut deyil”<<endl;

Nəticədə məntiqi ifadə müqayisənin nəticəsi kimi emal olun­ma­yacaq. Bunun əvəzinə o, son mənimsətmə nəticəsi olaraq mö­tərizədəki ifadəni alacaq, burada sıfır olmayan qiymət doğru, sı­­fır qiymət isə yalan hesab olunur.

  1. if –siz else yoxdur!

Qeyd edək ki, else hissəsi olmayan if ola bilər, lakin bunun ək­­si ola bilməz. else hissəsi şərt operatorunun hissəsi ol­ma­lı­dır. Ona görə də if xidməti sözlü məntiqi ifadədən sonra qoyu­lan nöqtəli vergül (;) kompilyator tərəfindən səhv kimi qeyd olu­nacaq. Belə ki, sistem mötərizələri istifadə olunmurlar, if şərt operatoru isə qeyri-düzgün qoyulmuş nöqtə vergüldən ya­ra­­­nan boş operatordan sonra sona çatır. Onda cout<<”Reqem tek deyil”- instruksiyası if şərt operatorunun hissəsi deyil. Ona görə də else hissəsi də if operatorunun hissəsi olmayacaq və if-siz else kimi qiymətləndiriləcək.

if(num %2 ==0);// burada nöqtə-vergül qoymayın!

cout<<” reqem cutdur”<<endl;

else(num % 2==1)

cout<<” Reqem cut deyil”<<endl;

  1. else xidməti sözündən sonra məntiqi ifadə (münasibət ifa­də­si) yazmayın! Qeyd edək ki, bu proqramın kompil­ya­si­ya­sı və işləmə­sin­də səhv­lərə gətirmir, səhv nəticənin alın­ma­sına sə­bəb olur:

if (num%2==0)

cout<<” reqem cutdur”<<endl;

else (num%2==1)

cout<<” Reqem cut deyil”<<endl;

Bu proqram kompilyasiya olunmayacaq və else sözündən son­ra­kı cout instruksiyası aşağıdakı səhvlə işıqlandırılacaq:

missing ‘;’ before identifier ‘cout’ ”.

Burada cout instruksiyası ilə hər şey qaydasındadır, lakin sa­də­cə olaraq else xidməti sözündən sonra münasibət ifadəsi gələ bilməz.

  1. else-dən sonra nöqtə vergül (;) qoymayın!

Bu halda da proqramın kompilyasiyası və ya işləməsi zama­nı səhv haqqında məlumat çıxarılmayacaq, lakin səhv nəticə alınacaq. Məsələn, aşa­ğı­da­kı kodda cout<<”Reqem cut deyil”; instruksiyası hət­ta daxil edilən ədəd cüt olduqda belə işləyəcək.

if (num %2 ==0)

cout<<” reqem cutdur”<<endl;

else; //burada nöqtə vergül qoymayın!

cout<<” Reqem cut deyil”<<endl;

Burada cout<<” Reqem cut deyil” instruksiyası müna­si­bət ifa­də­sinin doğru və ya yalan qiymət almasından asılı olma­ya­raq iş­­ləyəcək, ona görə ki, cout instruksiyası indi if şərt ope­ra­to­ru­nun hissəsi deyil.

Proqramın if hissəsi üçün deyilən səhv­lər, el­se­­ if hissəsinə də aiddir.

Bundan başqa if-siz else if hissəsi ola bilməz, lakin else hissəsi olmayan bir və ya bir neçə else if hissəsi və if hissəsi ola bilər.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]