Programarea Calculatoarelor M5

  • View
    232

  • Download
    0

Embed Size (px)

Text of Programarea Calculatoarelor M5

  • 8/8/2019 Programarea Calculatoarelor M5

    1/10

    Programarea Calculatoarelor(limbajul C)

    Curs 5 Instruciunile Condiionale iStructurile Repetitive

    Universitatea Politehnica din BucuretiFacultatea de Electronic, Telecomunicaii i

    Tehnologia Informaiei

    .l. Bogdan IONESCUProf. Drago BURILEANUProf. Claudius DAN

    2010-20112

    Cuprins

    5.1. Instruciunile condiionale

    5.2. Structurile repetitive

    5.3. Instruciunile break, continue i exit

    5.4. Probleme recapitulative

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 1/59

    3Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 2/59

    5.1. Instruciunile condiionale

    4Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 3/59

    > Limbajul de programare C propune urmtoarele instruciunii operatori condiionali:

    - structura if else (dac ... atunci ...),

    - operatorul condiional ?: (echivalent if else),

    - structura de selecie switch case (if generalizat)

    Instruciunile condiionale

    5Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 4/59

    Instruciunile condiionale (continuare)

    Structura if else

    ifififif(((())))

    {{{{

    ;}}}}

    Sintax:

    ifififif(((())))

    {{{{;

    }}}}

    elseelseelseelse{{{{

    ;}}}}

    sau:

    > Permite executarea unorinstruciuni n funcie de valoareade adevr a unei expresii.

    6Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 5/59

    Instruciunile condiionale

    (continuare)

    Structura if else (continuare)

    Mod de execuie:

    ifififif(((())))

    {{{{;

    }}}}

    elseelseelseelse

    {{{{

    ;

    }}}}

    {}

    execut

    {}

    execut

    evaluarecondiie if

    ()

    adevrat (if)

    fals (else)

  • 8/8/2019 Programarea Calculatoarelor M5

    2/10

    7Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 6/59

    Instruciunile condiionale (continuare)

    Structura if else (continuare)

    Exemplu simplu:

    ifififif((((x==100x==100x==100x==100))))

    {{{{

    printf(x are valoarea 100);}}}}

    elseelseelseelse

    {{{{

    printf(x este diferit de 100);

    }}}}

    dac x are valoarea 100atunci se afieazprimul text.

    n caz contrar, seafieaz al doilea text.

    8Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 7/59

    Instruciunile condiionale (continuare)

    Structura if else (continuare)

    Exemplul 2:

    ifififif((((x>0x>0x>0x>0))))

    {{{{ printf(x este pozitiv);}}}}

    else if (else if (else if (else if (x0x>0x>0))))

    if (if (if (if (y==5y==5y==5y==5))))

    if (if (if (if (z!=14z!=14z!=14z!=14))))

    printf(3 conditii adevarate);elseelseelseelse

    printf(2 conditii adevarate);

    elseelseelseelseprintf(1 conditie adevarata);

    elseelseelseelse

    printf(nici o conditie adevarata);

    if (x>0) areca secven de

    instruciuni if-ul 21

    2

    3

    if (y==5) areca secven de

    instruciuni if-ul 3

    10Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 9/59

    Instruciunile condiionale (continuare)

    Structura if else (continuare)

    Exemplul 4:

    ifififif((((x>0x>0x>0x>0)))){{{{

    if (if (if (if (y==5y==5y==5y==5))))

    if (if (if (if (z!=14z!=14z!=14z!=14))))

    printf(3 conditii adevarate);

    elseelseelseelse

    printf(2 conditii adevarate);

    }}}}elseelseelseelse

    printf(din ce if face parte?);

    aceste instruciunifac parte din if (x>0)

    acest else este

    al primului if.

    if (y==5) nuare else.

    ???

    11Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 10/59

    Structura if else (continuare)

    Instruciunile condiionale (continuare)

    Observaii:

    > n cazul n care dup if sau else este executat o singurinstruciune, nu este obligatorie folosirea acoladelor { }.

    ifififif((((a

  • 8/8/2019 Programarea Calculatoarelor M5

    3/10

    13Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 12/59

    Instruciunile condiionale (continuare)

    Operatorul condiional ?: (continuare)

    PEnun: s se calculeze maximul a dou numerentregi x i y cu ajutorul operatorului condiional.

    int main(){

    int max, x, y;max=(x>=y) ? x : y;

    }

    int main(){

    int max, x, y;if(x>=y)max=x;

    elsemax=y;

    }

    cu if...

    14Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 13/59

    Instruciunile condiionale (continuare)

    Operatorul condiional ?: (continuare)

    PEnun: s se calculeze minimul a trei numere ntregix, y i z cu ajutorul operatorului condiional (1 linie).

    int main(){int min,x,y,z;min=((x Limitare: valoarea expresiei trebuie s fie neaprat ntreag,

    sau s poat fi convertit la o valoare ntreag,

    Instruciunile condiionale (continuare)

    Structura switch (continuare)

    > Limitare: constantele (const1, ..., constN) nu pot s coninexpresii sau variabile din program,

    18Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 17/59

    Instruciunile condiionale (continuare)

    Structura switch (continuare)

    Exemplu simplu:

    scanf(%d,&x);switch (xxxx){

    case 1:printf(x are valoarea 1);break;

    case 2:printf(x are valoarea 2);break;

    default:printf(nu stiu valoare x);

    }

    dac x are valoarea 1se afieaz ???

    dac x are valoarea 2se afieaz ???

    dac x are valoarea -3se afieaz ???

  • 8/8/2019 Programarea Calculatoarelor M5

    4/10

    19Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 18/59

    Instruciunile condiionale (continuare)

    Structura switch (continuare)

    Exemplu:

    scanf(%c,&litera);

    switch (literaliteraliteralitera){

    case a:case A:printf(s-a introdus litera a);break;

    case :nr_spatii++;break;

    }

    ce se ntmpl dac

    omitem corpul unui case ?se execut pn la primainstruciune break.

    Observaii:- break este opional, poateconstitui un avantaj,- default este opional, darrecomandat.

    exit

    20Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 19/59

    Instruciunile condiionale (continuare)

    Structura switch (continuare)

    PEnun: se citete de la tastatur o valoare ntreag,folosind structura switch s se realizeze un program care

    spune dac numrul este divizibil cu 3 sau nu.scanf(%d, &a);switch (a%3==0){

    case 1:printf(este divizibil cu 3);break;

    case 0:printf(nu este divizibil cu 3);break;

    }

    a%3==0 valoare 1 (adevrat)dac se mparte exact,valoare 0 (fals)dac nu se mparte exact

    21Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 20/59

    5.2. Structurile repetitive

    22Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 21/59

    > Limbajul de programare C propune urmtoarele structurirepetitive (cicluri):

    - ciclul cu test iniial while,

    - ciclul cu test final do while,

    Structurile repetitive

    > Sunt motivate de necesitatea de execuie repetitiv (n bucl)a anumitor instruciuni sau pri din program. Aceast execuie

    este reglementat de utilizator.

    > Constituie baza unui limbaj de programare. Aproape toateproblemele de calcul sunt rezolvate folosind astfel de structuri.

    - ciclul cu contorfor.

    23Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 22/59

    Structurile repetitive (continuare)

    Structura do while

    > execut ct timp:

    do{{{{

    ;}}}} while ();

    Sintax:

    > Permite executarea repetitiv a mai multor instruciuni cttimp o anumit condiie este ndeplinit (adevrat).

    corpul structurii estespecificat ntre { i }

    condiia de execuie estespecificat ntre ( i ),i se ncheie cu ;

    24Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 23/59

    Structurile repetitive (continuare)

    Structura do while (continuare)

    do

    {{{{;

    }}}} while ();Mod de execuie:

    secveninstruciuni

    fals

    adevrat

    evaluarecondiie ()

    do

    while

    Exemplu:

    do{

    scanf(%d,&numar);} while (numar

  • 8/8/2019 Programarea Calculatoarelor M5

    5/10

    25Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 24/59

    Structurile repetitive (continuare)

    Structura do while (continuare)

    int i=0;do

    {{{{i++;

    }}}} while (ia).

    Variabile de intrare:

    unsigned int a,b;

    Variabile de ieire:

    int i;

    Structur program:

    - citire a i b,

    - definire contor i,

    - afiare repetitiv acontorului pentru valori ntreb i a,

    29Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 28/59

    Structura do while (continuare)

    int a, b, i;printf(a=); scanf(%d,&a);printf(b=); scanf(%d,&b);i=b;do{printf(%d ,i--);} while (i>=a);

    PEnun: folosind structura do while s se afieze peecran toate numerele ntregi cuprinse ntre dounumere ntregi pozitive b i a introduse de la tastatur(b>a).

    30Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 29/59

    Structurile repetitive (continuare)

    Structura while

    > ct timp:

    > Ct timp o anumit condiie este ndeplinit (adevrat) seexecut o serie de instruciuni.

    while (){{{{

    ;

    }}}}

    Sintax: condiia de execuie estespecificat ntre ( i ),

    corpul structurii estespecificat ntre { i }

  • 8/8/2019 Programarea Calculatoarelor M5

    6/10

    31Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 30/59

    Structurile repetitive (continuare)

    Structura while (continuare)

    Mod de execuie:

    while (){{{{

    ;

    }}}}

    adevrat

    falssecven

    instruciuni

    evaluarecondiie ()

    while

    Exemplu:

    charc= ;while (c!=x){

    scanf(%c,&c);}

    Execuie:

    a (enter) (a!=x da)

    y (enter) (y!=x da)

    x (enter) (x!=x nu) stop

    32Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 31/59

    Structurile repetitive (continuare)

    Structura while (continuare)

    int x=9;

    while (x--){{{{printf(Un mesaj insistent);

    }}}}

    Exemplu: - se evalueaz condiiewhile (x),

    - se decrementeazvaloare x

    int x=9;while (--x){{{{

    printf(Un mesaj mai puin insistent ?);}}}}

    Exemplu:

    de cte ori se afieazacest mesaj ???

    dar acesta ???

    9 ori

    8 ori

    33Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 32/59

    Structurile repetitive (continuare)

    Structura while (continuare)

    charch;int s=0;while ((ch=getche())!=x){{{{

    s=s+ch;}}}}

    Exemplu: funcia getche() citete uncaracter de la tastatur(e echo, afiare caracterpe ecran)

    -mai nti ch=getche(),-se evalueaz ch!=x,-dac da, se executinstruciuni.

    Ce face funcia getche ?

    Cum se execut ?

    34Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 33/59

    Structurile repetitive (continuare)

    Structura while (continuare)

    int x=30;while (x-=5);printf(%d,x);

    Exemplu:Ce valori sunt afiate pe ecran? 0

    Greeal frecvent: ; ca la do while,rezultat: bucla se termin la ;

    Observaie: { i } nu sunt obligatoriipentru o singur instruciune.

    int x=30;while (x-=5)printf(%d,x);

    Exemplu corect:

    Ce valori sunt afiate pe ecran?

    25 20 15 10 5

    35Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 34/59

    Structurile repetitive (continuare)

    Structura while (continuare)

    PEnun: s se realizeze un program care permitecitirea a dou numere ntregi a i b. Folosind structurawhile, calculai media aritmetic a tuturor numerelorntregi dintre a i 0 ce sunt divizibile cu b(verificai c a>10).

    Variabile de intrare/lucru:

    int a,b;

    Variabile de ieire:

    float medie_aritmetica;

    Structur program:

    - citesc repetitiv pe a pncnd a>10,- parcurg numerele de la a la0 i le nsumez pe cele modulo b- numr cte sunt i la sfritcalculez media.

    int numar_valori;int contor;

    36Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 35/59

    Structura while (continuare)

    int a=0, b, contor, numar_valori=0;float medie_aritmetica=0.0;printf(b=); scanf(%d, &b);while (a0){

    if((contor%b)==0){

    medie_aritmetica+=contor; // adaug la media aritmetic valorilenumar_valori++; // numr cte valori am adugat

    }contor--; // m ndrept spre 0 cu pas 1

    }printf(Media este:%f, (float)medie_aritmetica/numar_valori);

  • 8/8/2019 Programarea Calculatoarelor M5

    7/10

    37Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 36/59

    Structurile repetitive (continuare)

    Structura for

    > pentru:

    for ( ; ; ){{{{

    ;

    }}}}

    Sintax:

    > Permite executarea iterativ a unei secvene de instruciuni.Numrul de execuii este contabilizat de un contor. Acestapoate fi folosit n calcule pentru a identifica iteraia curent.

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 37/59

    Structurile repetitive (continuare)

    Structura for (continuare)

    for ( ; ; ){{{{

    ;

    }}}}

    Semnificaie parametri:

    : conine o expresie n care se iniializeazcontorul ce va monitoriza numrul de execuii al buclei for.

    : conine o condiie prin care se specificindirect de cte ori se va executa corpul instruciunii for ianume: ct timp este adevrat.

    : specific modul n care va fi schimbatvaloarea contorului la fiecare iteraie.

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 38/59

    Structurile repetitive (continuare)

    Structura for (continuare)

    > mod de execuie:

    adevrat

    fals secveninstruciuni

    iniializarecontor

    modificarecontor

    evaluarecondiieexec.

    for ( ; ;)

    {{{{

    ;

    }}}}

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 39/59

    Structurile repetitive (continuare)

    Structura for (continuare)

    > Dup modul de execuie, structura foreste similar uneistructuri while (ct timp execut) deoarece condiia de oprireeste verificat nainte de executie.

    int x;for (x=2 ; x>0 ; x--){{{{

    printf(x are valoarea:%d\n,x);}}}}

    Exemplu simplu: Execuie:

    x=2

    2>0 (da)>x are valoarea 2

    x=2-12-1>0 (da)

    >x are valoarea 1

    x=2-1-1

    2-1-1>0 (nu) stop

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 40/59

    Structurile repetitive (continuare)

    Structura for (continuare)> Specificarea expresiilor care definesc bucla foreste foarteflexibil dup cum se poate vedea din exemplele urmtoare:

    for (x=0 ; ((x>3)&&(x=0)&&(xx=0, y=4>x=1, y=6

    >x=2, y=8stop

    doar x=0

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 41/59

    Structurile repetitive (continuare)

    Structura for (continuare)

    for (x=0,y=4,z=4000 ; z ; z/=10)printf(%d,%d,%d\n,x, y, z);

    Exemplu: care este efectul acestuifor ?

    Execuie:

    >x=0, y=4, z=4000

    >x=0, y=4, z=400

    >x=0, y=4, z=40

    stop

    >x=0, y=4, z=4

    for (x=0 ; xa a a a>a a a a

  • 8/8/2019 Programarea Calculatoarelor M5

    8/10

    43Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 42/59

    Structurile repetitive (continuare)

    Structura for (continuare)

    > Cteva observaii:

    structura foreste folosit de regul cnd se poate estimanumrul de iteraii,

    de asemenea, structura forse folosete de regul atuncicnd n calcul este necesar cunoaterea interaiei curente(valoarea contorului),

    > Cazuri particulare:

    for ( ; ia). S se realizeze un program care

    calculeaz produsul numerelor ntregi divizibile cu mdin intervalul [a;b] folosind structura for.

    Variabile de intrare/lucru:

    int a,b,m;

    Variabile de ieire:

    int produs;

    int i;

    Structur program:

    - citesc a, b i m,

    - parcurg numerele de la a la

    b i le nmulesc pe celemodulo m,

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 44/59

    int a=1, b=0, m, i;int produs=1;while (a>b){printf(Introduceti a si b: );scanf(%d %d, &a, &b);

    }

    printf(Introduceti divizorul: );

    scanf(%d, &m);for(i=a; ia).

    =

    +

    =b

    ai

    ii

    ab

    22)(

    1

    1

    medie valori i

    Variabile de intrare/lucru:

    int a,b;

    Variabile de ieire:

    float varianta;

    int i;float medie;

    Structur program:

    - citesc a i b,

    - parcurg numerele de la a lab i calculez media,

    - parcurg numerele de la a lab i calculez varianta,

    47Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 46/59

    int a, b, i, dim;float medie=0.0, varianta=0.0;// citire dateprintf(Introduceti a si b: ); scanf(%d %d, &a, &b);dim=b-a+1;

    // calcul mediefor(i=a; i

  • 8/8/2019 Programarea Calculatoarelor M5

    9/10

    49Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 48/59

    > Introducerea structurilor repetitive, datorit executieiautomate n bucl, a instruciunilor, a ridicat problemacontrolrii n totalitate de ctre programator a execuieiacestora.

    Instruciunile break, continue i exit

    o condiie de oprire scris eronat conduce larepetarea infinit a instruciunilor din bucl.

    > Pentru a controla execuia, limbajul C pune la dispoziiaprogramatorului trei comenzi speciale, i anume:

    instruciunea break

    instruciunea continue

    funcia exit

    50Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 49/59

    Instruciunea break

    break: nseamn ntrerupere, determin ntreruperea unuiciclu (do while, while, for) sau a seleciei (switch), chiar daccondiia de terminare nu este ndeplinit.

    break;

    Sintax:- se apeleaz ca o procedur,nu are parametri.

    for ( ; ; ){scanf(%d,&x);if(x>10) break;

    }

    Exemplu: acest for se execut la infinit.

    ciclul se va ncheia atunci cndvaloarea introdus este >10datorit lui break.

    for (i=0; ii=3

    stop while

    > continue (3 4 este divizibil cu 2

    > (4 continue (5 i=6

    54Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 53/59

    Instruciunea exit

    exit: este o funcie din biblioteca stdlib.h ce determinncheierea execuiei programului curent (funcie, procedur)i returnarea unui cod de eroare.

    void exit(int codEroare);

    Prototipul funciei:

    int main(){int i;while (1){ printf(Introduceti o valoare care sa-mi placa); scanf(%d,&i);

    if(i==13)exit(1); } // raspuns gresit

    }

    Exemplu: programul citete de la tastaturvalori pn la introducerea valorii13, cnd execuia se ncheie cucodul 1

  • 8/8/2019 Programarea Calculatoarelor M5

    10/10

    55Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 54/59

    5.4. Probleme recapitulative

    56Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 55/59

    Problema 1

    PEnun: scriei un program care citete un numrnatural n i care afieaz valoarea expresiei:

    indicaie: se folosete structura for.

    !...!...!2!1!0 nis ++++++=

    Variabile de intrare/lucru:

    int n;

    Variabile de ieire:

    int s;

    int i, j;

    Structur program:

    - citesc n i verific c n>0

    - parcurg numerele de la 0 la n,

    - calculez factorialul i adaugvaloarea la suma s,

    int tmp;

    57Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 56/59

    Problema 1 - rezolvare

    int i, j, n; double tmp, s=1;// citire datedo{printf(Introduceti n: ); scanf(%d, &n);

    } while (n