Sunteți pe pagina 1din 13

Curs 1 : Introducere in programarea calculatoarelor

Noiuni fundamentale

1.1.

Noiunea de algoritm; caracteristici

Algoritm: un instrument de rezolvare a problemelor. O problem se consider a fi constituit din date de


intrare i un enun care specific relaia existent ntre datele de intrare i soluia problemei.
n cadrul algoritmului sunt descrise prelucrrile necesare pentru a obine soluia problemei pornind de la
datele de intrare.
Un algoritm este o succesiune bine precizat de prelucrri care aplicate asupra datelor de intrare ale unei
probleme permit obinerea n timp a soluiei acesteia.
Exemple:
- rezolvarea ecuaiei de gradul doi,
- ciurul lui Eratostene (pentru generarea numerelor prime mai mici dect o anumita valoare),
- schema lui Horner (pentru determinarea ctului i restului mpririi unui polinom la un binom) etc.
Soluia problemei se obtine prin execuia algoritmului. Algoritmul poate fi executat pe o main formal
(n faza de proiectare i analiz) sau pe o main fizic (calculator) dup ce a fost implementat ntr-un
limbaj de programare.
Spre deosebire de un program, care depinde de un limbaj de programare, un algoritm este o entitate
matematic care este independent de maina pe care va fi executat.
Exemplu: Algoritmul de aflare a sumei dintre dou numere
Pas 0 : START
Pas 1 : Citim numerele a,b
Pas 2 : S : = a + b
Pas 3 : Afisam rezultatul : S
Pas 4 : STOP

DATE DE INTRARE

ALGORITM

DATE DE IESIRE

Soluia unei probleme, din punct de vedere informatic, este dat printr-o mulime de comenzi
(instruciuni) explicite i neambigue, exprimate intr-un limbaj de programare.
Aceast mulime de instruciuni prezentat conform anumitor reguli sintactice formeaz un program.
Algoritmul descrie soluia problemei independent de limbajul de programare n care este redactat
programul.
1

Curs 1 : Introducere in programarea calculatoarelor


Un algoritm este compus dintr-o mulime finit de pai, fiecare necesitnd una sau mai multe operaii.
Un algoritm nu opereaz numai cu numere. Pe lng algoritmii numerici exist i algoritmi algebrici i
algoritmi logici.
Sintetic, un algoritm i un program pot fi definii astfel :
Program = exprimarea ntr-un limbaj de programare a unui algoritm
Algoritm = exprimarea ntr-un limbaj de reprezentare a unui raionament
Un program este o descriere precis i concis a unui algoritm ntr-un limbaj de programare.
De aceea, noiunile de algoritm i program se folosesc uneori greit ca sinonime.
Algoritmizarea este o cerin fundamental n rezolvarea oricrei probleme cu ajutorul calculatorului.
Experiena a demonstrat c nu orice problem poate fi rezolvat prin algoritmizarea rezolvrii, adic prin
descrierea unui algoritm de rezolvare.
Problemele se pot mpri n 2 clase:
clasa problemelor decidabile (o problem este decidabil dac exist un algoritm pentru rezolvarea
ei)
clasa problemelor nedecidabile (o problem este nedecidabil dac nu exist un algoritm pentru
rezolvarea ei).
Exist probleme care au aprut ulterior apariiei calculatoarelor. Astfel a aprut problema celor 4 culori
conform creia orice hart poate fi colorat folosind patru culori, astfel nct oricare dou ri cu frontiere
comune s fie colorate diferit. Enunarea problemei a fost fcut n anul 1852; problema a fost rezolvat n
anul 1977 doar prin utilizarea calculatorului i prin utilizarea unei metode noi (metoda Backtracking).
Exist algoritmi cu caracter general, pentru clase largi de probleme i algoritmi specifici unor probleme
particulare.
Principalele categorii de algoritmi cu caracter general sunt:
algoritmi de mprire n subprobleme (Divide et Impera),
algoritmi de cutare cu revenire (Backtracking),
algoritmi de optim local (Greedy),
algoritmi de programare dinamic etc.
Rezolvarea unei probleme dintr-un anumit domeniu reprezint o activitate ce presupune existena unor
procese:
-proces demonstrativ (demonstraia) care s arate existena unei soluii sau a mai multor soluii i s
determine efectiv soluiile exacte;
-proces computaional (algoritmul) care s codifice un proces demonstrativ, o metod sau o tehnic de
rezolvare n scopul determinrii aproximative a soluiilor exacte.
Principalele caracteristici ale unui algoritm sunt:
-generalitatea algoritmul trebuie s fie ct mai general astfel ca s rezolve o clas ct mai larg de
probleme i nu o problem particular sau punctual. El trebuie s poat fi aplicat oricrui set de date
iniiale ale problemei pentru care a fost ntocmit.
Exemplu : algoritmul de rezolvare a ecuaiei de gradul II ax2+bx+c=0 trebuie s rezolve toate cazurile
pentru o mulime infinit de date de intrare (a, b i c aparinnd numerelor reale).
2

Curs 1 : Introducere in programarea calculatoarelor


-claritatea aciunile algoritmului trebuie s fie clare, simple i riguros specificate. Un algoritm trebuie s
descrie cu precizie ordinea operaiilor care se vor efectua.
Fiecare programator trebuie s respecte anumite reguli de editare a programelor. Literatura de specialitate
prevede mai multe reguli de indentare a unui program:
o instruciunile unei secvene se vor scrie aliniate, ncepnd de la aceeai coloan;
o instruciunile unei instruciuni compuse se vor scrie ncepnd toate din aceeai coloan, aflat cu
2-4 caractere la dreapta fa de nceputul instruciunii compuse;
o pe o linie pot fi scrise mai multe instruciuni, cu condiia ca ele s aib ceva comun. Astfel, pentru
a obine un program mai compact, 2 pn la 4 instruciuni scurte de atribuire pot fi scrise pe acelai
rnd.
o denumirile variabilelor s fie astfel alese nct s reflecte semnificaia acestor variabile.
o programul trebuie amplu comentat, prin inserarea comentariilor n text.
Se consider c nu trebuie s existe reguli stricte de editare a unui program. n schimb, fiecare programator
trebuie s aib propriile lui reguli de scriere, care s fie unitare pe tot parcursul programului i care s ofere
claritate programului.
-finitudinea un algoritm trebuie s admit o descriere finit i s conduc la soluia problemei dup un
numr finit de operaii.
-corectitudinea un algoritm trebuie s poat fi aplicat i s produc un rezultat corect pentru orice set de
date de intrare valide.
Corectitudinea este de 2 tipuri:
corectitudine total (faptul c pentru orice date de intrare algoritmul determin valori corecte de ieire)
parial (finititudinea algoritmului pentru orice set de date de intrare).
Verificarea corectitudinii unui algoritm se poate face folosind:
- varianta experimental prin testarea algoritmului
- varianta analitic se bazeaz pe demonstrarea funcionrii corecte a algoritmului pentru orice date
de intrare, garantnd astfel corectitudinea.
- performana algoritmul trebuie s fie eficient privind resursele utilizate i anume s utilizeze memorie
minim i s se termine ntr-un timp minim.
- robusteea reprezint abilitatea algoritmului de a recunoate situaiile n care problema ce se rezolv
nu are sens i de a se comporta n consecin (de exemplu, prin mesaje de eroare corespunztoare).
Un algoritm robust nu trebuie s fie afectat de datele de intrare eronate.
-extensibilitatea - posibilitatea adaptrii programului la unele schimbri n specificaiile problemei.
-reutilizabilitatea -este posibilitatea reutilizrii ntregului program sau a unor pri din el n alte aplicaii.
-compatibilitatea -presupune uurina de combinare cu alte produse program.
-portabilitate -este posibilitatea de folosire a produsului program pe alte sisteme de calcul, diferite de cel
pe care a fost conceput.
-eficiena -reprezint msura n care sunt folosite eficient resursele sistemului de calcul.
Analiza mai presupune utilizarea unor tehnici de demonstrare specifice matematicii.
-testarea programului conine dou faze: depanare (debugging) i trasare (profiling). Depanarea este
procesul rulrii unui program pe diverse seturi de date de test i corectarea eventualelor erori depistate.
Trasarea este procesul de rulare pas cu pas a execuiei unui program, pe diverse seturi de date de test, pentru
a urmri evoluia valorii unor variabile i a putea depista astfel eventuale erori logice ale programului.
Structura unui algoritm este constituit din urmtoarele elemente de baz:
3

Curs 1 : Introducere in programarea calculatoarelor


Date - variabile i tipuri de date utilizate pentru accesul la memorie i generarea de valori conform
calculelor implementate n procesul de calcul prin intermediul instruciunilor;
Expresii - este alctuit din unul sau mai muli operanzi, legai ntre ei prin operatori. Operanzii
pot fi constante sau variabile ;
Instruciuni - instruciuni sau comenzi executabile pentru operaii Input/Output i operaii de
prelucrare a datelor din memorie conform procesului de calcul;
Proceduri i funcii - subprocese de calcul cu o structur asemntoare unui algoritm ce pot fi
executate prin aa-numitele instruciuni de apelare.

Practica dezvoltrii aplicaiilor software arat urmtoarele faze:


1. specificarea problemelor descrierea clar i precis a problemelor indiferent din ce domeniu
provin acestea. Se impune deci definirea unui enun precis al problemei.
2. proiectarea soluiilor includerea problemelor n clasa de probleme corespunztoare i alegerea
modului de reprezentare a problemelor prin formularea etapelor i procedeelor corespunztoare
pentru procesele de rezolvare;
3. implementarea soluiilor elaborarea algoritmilor i codificarea acestora ntr-un limbaj de
programare modern. Dup codificare, are loc obinerea formei executabile a programului.
4. analiza soluiilor eficiena soluiilor raportat la resursele utilizate: memorie, timp, utilizarea
dispozitivelor I/O, etc.;
5. testarea i depanarea verificarea execuiei programului cu diverse seturi de date de intrare
pentru a putea rspunde rezolvrii oricrei probleme pentru care aplicaia a fost elaborat. Aceast
etap presupune i adaptarea soluiilor implementate pentru eliminarea erorilor n rezolvarea unei
anumite probleme i compatibilitatea cu sistemul de calcul i sistemul de operare folosite.
6. documentarea n majoritatea cazurilor, programele sunt utilizate de alte persoane dect cele care
l-au elaborat. Pentru o utilizare corect a lor, este necesar ntocmirea unei documentaii a
programului care conine n general descrierea problemei, schema de sistem, schemele logice,
programul surs, instruciuni de utilizare. Deseori utilizarea programului este ilustrat figurativ,
folosind exemple concrete.
7. exploatarea, actualizarea i ntreinerea exploatarea presupune utilizarea curent a programului
n rezolvarea cazurilor concrete din clasa de probleme pentru care a fost proiectat. Actualizarea i
ntreinerea au i un aspect corectiv, de a elimina eventualele erori descoperite pe parcursul
exploatrii programului.
Fazele 1 i 2 formeaz etapa de analiz i proiectare iar fazele 3-7 cea de programare-execuie.

1.2.

Reprezentarea algoritmilor

Algoritmii pot fi specificai:


n limbaj natural
Pseudocod
Scheme logice
Diagrame arborescente
Tabele de decizie

1.2.1. Pseudocod
Limbajul pseudocod are o sintax i semantic asemntoare limbajelor de programare moderne,
avnd o anumit flexibilitate n ceea ce privete sintaxa, n ideea c prin codificarea unui algoritm ntr-un
limbaj de programare, operaia s fie ct mai comod. Semantica pseudocodului este apropiat de limbajele
de programare utiliznd ns cuvinte i expresii uzuale din limbajul natural.
4

Curs 1 : Introducere in programarea calculatoarelor


n dicionarul de informatic pseudocodul este definit ca limbaj utilizat n proiectarea i
documentarea programelor obinut prin grefarea unor reguli sintactice pe limbajul natural. Structurile de
control sunt reprezentate prin folosirea unor cuvinte cheie (dac atunci altfel execut pn cnd
etc) i printr-o anumit aliniere n pagin a liniilor .
Limbajul pseudocod are dou tipuri de propoziii : propoziii standard (corespund structurilor de
control) i propoziii nestandard (texte ce conin pri ale algoritmului nc incomplet elaborate, nefinisate).
Comentariile n pseudocod se includ ntre acolade. Propoziiile standard ncep cu cuvinte cheie i fie se
scriu cu litere mari, fie se subliniaz.

1.2.2. Scheme logice


Prin schem logic se nelege o reprezentare grafic a unui algoritm n care fiecrui pas i se ataeaz un
simbol denumit bloc. Ordinea de parcurgere a blocurilor n schemele logice se precizeaz cu ajutorul
sgeilor.
Exprimarea unui algoritmi cu scheme logice sau cu pseudocod este echivalent.
ntr-o schem logic se utilizeaz urmtoarele tipuri de blocuri:
PROCEDURE
ENDPROCEDURE

Blocul de inceput/sfarsit orice schema logica incepe cu


un bloc de inceput si se termina
cu blocul de stop

READ lista_variabile
Blocul de citire (doua variante)
- se citesc de la dispozitivul de
intrare valorile variabilelor
specificate in lista_variabile

WRITE lista_expresii
Blocul de scriere (doua variante
) - se scriu la dispozitivul de
iesire valorile obtinute in urma
evaluarii expresiilor din lista

Blocul de atribuire - se
evalueaz expresia, iar valoarea
obtinuta este memorata n
variabil, vechea valoare a
variabilei pierzndu-se

Variabila = expresie

Curs 1 : Introducere in programarea calculatoarelor


IF condiie THEN
Blocul de decizie - se evalueaza
Secven instructiuni
conditia: daca e adevarata se
ELSE
continua cu prelucrarea indicata
Secventa instructiuni
de ramura da, altfel cu ramura
ENDIF
nu;
Blocul conector are form de
cerc. El se folosete pentru a
conecta diferite secvene ale
unei scheme logice. Sunt utile
atunci cnd se continu
descrierea algoritmului pe mai
multe pagini.

1
1

Orice schem logic care are un singur punct de intrare i un singur punct de ieire poate fi reprezentat cu
ajutorul a trei structuri de baz: structura secvenial (liniar), structura alternativ, structura repetitiv
O schem logic construit numai cu structuri de acest tip este numit schem logic structurat. Un
algoritm structurat conine doar cele 3 structuri enumerate mai sus.
Structura secvenial
Reprezint un proces de calcul format dintr-o operaie elementar, cum este citirea unei valori sau o operaie
de atribuire, dar poate fi i o combinaie de alte structuri. Structura secvenial indic execuia succesiv a
operaiilor de baz i a structurilor de control n ordinea n care apar n schema logic; n general, orice
schem logic cuprinde secvenele:
citirea datelor
iniializarea variabilelor
prelucrri
tiprirea rezultatelor

Structura alternativ
In funcie de valoarea de adevr a condiiei, se execut una din secvene, dup care se trece la prelucrarea
urmtoare; cele dou ramuri se exclud mutual; este posibil ca una din ramuri sa fie vid.
6

Curs 1 : Introducere in programarea calculatoarelor

Structura repetitiv cu condiionare anterioar (WHILE-DO)


Secvena se execut ciclic, ct timp condiia este adevarat; dac la prima evaluare a condiiei, aceasta este
fals, corpul nu se execut niciodat. n cadrul secvenei A este necesar s se modifice valoarea unei
variabile care s afecteze valoarea de adevr a expresiei c. n caz contrar, vom ajunge la un ciclu infinit.

In pseudocod avem:
WHILE condiie
Secven instructiuni
ENDWHILE
Cele 3 structuri prezentate (secvenial, alternativ i repetitiv cu condiionare anterioar) sunt denumite
structuri de baz. Orice algoritm poate fi reprezentat folosind cele 3 structuri de baz.
n continuare prezentm nc 2 tipuri de structuri, care sunt folosite n practic, dar care au la baz i deci
pot fi nlocuite de structurile de baz.
Structura repetitiv cu condiionare posterioar (REPEAT-UNTIL)
Condiia se evalueaz dupa o prim execuie a secvenei (deci secvena se execut cel puin o dat); se
revine la execuia secventei, dac nu este adevrat. Dac condiia este adevrat se ncheie aceast
secven.

In pseudocod avem:
7

Curs 1 : Introducere in programarea calculatoarelor


REPEAT
Secven instructiuni
UNTIL condiie
Structura repetitiv cu un numr cunoscut de pai (FOR)
O variabil numit generic contor, controleaz ciclarea; contorul se iniializeaz cu o valoare iniial (val
vi), iar ciclarea se realizeaz cat timp contor<=vf, o valoare final.
La sfritul corpului ciclului, variabila contor este actualizat, fiind mrit; pentru a nu se cicla la infinit,
trebuie ca pasul de mrire ( vr) s fie pozitiv.
Structura se poate folosi i cu o valoare final mai mic dect cea iniial, caz n care avem pasul negativ.
Aceast structur este o particularizare a structurii WHILE-DO.

FOR limite de iterare


Secven instructiuni
ENDFOR

1.2 Definirea limbajelor de programare


Comunicarea interuman este indispensabil n viaa de zi cu zi. Pentru realizarea acesteia, oamenii
folosesc diverse modaliti, limbajele reprezentnd poate cea mai important facilitate de comunicare. Una
din primele aptitudini importante pe care un copil o dobndete este s vorbeasc. El nva limba matern.
De obicei, aceasta i este suficient pentru comunicarea de zi cu zi cu ali indivizi din propria societate.
Dac ns, un individ cltorete, el are nevoie s cunoasc i alte limbi pentru a se putea descurca, pentru
a putea comunica cu ali oameni din alte societi ale lumii. Cu toate c, n principiu, oamenii atribuie
nelesuri similare pentru lucruri similare, ei vorbesc (exprim) aceste nelesuri n limbi diferite. Diferena
se manifest att la nivelul sunetelor i nlnuirii acestora pentru a forma cuvintele ct i la nivelul
simbolurilor grafice folosite. A nva s vorbim ntr-o alt limb presupune a nva s rostim cuvintele
din limba respectiv, s le nlnuim de o manier potrivit conform regulilor gramaticale a limbii nvate
i s folosim simbolurile specifice acestei limbi pentru a descrie vizual sintagmele de comunicare. Dac nu
mnuim corespunztor aceste elemente, atunci cnd vom fi pui n situaia de a comunica cu cineva care
nelege doar limba respectiv, vom eua n ncercarea noastr.
Am realizat aceast scurt introducere pentru a putea realiza o comparaie ntre actele de comunicare interuman i comunicarea dintre om i calculator. n aceast comunicare, putem vedea calculatorul ca pe un
partener care e dispus s ne rezolve problemele. Pentru aceasta, trebuie s-i specificm modul n care s
rezolve aceste probleme. Putem s realizm acest lucru utiliznd algoritmii. Dar algoritmii trebuie descrii
8

Curs 1 : Introducere in programarea calculatoarelor


ntr-un limbaj inteligibil pentru calculator. Putem vedea aceast comunicare ca un caz special al unei
solicitri. Dac cerem ceva cuiva, atunci va trebui s folosim cuvinte, expresii pe care acesta s le neleag.
Conform Dicionarului Explicativ al Limbii Romne, prin limb se nelege un sistem de comunicare
alctuit din sunete articulate, specifice omului, prin care acesta i exprim gndurile sau dorinele. Astfel,
un limbaj este un mijloc de comunicare a ideilor prin sunete i culoare, reprezentnd un mijloc de
transmitere a informaiei ntre indivizii unei categorii.
Orice limbaj are la baz simboluri care formeaz limbajul respectiv. Astfel, limba vorbit are la baz sunete,
limbajele scrise au la baz literele, limbajele vizuale au la baz simbolurile grafice. Semiotica este ramura
tiinei care se ocup cu studiul simbolurilor.
Revenind la comunicarea dintre om i calculator, trebuie s definim noiunea de limbaj de programare.
Astfel, prin limbaj de programare nelegem o notaie sistematic prin care este descris un proces de calcul.
Un proces de calcul este constituit dintr-o mulime de pai pe care o main i poate executa pentru a rezolva
o anumit problem.
Astfel, un limbaj de programare este un intermediar ntre realitatea reprezentrilor utilizatorului asupra
problemei de rezolvat i realitatea calculatorului cu care lucreaz [erbnai 1987]. La rezolvarea unei
probleme cu calculatorul, un programator trebuie s priveasc fiecare element al limbajului din 2 puncte
de vedere:
- unul logic, al problemei; astfel programatorul trebuie s tie ce nelege s reprezinte din problem cu
ajutorul elementului de limbaj
- unul fizic, al implementrii, care se refer la ceea ce realizeaz calculatorul la execuia elementului de
limbaj considerat.
Programul este un compromis ntre cele 2 puncte de vedre. Astfel, programatorul trebuie s-i reprezinte
i s neleag urmtoarele universuri:
- universul problemei
- universul limbajului de programare
- universul calculatorului
Aceste trei universuri sunt n general diferite. Pentru a realiza corespondena ntre acestea, exist definite
diverse activiti ale informaticii. Figura 1 surprinde corespondena ntre universurile limbajelor de
programare.
Universul
calculatorului

Universul
problemei
Simulare

Elaborare
program

Compilare

Universul limbajului
de programare

Figura 1.

Universurile unui limbaj de programare [erbnai 1987].

Orice limbaj are 3 aspecte caracteristice:


- aspectul sintactic
- aspectul semantic
- aspectul pragmatic
9

Curs 1 : Introducere in programarea calculatoarelor


Sintaxa unui limbaj conine ansamblul regulilor prin care pornind de la simbolurile de baz care alctuiesc
alfabetul limbajului, se construiesc structuri compuse.
Mulimea regulilor sintactice care descriu ansamblul propoziiilor sau a formulelor corecte din cadrul
limbajului formeaz gramatica.
Deci, sintaxa i gramatica ne ajut s identificm modul n care putem combina simbolurile de baz ale
limbajului pentru a produce elemente acceptate de limbaj. Ele reprezint imperative riguroase, care pot fi
formalizate matematic. Sintaxa se descrie teoretic cu ajutorul sistemelor formale. Urmtoarele elemente se
utilizeaz pentru descrierea sintaxei unui limbaj:
- diagramele sintactice
- arbori de analiz
- metalimbaje (BNF Backus Naur Form, EBNF Extended Backus Naur Form, Asn.1)
Prin semantic se nelege sensul construciilor sintactice. Ea reprezint un set de reguli ce determin
semnificaia propoziiilor dintr-un limbaj. Este vorba de reguli de evaluare a acestor propoziii n termenii
unor mulimi de valori cunoscute de limbajul respectiv. Astfel, semantica reprezint nelesul fiecrei
formule corecte admise de gramatic.
Pragmatica se refer la capacitatea de a utiliza construciile sintactice i semantice. Referitor la nelegerea
aspectului pragmatic al limbajelor, putem s se nchipuim urmtorul exemplu: o persoan poate cunoate
foarte bine aspectele sintactice i semantice ale unui limbaj, dar nu are capacitatea de a utiliza corect aceste
reguli. De asemenea, exist persoane care vorbesc (folosesc) o limb fr a cunoate aspectele sintactice i
semantice ale acesteia. Pragmatica nu se poate formaliza.
In consecin, fiecare problem o vom aborda in felul urmtor:
1. vom descrie algoritmul care rezolv problema fie in pseudocod, fie cu scheme logice
2. vom transpune punctual algoritmul in limbajul de programare ales
3. ne vom asigura c rezolvarea furnizat se execute in mod corect in limbajul de programare
ales

1.3 Limbajul de programare C


1.3.1. Scurt istoric al limbajului C
dezvoltat si implementat n 1972 la AT&T Bell Laboratories de Dennis Ritchie
http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
limbaj de programare structurat (blocuri, cicluri, funcii) (concept aprut n ALGOL 60, apoi ALGOL
68, PASCAL, ...)
necesitatea unui limbaj pentru programe de sistem (legtura strns cu sistemul de operare UNIX
dezvoltat la Bell Labs)
C dezvoltat iniial sub UNIX; n 1973, UNIX rescris n totalitate n C
cartea de referin: Brian Kernighan, Dennis Ritchie: The C Programming Language (1978)
n 1988 limbajul a fost standardizat de ANSI (American National Standards Institute)
limbaj de nivel mediu: ofer tipuri, operaii, instruciuni simple fr facilitile complexe ale limbajelor
de nivel (foarte) nalt (nu: tipuri mulime, concatenare de iruri, etc.)
limbaj de programare structurat (funcii, blocuri)
permite programarea la nivel sczut, apropiat de hardware, acces la reprezentarea binar datelor
mare libertate n lucrul cu memoria foarte folosit n programarea de sistem, interfa cu hardware
produce un cod eficient (compact n dimensiune, rapid la rulare) apropiat de eficiena limbajului de
asamblare datorit caracteristicilor limbajului, si maturitii compilatoarelor
10

Curs 1 : Introducere in programarea calculatoarelor


slab tipizat ! necesit mare atentie n programare, conversii implicite i explicite ntre tipuri, char e tip
ntreg, etc.
1.3.2 Structura unui program i a unei funcii C
O funcie C este un modul care grupeaz n interiorul unei perechi de acolade un set de operaii codificate
sub forma unor instruciuni.
Observaii:
Fiecare funcie poate accepta parametri de intrare la apel i poate returna o valoare la revenire.

Fiecare funcie are un nume precedat de un cuvnt cheie care desemneaz tipul funciei (tipul valorii
returnate de funcie).

Numele funciei este urmat de o pereche de paranteze rotunde ntre care se specific tipul i numele
parametrilor funciei. Parantezele sunt necesare chiar dac nu exist parametri.

n limbajul C nu este permis definirea unei funcii n interiorul altei funcii (lucru care este permis
n limbajul Pascal). n limbajul C, toate funciile trebuie definite n mod independent.

Un program C se compune din una sau mai multe funcii, dintre care una este funcia principal. Fiecare
funcie are un nume propriu, cu excepia funciei principale care se numete main. Orice program trebuie
s aib o funcie main iar execuia programului ncepe cu prima instruciune din aceast funcie.
Structura general a unei funcii C este urmtoarea:
tipreturn numefunctie(lista_parametri)
{
instruciuni specifice funciei: declarare variabile locale,instruciuni executabile
return expresie;

Dac tipul returnat de funcie nu este specificat, acesta este implicit considerat int. Dac lista parametrilor
nu este vid, fiecare parametru poate fi eventual specificat doar prin numele su, tipurile parametrilor fiind
precizate prin declaraii care preced corpul funciei.
Prima linie este headerul (antetul) funciei iar ceea ce este inclus ntre acolade se numete corpul funciei.
Corpul funciei este un bloc care poate conine definiii, declaraii de variabile locale i instruciuni necesare
realizrii scopului funciei. De altfel, corpul funciei poate fi considerat o instruciune compus care descrie
prelucrrile necesare pentru a ajunge la valoarea funciei pornind de la valorile parametrilor.
Rezultatul aciunii funciei este dat de expresia coninut de instruciunea (sau instruciunile) return aflat
n corpul funciei.
Exist funcii care nu au parametri i/sau care nu returneaz nici un rezultat. Specificarea acestui aspect se
face utiliznd cuvntul cheie void . Utilizarea lui void pentru a indica o list de parametri vid este
redundant n C++.
Afiarea unui mesaj pe ecranul utilizator necesit prezena unei instruciuni printf (Exemplul 2).
Exemplu 2:
#include<stdio.h>
int main()

11

Curs 1 : Introducere in programarea calculatoarelor


{
printf(Salut anul 2IE!\n);
return 0;
}

Observaii:
prima linie: obligatorie pentru orice program care citete sau scrie, este o directiv de preprocesare,
include fiierul stdio.h care conine declaraiile funciilor standard de intrare/ieire adic
informaiile (nume, parametri) necesare compilatorului pentru a le folosi corect

printf (print formatted): o funcie standard implementat ntr-o bibliotec care e inclus

irurile de caractere: incluse ntre ghilimele duble "

\n este notaia pentru caracterul de linie nou.

(linkeditat) la compilare; e apelat aici cu un parametru ir de caractere

Exemplul 4: Citete de la tastatur numele unei persoane, afieaz pe ecran o urare de bun venit n lumea
C, folosind acest nume
#include <stdio.h>
int main()
{
char nume[10];
printf("Numele dumneavoastra:");
scanf("%s", nume);
printf("Bine ai venit in lumea C! %s\n", nume);
return 0;
}

Sfritul unei instruciuni se delimiteaz folosind caracterul ;.


Apelul unei funcii transfer controlul de la funcia apelant la funcia apelat. Apelul se face utiliznd
numele funciei, avnd ntre paranteze lista parametrilor actuali. Apelul, fiind o instruciune, se termin cu
caracterul ; (punct i virgul).
Exemplu: Media a doua numere
#include <stdio.h>
/* calculeaza si afiseaza media a doua numere */
int main ( ) {
int a,b;
float c;
/* declaratii de variabile */
printf("a="); scanf("%d", &a); /* citire date initiale */
printf("b="); scanf("%d", &b); /* citire date initiale */
c= (a+b) / 2.0;
/* instructiune de calcul */
printf ("%f\n", c);
/* afisare rezultat */
return 0;
}

Exemplul: Pentru dou variabile de tip ntreg , interschimbai coninutul lor.


12

Curs 1 : Introducere in programarea calculatoarelor


#include <stdio.h>
int main() {
int a,b,aux;
printf("Introduceti cele doua variabile (a,b):");
scanf("%d,%d",&a,&b);
aux=a; /* se face interschimbarea */
a=b;
b=aux;
printf("Dupa interschimbare: a=%d, b=%d\n",a,b);
return 0;
}

Exemplu: Pentru dou variabile de tip intreg , interschimbai coninutul lor. Nu se folosete o variabil
suplimentara.
#include <stdio.h>
int main() {
int a,b;
printf("Introduceti cele doua variabile (a,b):");
scanf("%d,%d",&a,&b);
a=a-b;
b=a+b;
a=b-a;
printf("Dup interschimbare: a=%d, b=%d\n",a,b);
return 0;
}

Bibliografie
1. Negrescu Liviu, Limbajul C, ed. Agora 1997
2. Logoftu Doina, Bazele programrii n C, Ed. Polirom 2006
3. Cerchez Emanuela i erban Marinel, Programarea n limbajul C/C++, Ed.
Polirom 2005
4. Bologa Cristian., Algoritmi, ed. Risoprint
5. G.C. Silaghi, Mircea Moca, Limbaje de programare. Metode obiectuale. Ed.
Risoprint 2008

13

S-ar putea să vă placă și