programarea calculatoarelorCap 4

  • Upload
    pstraja

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

  • 8/14/2019 programarea calculatoarelorCap 4

    1/25

    Instruciunile limbajului C.

    CAPITOLUL 4

    INSTRUCIUNILE LIMBAJULUI C

    Instruciunea if

    Instruciunea if este una din instruciunile de selecie, numit uneori instruciunecondiional. Instruciunile de selecie iau decizii bazate pe rezultatul unei condiii.Forma general a instruciunii ifeste urmtoarea:

    if(expresie) instruciune;expresie poate fi orice expresie C valid.

    Dac valoarea expresiei este evaluat ca true (adevrat), instruciune va fi executat.Dac expresie este evaluat ca false (fals), atunci ea va fi srit i se va executa instruciuneacare urmeaz dup if. n limbajul C, o expresie este true dac ea este evaluat ca diferit dezero i false dac ea este evaluat ca fiind zero. O alt form de reprezentare a instruciunii ifeste prezentat n continuare:

    if(expresie) instruciune1;else instruciune2;

    Dac expresie este true, va fi executat instruciune1, iar instruciune2 va fi srit.Dac expresie este false, atunci instruciune1 este srit i se va executa instruciune2.Adugarea lui else conduce la luarea unei decizii dintre cele dou ci posibile. n limbajul C se pot nlnui dou sau mai multe instruciuni. Aceast nlnuire poartnumele de secven de instruciuni. Pentru a creea o secven de instruciuni este suficientcuprinderea instruciunilor ce vor forma secvena ntre paranteze acolade. Forma general ainstruciunii iffolosind secvena de instruciuni este urmtoarea:

    if(expresie) instruciune;elseif(expresie) instruciune;else

    if(expresie) instruciune;...

    else instruciune;Expresiile sunt evaluate de sus n jos. Cnd este gsit o expresie true, instruciunea

    asociat cu ea este executat i restul scrii este srit. Dac nici o expresie nu este true, adicdac toate testele condiionale eueaz, va fi executat ultimul else. Dac ultimul else nu esteprezent i toate testele condiionale au euat, nu se produce nici o aciune.

    Aplicaia 1:S se realizeze programul care calculeaz valoarea funciei y

    ntr-un punct x citit de la tastatur.

    >++

    =

  • 8/14/2019 programarea calculatoarelorCap 4

    2/25

    Instruciunile limbajului C.

    Specificarea problemei:Date de intrare: x - punctul n care se calculeaz valoarea funciei;

    Date de ieire: y - valoarea funciei;Date de test: Valoarea lui x = 3

    y (x) = 71,86Algoritmul problemei:

    nceput algoritmCitete xdac x

  • 8/14/2019 programarea calculatoarelorCap 4

    3/25

    Instruciunile limbajului C.

    Specificarea problemei:Date de intrare: meniul;

    a, b - dou numere citite de la tastatur;Date de ieire: realizarea operaiilor corespunztoare: adunare, scdere, multiplicare,

    mprireDate de test: Doriti:

    AdunareScadereMultiplicareImpartireIntroduceti prima litera: mIntroduceti primul numr: 4.3Introduceti al doilea numr: 2.8a*b=12.04

    Algoritmul problemei:nceput algoritmscrie Dorii Adunare Scdere Multiplicare

    citete prima liter, a, bdac (liter = A sau liter = a) atunci scrie a+b

    altfel dac (liter = S sau liter = s) atunci scrie a-baltfel dac (liter = M sau liter = m) atunci scrie a*b

    altfel dac (liter = I i b 0) sau (liter = i i b 0) scriea/b

    sfrit dacsfrit dac

    sfrit dacsfrit dacsfrit algoritm

    Programul corespunztor algoritmului este:#include #include void main (){float a,b;char ch;clrscr();printf ("Doriti :\n"); printf ("Adunare\nScadere\nMultiplicare\nImpartire\n");printf ("Introduceti prima litera: ");

    ch=getche ();printf ("\nIntroduceti primul numar: ");scanf ("%f", &a);printf ("\nintroduceti al doilea numar: ");scanf ("%f", &b);if ((ch=='A')||(ch=='a')) printf ( "a+b=%1.2f", a+b);else if ((ch=='S')||(ch=='s')) printf ("a-b=%1.2f", a-b);else if ((ch=='M')||(ch=='m')) printf ("a*b=%1.2f", a*b);else if ((ch=='I'&&b!=0)||(ch=='i'&&b!=0)) printf ("a/b=%1.2f", a/b);getch();}

    50

  • 8/14/2019 programarea calculatoarelorCap 4

    4/25

    Instruciunile limbajului C.

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:a reprezint primul numr;b reprezint al doilea numr;ch - este variabila n care se va pstra codul tastei apsate;

    Folosind funcia standard printfse va afia pe ecran meniul i se va cere utilizatoruluis introduc prima liter corespunztoare operaiei dorite. Citirea celor dou numere se face cuajutorul funciei standard scanf. Funcia getche se folosete pentru a citi tasta apsat, iarcodul tastei apsate se va depune n variabila ch. Aceast funcie are cele mai comune utilizrin citirea variabilelor selectate dintr-un meniu Cu ajutorul instruciunii condiionale if, nfuncie de tasta apsat, se va realiza operaia corespunztoare. n partea de expresie ainstruciunii if s-a folosit operatorul SAU (||) pentru a realiza operaia corespunztoareindiferent dac se apas tasta a sau A. La realizarea operaiei de mprire avem nevoie deoperatorul SI (&&) pentru a determina dac numitorul este diferit de zero.

    Aplicaia 3:

    S se realizeze programul care calculeaz media general a unui student care a avut treiexamene n sesiunea de iarna. Pentru fiecare materie trebuie s se introduc notele obinute inumrul de credite.Formula dup care se calculeaz media este urmtoarea:

    321

    332211

    ccc

    cncncnmedia

    ++

    ++=

    n funcie de medie se va afia dac studentul este bursier sau nebursier, condiiapentru bursier fiind ca media 8.Specificarea problemei:

    Date de intrare: n1, n2, n3, c1, c2, c3 - trei note i trei credite citite de la tastatur;Date de ieire: media i informaia privind situaia de bursier sau nebursier a

    studentului;Date de test: Introduceti nota 1 si creditele corespunzatoare notei:

    10 2Introduceti nota 2 si creditele corespunzatoare notei:7 3

    Introduceti nota 3 si creditele corespunzatoare notei:8 2

    Media = 8.14BURSIER

    Algoritmul problemei:nceput algoritm

    citete n1,n2,n3,c1,c2,c3

    321

    332211

    ccc

    cncncnmedia

    ++

    ++

    dac media 8 atunci scrie BURSIERaltfel scrie NEBURSIER

    sfrit dacsfrit algoritm.

    51

  • 8/14/2019 programarea calculatoarelorCap 4

    5/25

    Instruciunile limbajului C.

    Programul corespunztor algoritmului este:#include#includevoid main(){int n1,n2,n3,c1,c2,c3;

    float media;clrscr();printf("Introduceti nota 1 si creditele corespunzatoare notei:\n");scanf("%d %d",&n1,&c1);printf("Introduceti nota 2 si creditele corespunzatoare notei:\n");scanf("%d %d",&n2, &c2);printf("Introduceti nota 3 si creditele corespunzatoare notei:\n");scanf("%d %d",&n3, &c3);media=(float)(n1*c1+n2*c2+n3*c3) /(c1+c2+c3); printf("Media= %1.2f\n",media);if(media>=8) printf("BURSIER");

    else printf("NEBURSIER");getch();}

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:n1, c1 reprezint prima not respectiv creditele corespunztoare acesteia;n2, c2 reprezint a doua not respectiv creditele corespunztoare acesteia;n3, c3 - reprezint a treia not respectiv creditele corespunztoare acesteia;media-reprezint valoarea mediei i se calculeaz dup formul;Folosind funcia standard scanfse vor citi cele trei credite i cele trei note iar apoi se

    va calcula media folosind formula dat n problem. Aici se poate observa folosirea

    operatorului cast. Utilizarea lui a fost necesar deoarece notele i creditele sunt de tip ntreg iastfel vom obine media de tip ntreg, n timp ce noi vrem ca media s fie de tip float. ncontinuare, cu ajutorul instruciunii condiionale if se va testa media iar dac aceasta este 8se va afia BURSIER, n caz contrar se va afia NEBURSIER.

    Instruciunea for

    Este una din cele trei instruciuni de ciclare ale limbajului C. Ea permite ca una saumai multe instruciuni s fie repetate. Forma general a instruciunii for este urmtoarea:

    for (iniializare; test_ condiie; reiniializare) instruciune;iniializare d o valoare iniiala variabilei care controleaz ciclul.test_condiie testeaz variabila de control, cu valoarea scop ori de cate ori ciclul se repet.reiniializare este executat la sfritul fiecrui ciclu. Scopul este s incrementeze variabila

    de control a ciclului cu o anumit cantitate.

    Aplicaia 1:S se realizeze programul care afieaz n ordine numerele de la 1 pn la un numr n

    citit de la tastatur, iar apoi afieaz mesajul "am terminat".Specificarea problemei:

    Date de intrare: n - numrul pn la care se vor afia numerele;Date de ieire: numerele de la 1 la n i mesajul "am terminat";

    52

  • 8/14/2019 programarea calculatoarelorCap 4

    6/25

    Instruciunile limbajului C.

    Date de test: Introduceti pe n: 121 2 3 4 5 6 7 8 9 10 11 12 am terminat

    Algoritmul problemei:nceput algoritmcitete ni 1

    ct timp in execut scrie ii i+1

    sfrit ct timpscrie am terminatsfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main (){int n,i;

    clrscr();printf("Introduceti pe n:");scanf("%d ",&n);for(i=1; i

  • 8/14/2019 programarea calculatoarelorCap 4

    7/25

    Instruciunile limbajului C.

    Algoritmul problemei:nceput algoritmcitete nS 0P 1ct timp in execut S S+i

    P P*ii i+1

    sfrit ct timpscrie S, Psfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main(){int n,S,i;

    long P;clrscr();printf("Introduceti pe n: ");scanf("%d",&n);S=0;P=1;for(i=1;i

  • 8/14/2019 programarea calculatoarelorCap 4

    8/25

    Instruciunile limbajului C.

    Specificarea problemei:Date de intrare: n - numrul de valori din care este compus irul;

    a - valorile efective;Date de ieire: s1 i s2;

    Date de test: Introduceti numarul de valori: 4Introduceti valoarea 1: 1

    Introduceti valoarea 2: 2Introduceti valoarea 3: 3Introduceti valoarea 4: 4s1=6 si s2=4

    Algoritmul problemei:nceput algoritmCitete ns1 0s2 0i 1ct timp in execut citete a

    dac a mod 2 =0 atunci s1 s1+aaltfel s2 s2+a

    sfrit daci i+1

    sfrit ct timpscrie s1, s2sfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main()

    {clrscr();int n,i,s1,s2,a;printf("Introduceti numarul de valori: ");scanf("%d",&n);s1=0;s2=0;for(i=1;i

  • 8/14/2019 programarea calculatoarelorCap 4

    9/25

    Instruciunile limbajului C.

    s1 - n aceast variabil se va calcula suma numerele pare;s2 - n aceast variabil se va calcula suma numerelor impare;

    Folosind funcia standard scanfse va citi numrul n. Se iniializeaz s1 cu zero,deoarece aceste este element neutru la adunare i s2 tot cu zero deoarece avem tot o adunare.La nceput variabila de contor a ciclului se va iniializa cu 1. Apoi este evaluat expresia i n.Deoarece ea este true, ciclul for ncepe execuia. Dup ce se citete, cu ajutorul funciei

    standard scanf, valoarea efectiv a numrului se testeaz dac acesta este par sau impar. Dacrestul mpririi numrului la 2 este zero nseamn c numrul este par i se poate aduna nsuma s1. Dac nu, este impar i se adun n suma s2. Dup ce se calculeaz s1 sau s2 nfuncie de cum este numrul, par sau impar, variabila contor este incrementat cu 1 i testul decondiie (i n) este evaluat din nou. Acest proces continu pn cnd i devine mai mare dectn. Cnd aceasta se ntmpl, ciclul for se oprete i sunt afiate cele dou sume s1 i s2.

    Instruciunea while

    Este a doua instruciune repetitiv a limbajului C i are urmtoarea form general:while (expresie) instruciune;

    Ciclul while lucreaz prin repetarea scopului atta timp ct expresie este true. Cndexpresie este false ciclul nceteaz. Valoarea expresiei este cercetat la nceputul ciclului,aceasta nsemnnd c, dac expresie este false de la nceput ciclul nu se va executa.

    Aplicaia 1:S se realizeze programul care determin dac un numr n este sau nu un numr prim.

    Un numr este prim daca nu se mparte dect la 1 si la el nsui.Specificarea problemei:

    Date de intrare: n - numrul pe care l verificm dac este sau nu prim;Date de ieire: dac numrul este sau nu prim;

    Date de test: Introduceti numarul: 9

    Numarul nu este primAlgoritmul problemei:

    nceput algoritmcitete nprim 0i 2ct timp in/2 i prim=0 execut dac n mod i =0 atunci prim 1

    sfrit daci i+1

    sfrit ct timpdac prim 0 atunci scrie Numrul este prim

    altfel scrie Numrul nu este primsfrit dacsfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main(){int n,i,prim;clrscr();

    56

  • 8/14/2019 programarea calculatoarelorCap 4

    10/25

    Instruciunile limbajului C.

    printf("Introduceti numarul: ");scanf("%d",&n);prim=0;i=2;while(i

  • 8/14/2019 programarea calculatoarelorCap 4

    11/25

    Instruciunile limbajului C.

    Programul corespunztor algoritmului este:#include#includevoid main(){int Nr,S,n,r;clrscr();

    printf("Introduceti numarul: ");scanf("%d",&n);S=0;Nr=0;while(n!=0){r=n%10;S=S+r;n=n/10;Nr=Nr++;}

    printf("Suma cifrelor: S=%d\nNumarul cifrelor: Nr=%d",S,Nr);getch();}

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:n reprezint numrul pentru care calculm suma i numrul cifrelor;r - este o variabil n care vom reine ultima cifr din numr;S - n aceast variabil se va calcula suma cifrelor numrului n;Nr - n aceast variabil se va calcula numrul cifrelor numrului n;Folosind funcia standard scanfse va citi numrul n. Iniializm suma S cu zero iar Nr

    tot cu zero, acesta fiind elementul neutru la adunare. Pn cnd numrul citit n este diferit de

    zero se realizeaz o serie de operaii asupra acestuia. Pentru a obine ultima cifr a numruluise va reine n variabila r restul mpririi lui n la 10. Pentru exemplul nostru la prima iteraien variabila r vom avea cifra 6. Apoi acest rest, respectiv ultima cifr a numrului, se adun nsuma S (S=0+6). Mai trebuie s scpm de ultima cifr a numrului pentru a putea reluaalgoritmul. Acest lucru se realizeaz prin mprire ntreag a lui n la 10 (n=2345). Totodat serealizeaz i o contorizare a numrului de cifre n variabila Nr care se incrementeaz la fiecareiteraie (Nr=1). Se realizeaz testarea condiiei pn cnd n va fi egal cu zero. Cnd aceasta sentmpl, ciclul while se oprete i se afieaz rezultatul obinut: suma S i numrul de cifreNr.

    Aplicaia 3:

    S se calculeze suma numerelor impare i produsul numerelor pare pn la un n citit dela tastatur. Se cere ca suma i produsul s se calculeze folosind dou structuri while, unapentru calcului sumei i una pentru calculul produsului.

    S=1+3+5+.......+2n-1P=2*4*6*......*2n

    Specificarea problemei:Date de intrare: n - numrul pn la care dorim s calculm suma i produsul;Date de ieire: Suma S, Produsul P;

    Date de test: Introduceti pe n: 4

    Suma: S=16

    58

  • 8/14/2019 programarea calculatoarelorCap 4

    12/25

    Instruciunile limbajului C.

    Produsul: P=384Algoritmul problemei:

    nceput algoritmcitete nS 0i 1ct timp i2n-1 execut S S+i

    i i+2sfrit ct timpscrie SP 1i 2ct timp i2n execut P P*i

    i i+2sfrit ct timpscrie Psfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main(){int i,n,S;long Pclrscr();printf("Introduceti pe n: ");scanf("%d",&n);S=0;i=1;

    while(i

  • 8/14/2019 programarea calculatoarelorCap 4

    13/25

    Instruciunile limbajului C.

    S - n aceast variabil se va calcula suma;P - n aceast variabil se va calcula produsul;Folosind funcia standard scanfse va citi numrul n. La nceput se iniializeaz suma

    cu zero i variabila contor i cu unu. Pn cnd variabila contor i este mai mic sau egal cu 2n-1 se calculeaz suma S i se incrementeaz variabila contor cu doi pentru a putea realiza sumanumerelor impare. Cnd condiia nu mai este ndeplinit, ciclul while se oprete i se afieazvaloarea sumei S.n continuare trebuie s se iniializeze din nou variabila contor, de aceast

    dat cu doi pentru c avem produsul numerelor pare. Pn cnd variabila contor i este maimic sau egal cu 2n se calculeaz produsul P i se incrementeaz variabila contor cu doipentru a putea realiza produsul numerelor pare. Cnd condiia nu mai este ndeplinit, ciclulwhile se oprete i se afieaz valoarea produsului P.

    Instruciunea do-while

    Instruciunea do-while are urmtoarea form general:do{

    instruciuni}

    while (expresie);Dac se execut o singur instruciune parantezele acolade pot s lipseasc. Muli

    programatori prefer s lase totui acoladele pentru a vedea c nu este vorba de o instruciunewhile. Ciclul do repet instruciunea sau instruciunile din corpul su ct timp expresie estetrue i se oprete cnd expresie devine false. Ciclul do va executa totdeauna instruciunile dincorpul su cel puin o dat, deoarece expresie, care controleaz ciclul, este testat la sfritulciclului. Deosebirea dintre do-while i while const n faptul c pentru instruciunea whiletestul se face la nceputul ciclului iar pentru do-while la sfrit.

    Aplicaia 1:

    S se realizeze programul care va afia pe ecran urmtorul meniu:AdunareScdereMultiplicarei va realiza operaiile corespunztoare. Dac utilizatorul va tasta A se va face adunare, dacva apsa S se va realiza scdere, dac se va apsa M se va face multiplicare. Utilizndinstruciunea do-while se va fora utilizatorul s introduc un rspuns valid, repetnd ciclulpn cnd se va obine un astfel de rspuns.Specificarea problemei:

    Date de intrare: meniu;a, b - dou numere citite de la tastatur;

    Date de ieire: realizarea operaiilor corespunztoare: adunare, scdere,multiplicare, mprire;

    Date de test: Doriti:AdunareScadereMultiplicareIntroduceti prima litera: AIntroduceti primul numar: 3.4

    Introduceti al doilea numar: 6.8a+b=10.20

    60

  • 8/14/2019 programarea calculatoarelorCap 4

    14/25

    Instruciunile limbajului C.

    Algoritmul problemei:nceput algoritmscrie "Dorii Adunare Scdere Multiplicarerepet scrie Introducei prima liter

    citete literpn cnd (liter = A sau liter = S sau liter = M)citete a

    citete bdac (liter = A) atunci scrie a+b

    altfel dac (liter = S) atunci scrie a-baltfel scrie a*b

    sfrit dacsfrit dacsfrit algoritm

    Programul corespunztor algoritmului este:#include #include void main ()

    {float a,b;char ch;clrscr();printf ("Doriti: \n");printf ("Adunare\nScadere\nMultiplicare \n");do {printf ("Introduceti prima litera: ");ch=getche ();printf ("\n");}while ( ch!='A' && ch!='S' && ch!='M' );

    printf ("Introduceti primul numar:");scanf ("%f",&a);printf ("Introduceti al doilea numar: ");scanf ("%f",&b);if (ch=='A') printf ("a+b=%1.2f", a+b);else if (ch=='S') printf ("a-b=%1.2f", a-b);else if (ch=='M') printf ("a*b=%1.2f", a*b);getch();}

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:

    a reprezint primul numr;b reprezint al doilea numr;ch - este variabila n care se va pstra codul ASCII al tastei apsate;Folosind funcia standard printfse va afia pe ecran meniul. Utiliznd instruciunea

    do-while se va fora utilizatorul s introduc un rspuns valid, repetnd citirea tastei pncnd aceasta coincide cu una valid. Citirea celor dou numere se face cu ajutorul funcieistandard scanf. Cu ajutorul instruciunii condiionale if, n funcie de tasta apsat, se va

    realiza operaia corespunztoare: adunare, scdere, multiplicare. n acest caz utilizatorultrebuie s introduc litere mari, respectiv A, S, M.

    61

  • 8/14/2019 programarea calculatoarelorCap 4

    15/25

    Instruciunile limbajului C.

    Aplicaia 2:S se determine dac un numr este sau nu este palindrom. Un numr este palindrom

    dac coincide cu numrul format din cifrele sale n ordine invers.Numrul 23432 este palindrom pentru c inversul su 23432 coincide cu numrul iniial.Numrul 234 nu este palindrom pentru c inversul su 432 nu coincide cu numrul iniial.Specificarea problemei:

    Date de intrare: n - numrul care dorim s verificm dac este palindrom;Date de ieire: este palindrom sau nu este palindrom;

    Date de test: Introduceti numrul: 23432Numrul este palindrom

    Algoritmul problemei:nceput algoritmcitete nm ninv 0repet r n mod 10

    inv inv*10+r

    n [ ]10/npn cnd n=0dac inv = m atunci scrie Numrul este palindrom

    altfel scrie Numrul nu este palindromsfrit dacsfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main(){

    int n,m,inv,r;clrscr();printf("Introduceti numarul: ");scanf("%d",&n);m=n;inv=0;do{r=n%10;inv=inv*10+r;n=n/10;}while(n!=0);

    if(inv==m)printf("Numarul este palindrom");else printf("Numarul nu este palindrom");getch();}

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:n reprezint numrul pe care l verificm dac este sau nu palindrom;

    inv reprezint variabila n care vom construi numrul invers;m - reprezint variabila n care se va pstra valoarea lui n;r - este o variabil n care vom reine ultima cifr din numr;

    62

  • 8/14/2019 programarea calculatoarelorCap 4

    16/25

    Instruciunile limbajului C.

    Folosind funcia standard printfse va cere utilizatorului s introduc numrul n iapoi se citete acest numr cu ajutorul funciei standard scanf. Se iniializeaz variabila inv cuzero i se reine n variabila m valoarea numrului citit, deoarece asupra acestuia se fac o seriede operaii. n variabila r se reine ultima cifr a numrului, obinut din restul mpririi lui nla 10. Apoi se construiete numrul invers i se scap de ultima cifr din numr pentru a putearelua ciclul. Aceste operaii se repet pn cnd numrul devine zero, respectiv ct timp n estediferit de zero. Cnd numrul este zero se iese din ciclul do-while i se compar variabila inv

    cu variabila m, n care, n prealabil am reinut valoarea iniial a numrului citit. Dac celedou numere coincid nseamn c numrul este palindrom, dac nu coincid nseamn cnumrul nu este palindrom.

    n continuare, se prezint paii prin care se obine numrul invers, pentru numrul23432:

    Pasul n inv r

    1 23432

    0 -

    2 2343 0*10+2=2 23 234 2*10+3=23 34 23 23*10+4=234 45 2 234*10+3=2343 36 0 2343*10+2=23432 27 stop

    Aplicaia 3:La o staie meteorologic se nregistreaz zilnic temperaturi pn cnd se nregistreaz

    temperatura de zero grade. S se scrie programul care determin care a fost cea mai maretemperatur i numrul de temperaturi nregistrate.Specificarea problemei:

    Date de intrare: t - temperaturile citite;Date de ieire: cea mai mare temperatur i numrul de temperaturi nregistrate;

    Date de test: Dati prima temperatura: 5Dati o nou temperatura: 5.8Dati o nou temperatura: 6Dati o nou temperatura: 9.5Dati o nou temperatura: 0Cea mai mare temperatura este : 9.50Numarul de temperaturi inregistrate este: 4

    Algoritmul problemei:nceput algoritmscrie Dai prima temperatur tcitete t

    dac t=0 atunci scrie Nu s-a nregistrat nici o temperaturaltfel nr 0, max t

    repet scrie Dai o nou temperaturcitete tnr nr+1dac t>max atunci max tsfrit dac

    pn cnd t=0

    scrie cea mai mare temperaturscrie numrul de temperaturi

    63

  • 8/14/2019 programarea calculatoarelorCap 4

    17/25

    Instruciunile limbajului C.

    sfrit dacsfrit algoritm

    Programul corespunztor algoritmului este:#include#includevoid main(){

    double max,t;int nr;clrscr();printf("\nDati prima temperatura: ");scanf("%lf",&t);if(t==0)printf("\nNu s-a inregistrat nici o temperatura");else{nr=0;max=t;

    do{printf("\nDati o noua temperatura:");scanf("%lf",&t);nr++;if(t>max)max=t;

    }while(t!=0);printf("\nCea mai mare temperatura este:%1.2lf",max);printf("\nNumarul de temperaturi inregistrate este:%d",nr);}getch();

    }Analiza problemei:

    n corpul funciei principale se declar variabile cu urmtoarea semnificaie:nr reprezint variabila n care se contorizeaz numrul de valori nregistrate;max reprezint variabila n care vom pstra temperatura maxim;t - reprezint variabila n care se vor pstra temperaturile;Folosind funcia standard printf se va cere utilizatorului s introduc prima

    temperatur, iar apoi se citete aceast temperatur cu ajutorul funciei standard scanf. Cuajutorul instruciunii condiionale ifse va testa dac aceasta este sau nu zero. n cazul n careprima temperatur este zero se afieaz c nu s-a nregistrat nici o temperatur, iar n cazulcnd aceasta nu este zero, se iniializeaz variabila max cu prima temperatur citit i variabila

    nr cu zero, acesta fiind elementul neutru la adunare. Apoi cu ajutorul instruciunii do-while sevor citi urmtoarele temperaturi i se va determina valoarea maxim i numrul de temperaturicitite pn cnd temperatura este zero, respectiv ct timp t este diferit de zero. Cnd s-a citit otemperatur a crei valoare este zero se iese i se afieaz valorile calculate.

    Instruciunea switch

    64

  • 8/14/2019 programarea calculatoarelorCap 4

    18/25

    Instruciunile limbajului C.

    Atunci cnd este necesar alegerea dintre mai multe alternative se foloseteinstruciunea switch. Ea lucreaz astfel: o variabil este testat succesiv cu o list de ntregisau constante de tip char. Cnd apare egalitatea, sunt executate instruciunile asociate aceleivalori din list. Forma general a instruciunii switch este urmtoarea:

    switch (variabil){ case constant1: instruciuni

    break;case constant2: instruciuni

    break;.

    default: instruciuni}

    Dou constante case nu pot avea valori identice n acelai switch.Dac a fost parcurs toat lista i variabil nu a fost egal cu nici una dintre consant1,

    constant2.,atunci se execut instruciunea asociat cu default. Cazul default este opional.Dac variabil nu egaleaz nici un caz, iardefault este absent nu se va produce nici o aciune.Switch lucreaz numai cu tipul int i tipul char.

    Aplicaia 1:S se realizeze programul care cere utilizatorului s introduc un numr ntreg ntre unu

    i patru iar apoi, utiliznd instruciunea switch, s afieze numrul n cifre. n cazul n careutilizatorul a introdus alt cifr dect cea specificat, s se afieze mesajul "numrnecunoscut".Specificarea problemei:

    Date de intrare: numrul n cifre;Date de ieire: numrul n litere;

    Date de test: Introduceti un numar intreg intre 1 i 4: 1Unu

    Programul corespunztor este:#include #includevoid main (){int i;clrscr();printf ("Introduceti un numar intreg intre 1 si 4: ");

    scanf ("%d", &i);switch (i) {

    case 1:printf ("Unu");break;case 2:printf ("Doi");break;case 3:

    printf ("Trei");break;case 4:

    65

  • 8/14/2019 programarea calculatoarelorCap 4

    19/25

    Instruciunile limbajului C.

    printf ("Patru");break;default:printf ("Numar necunoscut");}

    getch();}

    Analiza problemei:n corpul funciei principale se declar variabile cu urmtoarea semnificaie:i reprezint numrul pe care l citim;Folosind funcia standard printfse va cere utilizatorului s introduc un numr ntreg

    ntre unu i patru. Se citete acest numr cu ajutorul funciei standard scanf, iar apoi folosindinstruciunea switch se compar numrul citit cu constantele case. Dac se gsete o egalitateatunci se execut instruciunea asociat iar dac nu se execut instruciunea de pe ramuradefault.

    Aplicaia 2:S se realizeze programul care determin dac o liter citit de la tastatur este consoan

    sau vocal. Se va utiliza instruciunea switch.Specificarea problemei:

    Date de intrare: ch - o liter citit;Date de ieire: este vocal sau consoan;

    Date de test: Introduceti o litera: aEste o vocala

    Programul corespunztor este:#include#includevoid main(){

    char ch;clrscr();printf("Introduceti o litera: ");scanf("%c",&ch);switch(ch){case 'a':case 'e':case 'i':case 'o':case 'u':

    printf("Este o vocala");break;default:printf("Este o consoana");}getch();}

    Analiza problemei:n corpul funciei principale se declar variabila cu urmtoarea semnificaie:ch reprezint codul ASCII al tastei apsate;

    66

  • 8/14/2019 programarea calculatoarelorCap 4

    20/25

    Instruciunile limbajului C.

    Folosind funcia standard printfse va cere utilizatorului s introduc o liter. Aceastliter se citete cu ajutorul funciei standard scanf, iar apoi folosind instruciunea switch secompar litera citit cu constantele case. Datorit faptului c instruciunile asociate unui casepot s lipseasc, toate cele 5 case vor executa aceeai instruciune fr a fi nevoie deduplicarea ei. Literele a, e, i, o, u sunt toate vocale iar la apsarea uneia dintre aceste taste seva afia mesajul Este o vocal. n cazul n care se apas alt tast se execut instruciunea depe ramura default scriind la consol mesajul Este o consoan

    Aplicaia 3:S se realizeze programul care afieaz meniul urmtor:

    1.Yarzi in metri2.Metri in yarzi3.Pounds in kilograme4.Kilograme in pounds5.Quit.i n funcie de alegerea utilizatorului s se efectueze transformarea respectiv pentru unnumr citit.Se specific urmtoarele: 1yard=0,9144m, 1 pound=0,453 KgSpecificarea problemei:

    Date de intrare: meniu;i - numrul ce trebuie transformat;

    Date de ieire: rezultatul transformrii;Date de test: Yarzi in metri

    Metri in yarziPounds in kilogrameKilograme in poundsQuit2Introduceti valoarea in metrii: 3.5

    Valoarea in yarzi este: 3.828 Programul corespunztor este:

    #include#includevoid main(){int i;float y,m,k,p;clrscr();printf("1.Yarzi in metri\n2.Metri in yarzi\n3.Pounds in kilograme\n");printf("4.Kilograme in pounds\n5.Quit\n");

    scanf("%d",&i);switch(i){case 1:printf("Introduceti valoarea in yarzi: ");scanf("%f",&y);printf("Valoarea in metri este: %1.2f",y*0.9144);

    break;case 2:printf("Introduceti valoarea in metri: ");

    67

  • 8/14/2019 programarea calculatoarelorCap 4

    21/25

    Instruciunile limbajului C.

    scanf("%f",&m);printf("Valoarea in yarzi este: %1.3f",m/0.9144);break;case 3:printf("Introduceti valoarea in pounds: ");scanf("%f",p);printf("Valoarea in pounds este: %1.3f",p*0.453);

    break;case 4:printf("Introduceti valoareain kilograme: ");scanf("%f",&k);printf("Valoarea in pounds este: %1.3f",k/0.453);case 5:goto end;}end:getch();}

    Analiza problemei:n corpul funciei principale se declar variabilele cu urmtoarea semnificaie:

    y reprezint variabila n care citim valoarea n yarzi;m - reprezint variabil n care citim valoarea n metri;k - reprezint variabila n care citim valoarea n kilograme;p - reprezint variabila n care citim valoarea n pounds;i - reprezint variabila n care citim indicele corespunztor meniului;

    Folosind funcia standard printfse va afia meniul. Indicele corespunztor meniuluise citete cu ajutorul funciei standard scanf, iar apoi folosind instruciunea switch se comparacesta cu constantele case. n cazul n care s-a apsat tasta 1 se va realiza o transformare dinyarzi n metrii i se citete valoarea n yarzi, iar apoi se afieaz valoarea n metrii. n cazul ncare s-a apsat tasta 2 se va realiza o transformare din metrii n yarzi i se citete valoarea nmetrii, iar apoi se afieaz valoarea n yarzi. n cazul n care se-a apsat tasta 3 se va realiza o

    transformare din pounds n kilograme i se citete valoarea n pounds, iar apoi se afieazvaloarea n kilograme. La apsarea tastei 3 se face o transformare din pounds n kilogramecitindu-se valoarea n pounds i afind valoarea n kilograme. Tasta de ieire este tasta 5,cnd cu ajutorul instruciunii goto se face un salt la sfritul programului.

    Instruciunile goto i break

    Limbajul C conine o instruciune de salt necondiionat numita goto. Limbajul C a fostun nlocuitor al limbajului de asamblare, deci includerea instruciunii goto a fost necesardeoarece ea poate fi folosit pentru a crea rutine foarte rapide. Aceast instruciuneefectueaz un salt n interiorul unei funcii. Ea nu poate face saltul dincolo de funcie. Esteconsiderat opus programrii structurate, sfatul general valabil este evitarea folosirii acesteiinstruciuni.

    Forma general a instruciunii goto este urmtoarea:goto eticheta;

    ..etichet:

    Instruciunea breakpermite ieirea dintr-un ciclu, din oricare punct din interiorul su.Cnd instruciunea breakeste ntlnit n interiorul unui ciclu, aceasta se termin imediat, iarcontrolul va trece la instruciunea ce urmeaz dup ciclu. Instruciunea breakpoate fi folosit

    68

  • 8/14/2019 programarea calculatoarelorCap 4

    22/25

    Instruciunile limbajului C.

    cu oricare din cele trei cicluri ale limbajului, aceast instruciune producnd ieirea din ciclulcel mai interior. n general se recomand ca instruciunea breaks fie utilizat pentru scopurispeciale i nu ca ieire normal din ciclu.

    Forma general a instruciunii breakeste urmtoarea:break;

    Aceast instruciune are cea mai comun utilizare n cadrul instruciunii switch.

    Aplicaie:S se realizeze programul care afieaz urmtorul meniu:

    1....FOR2.....WHILE3.....DO-WHILEiar n funcie de tasta apsat de utilizator va realiza urmtoarele operaii:-n cazul n care este apsat tasta 1 cu ajutorul instruciunii for se va realiza citirea unuinumr i afiarea descresctoare pn la zero.-n cazul n care este apsat tasta doi, cu ajutorul instruciunii while se va realiza citirea unuinumr i realizarea sumei nS *...*3*2*1...3*2*12*11 +-n cazul n care este apsat tasta trei, cu ajutorul instruciunii do-while se va realiza citirea

    unui numr i realizarea sumein

    H1

    ..3

    1

    2

    11 +

    La sfritul fiecrei opiuni utilizatorul va fi ntrebat dac dorete s continue, iar ncazul unui rspuns afirmativ, cu ajutorul instruciunii goto se va face saltul la nceputulopiunii.Specificarea problemei:

    Date de intrare: meniu;n - numrul pn la care calculm cele dou sume i pn la

    care afim n ordine descresctoare numerele;Date de ieire: S, H i numerele afiate n ordine descresctoare;

    Date de test: 1FOR

    2.WHILE3..DO-WHILE1Introduceti pe n: 77 6 5 4 3 2 1 0Doriti sa continuati?y/ny1FOR2.WHILE3..DO-WHILE2

    Introduceti pe n: 3S=9Doriti sa continuati?y/ny1FOR2.WHILE

    3..DO-WHILE3Introduceti pe n: 4H=2.083333

    69

  • 8/14/2019 programarea calculatoarelorCap 4

    23/25

    Instruciunile limbajului C.

    Doriti sa continuati?y/n nProgramul corespunztor este urmtorul:

    #include#includevoid main(){int i,n,S,P;

    float H;char ch;clrscr();unu: printf("\n1.....FOR");printf("\n2.....WHILE");printf("\n3.....DO-WHILE\n");scanf("%d",&i);switch(i){case 1:printf("\nIntroduceti pe n: ");

    scanf("%d",&n);for(i=n;i>=0;i--)printf("%d ",i);printf("\nDoriti sa continuati? y/n\n");ch=getche();if (ch=='n') break;else goto unu;break;case 2:printf("Introduceti pe n: ");scanf("%d",&n);

    i=1;S=0;P=1;while(i

  • 8/14/2019 programarea calculatoarelorCap 4

    24/25

    Instruciunile limbajului C.

    H+=1/i;i++;}while(i

  • 8/14/2019 programarea calculatoarelorCap 4

    25/25

    Instruciunile limbajului C.

    Nota - valoarea efectiv a notelor;Date de ieire: nr - numrul notelor peste 8;

    Date de test: Introduceti numarul de note: 4Introduceti nota 1: 7Introduceti nota 2: 8.5Introduceti nota 3: 9Introduceti nota 4: 10

    Numarul de note peste 8 sunt: 3

    Programul corespunztor este urmtorul:#include#includevoid main(){int n,i,nr=0;float nota;clrscr();printf("Introduceti numarul de note: ");

    scanf("%d",&n);for(i=1;i