Cursul nr. 5 -...

21
Cursul nr. 5 INSTRUCŢIUNI Algoritmi Generalităţi Reprezentarea algoritmilor Instrucţiunea expresie Instrucţiunea compusă (blocul de instrucţiuni) Instrucţiuni de selecţie (decizie) if, if-else Instrucţiunea de selecţie multiplă switch Instrucţiuni de ciclare (repetitive) Instrucţiunea de ciclare cu test iniţial (while) Instrucţiunea de ciclare cu test final (do-while) Instrucţiunea de ciclare cu contor (for) Instrucţiuni de salt Instrucţiunea break Instrucţiunea continue Instrucţiunea return Funcţia exit() Instrucţiunea de salt necondiţionat goto

Transcript of Cursul nr. 5 -...

Page 1: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Cursul nr. 5

INSTRUCŢIUNI

Algoritmi

• Generalităţi

• Reprezentarea algoritmilor

Instrucţiunea expresie

Instrucţiunea compusă (blocul de instrucţiuni)

Instrucţiuni de selecţie (decizie) if, if-else

Instrucţiunea de selecţie multiplă switch

Instrucţiuni de ciclare (repetitive)

• Instrucţiunea de ciclare cu test iniţial (while)

• Instrucţiunea de ciclare cu test final (do-while)

• Instrucţiunea de ciclare cu contor (for)

Instrucţiuni de salt

• Instrucţiunea break

• Instrucţiunea continue

• Instrucţiunea return

• Funcţia exit()

• Instrucţiunea de salt necondiţionat goto

Page 2: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Calculatorul prelucrează datele de intrare printr-o succesiune

de acţiuni pentru a obţine datele de ieşire.

Succesiunea de prelucrări este descrisă prin program.

Fiecare prelucrare este rezultatul uneia sau mai multor

instrucţiuni.

Ordinea de efectuare a prelucrărilor este importantă, ea

respectând un anumit algoritm.

Înainte să înveţi orice limbaj de programare, trebuie să înveţi

să gândeşti algoritmic !

Page 3: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Algoritmul este o metodă generală de rezolvare a unei

probleme, metodă care se poate implementa în programe prin

intermediul unui limbaj de programare.

Algoritmul poate fi gândit ca o succesiune de acţiuni ce se

pot aplica pentru obţinerea unui rezultat.

Algoritmii se caracterizează prin:

generalitate

finitudine

unicitate

realizabilitate

eficienţa

Page 4: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Etapele urmate de la enunţul problemei de rezolvat până la

obţinerea produsului software final (programul):

stabilirea caietului de sarcini (enunţul problemei)

elaborarea algoritmilor – se face pe baza analizei

problemei

exprimarea algoritmilor – se face prin intermediul unui

limbaj de programare

validarea algoritmilor – confirmarea corectitudinii

algoritmului

analiza algoritmilor

testarea programului – depanarea şi trasarea

(determinarea memoriei necesare şi a timpului de calcul

Page 5: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Reprezentarea algoritmilor

reprezentarea în limbaj natural – acest mod de

reprezentare nu presupune o pregătire specială, dar

pentru probleme complexe poate introduce neclarităţi;

reprezentarea prin scheme logice – este o reprezentare

grafică în care fiecare etapă este reprezentată printr-un

bloc, blocurile fiind înlănţuite prin segmente orientate,

ordinea lor respectând logica problemei;

reprezentarea în limbaj pseudocod – limbajul pseudocod

este apropiat de codificarea din Pascal sau C, permite o

reprezentare clară şi concisă;

reprezentarea prin tabele de decizie – metoda e specifică

problemelor cu număr mare de alternative, ele apelând la

logica booleană inventariază toate acţiunile posibile prin

combinarea condiţiilor precizate.

Page 6: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Limbaj pseudocod

Un limbaj pseudocod se reprezintă sub forma de text si se

bazează pe nişte aşa-numite cuvinte cheie. Fiecare cuvânt

cheie identifica in mod unic un anumit tip de acţiune.

Acţiunile algoritmului se reprezintă in pseudocod prin

instrucţiuni.

Ansamblul cuvintelor cheie împreună cu regulile care

trebuie respectate in folosirea lor, alcătuieşte ceea ce

numim sintaxa limbajului-pseudocod

Există o mare diversitate de limbaje-pseudocod. Practic,

fiecare programator îşi poate proiecta propriul pseudocod,

definind cuvintele cheie ale acestuia şi impunând nişte

aşa-numite reguli de sintaxa.

Page 7: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Exemplu de folosire a limbajului pseudocod

ALGORITMUL ECGRDOI ESTE: { Algoritmul : Rezolvarea }

{ ecuaţiei de gradul doi }

CITEŞTE a,b,c; { a,b,c = Coeficienţii ecuaţiei }

FIE delta:=b*b-4*a*c;

DACĂ delta<0 ATUNCI ind:=0; { rădăcini complexe }

r:=radical din (-delta);

x1:=-b/(a+a);

x2:=r/(a+a);

ALTFEL ind:=1; { rădăcini reale }

r:=radical din delta;

x1:=(-b-r)/(a+a);

x2:=(-b+r)/(a+a);

SFDACĂ

TIPĂREŞTE ind, x1,x2;

SFALGORITM

Page 8: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Scheme logice

Un limbaj pseudocod se reprezintă sub forma de text si se

bazează pe nişte aşa-numite cuvinte cheie. Fiecare cuvânt

cheie identifica in mod unic un anumit tip de acţiune.

Acţiunile algoritmului se reprezintă in pseudocod prin

instrucţiuni.

Ansamblul cuvintelor cheie împreună cu regulile care

trebuie respectate in folosirea lor, alcătuieşte ceea ce

numim sintaxa limbajului-pseudocod

Există o mare diversitate de limbaje-pseudocod. Practic,

fiecare programator îşi poate proiecta propriul pseudocod,

definind cuvintele cheie ale acestuia şi impunând nişte

aşa-numite reguli de sintaxa.

Page 9: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Scheme logice

Blocuri de control – delimitează începutul şi sfârşitul schemei logice.

pentru scheme program

pentru scheme de detaliere

pentru scheme de subprogram:

(Prin nume se precizează numele

rutinei, iar parametrii formali

precizează datele care vor fi

prelucrate de aceasta.)

Blocuri de intrare/ieşire – precizează datele de intrare, respectiv cele

de ieşire ale algoritmului.

bloc comun celor două tipuri de

operaţii

blocuri distincte pentru

operaţiile de intrare/ieşire.

Page 10: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Blocuri de atribuire – precizează

expresia de evaluat şi variabila căreia i

se atribuie rezultatul.

Blocuri de decizie – marchează punctele

de ramificare a programului şi expresia

condiţională care determină evoluţia

algoritmului în continuare.

Blocuri de blocuri – inserează în

algoritm un subprogram predefinit,

precizând numele acestuia.

Blocuri de apel rutine – apelul unei

rutine pentru care se precizează numele

acesteia şi valorile transmise pentru

parametri.

Blocuri de conectare – se folosesc pentru algoritmi complecşi, pentru sporirea

lizibilităţii algoritmului.

Conectare în pagină – pentru evitarea

intersectărilor arcelor ce unesc blocurile.

Conectare între pagini – se folosesc

atunci când algoritmul nu se poate

încadra pe o singură pagină.

Page 11: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Pentru realizarea schemelor logice, în anii ’70, s-au impus

principiile programării structurate. Acestea au dus la o

puternică dezvoltare a limbajelor de programare.

Prin aplicarea principiilor programării structurate, se obţine:

claritate în citirea programelor;

depanarea uşoară a programelor;

generalitatea programelor şi uşurinţă în refolosirea

codului scris.

Structurile de control care stau la baza programării

structurate sunt:

structura secvenţială;

structura alternativă;

structura repetitivă.

Page 12: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Structura secvenţială

Structură pseudo-alternativă Structură alternativă simplă

Structură alternativă multiplă

Page 13: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Algoritmi

Structură repetitivă cu test

iniţial

Structură repetitivă cu test

final

Structură repetitivă cu contor

Page 14: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiunea expresie - se încheie cu punct şi virgulă (;)

Sintaxa instrucţiunii: < expresie > ;

int i, j;

float r;

//…

i = 10;

j = i * 5;

r = (float) i / j + 1.5 ;

Instrucţiunea compusă (blocul de instrucţiuni)

Sintaxa instrucţiunii: {

lista_declaratii;

lista_instructiuni;

}

{

int i, j;

float r;

//…

i = 10;

j = i * 5;

r = (float) i / j + 1.5 ;

}

Page 15: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiuni de selecţie (decizie) if, if-else

if (condiţie) (1)

instrucţiune_1;

sau

if (condiţie) (2)

instrucţiune_1;

else

instrucţiune_2;

int a, b, max;

//...

if (a<0)

a = -a;

//...

if (a > b)

max = a;

else

max = b;

Page 16: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiuni de selecţie multiplă - switch

switch (expresie)

{

case const1: lista_instructiuni;

<break;>

case const2: lista_instructiuni;

<break;>

…..

<default> lista_instructiuni;

}

#include <stdio.h>

void main()

{ int a, b; // variabile folosite pentru citirea celor doi întregi char op;

char op; // variabila op este folosită pentru citirea ca şi caracter a tipului de operaţie dorit

printf("Introdu doua valori intregi:");

printf("\na="); scanf("%d", &a);

printf("\nb="); scanf("%d", &b);

printf("Introdu operator aritmetic, simplu, binar (+, -,*, /, %):");

fflush(stdin);

scanf("%c", &op); // citirea se face în format caracter

switch (op)

{

case '+': printf("\n Operatia de adunare - rezultat: %d", a+b);

break;

case '-': printf("\n Operatia de scadere - rezultat: %d", a-b);

break;

case '*': printf("\n Operatia de inmultire - rezultat: %d", a*b);

break;

case '/': printf("\n Operatia de impartire - rezultat: %d", a/b);

break;

case '%': printf("\n Operatia de impartire intreaga - rest: %d", a%b);

break;

default: printf("\nOperatie ilegala!");

}

}

Page 17: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiuni repetitive

Instrucţiunea de ciclare cu test

iniţial (while)

Instrucţiunea de ciclare cu test

final (do-while)

Instrucţiunea de ciclare cu contor

(for)

Sintaxa instrucţiunii:

while (expresie)

instrucţiune;

do

instructiune;

while (expresie);

for( expr1; expr2; expr3)

instrucţiune;

int i;

i = 5;

while (i)

{

printf(”\ni=%d”, i );

i--;

}

int i;

i = 5;

do

{

printf(”\ni=%d”, i );

i--;

}

while (i);

int i;

for( i = 5 ; i >=0 ; i- -)

printf(”\ni=%d”, i );

Page 18: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiunea de salt break

Sintaxa sa este:

break;

Instrucţiunea break se foloseşte: în interiorul instrucţiunii switch pentru a întrerupe execuţia acesteia

în instrucţiunile de ciclare (while, do-while, for) pentru a determina ieşirea forţată din acestea.

#define N 100

int i;

for( i=1 ; i<=N ; i++)

{

if (!(i%7))

{ printf("\ni = %d - divizibil cu 7", i);

getch();

break; // datorita folosirii instrucţiunii break, ciclul for se

// va întrerupe când i devine divizibil cu 7 şi nu când i

// ajunge la valoarea 100; ca urmare, o sa se afişeze

// doar primele 7 valori şi se iese din for;

}

printf("\ni=%d", i); // la ieşirea din ciclul for, I va avea valoarea 7

}

Page 19: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiunea de salt continue

Sintaxa sa este:

continue;

Instrucţiunea break se foloseşte: în interiorul instrucţiunii switch pentru a întrerupe execuţia acesteia

în instrucţiunile de ciclare (while, do-while, for) pentru a determina ieşirea forţată din acestea.

int i;

for( i=1; i <= 100 ; i++)

{

if (!(i%7))

{ printf("\ni = %d - divizibil cu 7", i);

getch();

continue; // datorita lui continue, se va ignora linia următoare si se trece

// la următoarea iteraţie a lui for, ca urmare, se vor afişa toate

// valorile, de la 1 la 100, pentru cele divizibile cu 7 afişarea

// fiind diferită faţă de celelalte valori

}

printf("\ni=%d",i);

}

Page 20: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Funcţia exit()

definită în fişierele header standard stdlib.h şi process.h

întrerupe execuţia întregului program şi revenirea în sistemul de operare

sintaxa sa este:

void exit(int);

int functie(void) // antetul funcţiei precizează tipul valorii întoarse

{

int a;

// ...

return (a/2); // tipul expresiei returnate e identic cu cel al funcţiei

}

Instrucţiunea return

Formele admise pentru instrucţiunea return sunt:

Sintaxa sa este:

return;

sau

return expresie;

sau

return (expresie);

void functie(void)

{

int a;

// ...

exit(0);

}

Page 21: Cursul nr. 5 - atitech.unitbv.roatitech.unitbv.ro/ungureanu/docs/PCLP_I_-_curs_-_prezentari/AIA-C05.pdf · numim sintaxa limbajului-pseudocod Există o mare diversitate de limbaje-pseudocod.

Instrucţiuni

Instrucţiunea de salt necondiţionat goto

Instrucţiunea goto are ca efect saltul la eticheta specificată.

Sintaxa sa este:

goto nume_et;

Eticheta nume_et este specificată folosind sintaxa:

nume_et :

int a;

Et1:

scanf(“%d”, &a);

if (a<=0)

goto Et1;