Sunteți pe pagina 1din 37

RECAPITULARE CLASA A X-A Curs Pregatire Bac 2022

Subprograme (Functii)

• Subprograme Clasice
• Subprograme Recursive
MATERIA DE
CLASA A X-A Siruri de caractere

• Prelucrari elementare
• Functii predefinite
(CSTRING)
Structuri
Neomogene
• Struct
MATERIA DE
CLASA A X-A Structuri Liniare

• Coada
• Stiva
SUBPROGRAME #1
- Scopul Subprogramelor este de a structura intr-un mod mai estetic codurile.
- Acestea sunt folosite nu doar pentru estetica, ci si pentru usurarea muncii
informaticienilor, codul fiind mult mai usor de urmarit.
- Conventiile general valabile impun ca functiile sa faca un singur lucru. (Nu vom face
mai multe lucruri in aceiasi Functie)
- Subprogramele sunt in general impartite in 2 mari categorii, cele care returneaza si
cele care nu. Subprogramele care nu returneaza valori sunt in general folosite pentru
a separa anumite portiuni de cod de altele pentru a putea usura intelegerea sursei.
- De asemenea, daca dorim modificarea unor valori, le putem transmite prin
referinta.
- Signatura functiei este prima linie din declarerea functiei de
mai jos. Aceasta contine tipul de date a valorii pe care o
returnam, numele functiei si variabilele pe care aceasta le
primeste si urmeaza sa fie prelucrate
UN EXEMPLU RELEVANT:
FUNCTIILE CARE
RETURNEAZA
FUNCTIILE CARE
RETURNEAZA
Este important de precizat faptul
ca in mod normal atunci cand
trimitem un parametru unei
functii, acesta nu se va modifica.
De exemplu, alaturat, variabila
n declarata in corpul functiei
main nu va suferi modificari
chiar daca n-ul utilizat in functia
de suma cifrelor va deveni 0
FUNCTIILE CARE
RETURNEAZA
Putem returna orice tip de data
simplu. Nu se pot returna
structuri de date precum vectori,
matrici sau alte structuri
similare.
TRANSMITEREA DATELOR
PRIN REFERINTA
In cazul in care dorim modificarea
variabilelor in cadrul functiei, se
poate preciza acest lucru in mod
explicit compilatorului prin folosirea
operatorului de referentiere (&)
inainte de declarerea variabilei pe
care dorim ca functia noastra sa o
modifice.
FUNCTIILE FARA RETUR
- In cazul in care dorim pur si simplu sa luam o portiune de cod si sa o punem intr-o
functie cu scopul de a ordona codul, nu vom vrea mereu sa returneze ceva, doar sa
produca modificari asupra variabilelor. Acest lucru se poate face folosind functii care
nu returneaza nimic (VOID).
- Pentru a declara o astfel de functie, folosim tipul de date void si astfel, anuntam
compilatorul ca nu vom returna nimic.
- De cele mai multe ori dorim sa producem modificari asupra variabilelor noastre de
intrare, motiv pentru care acestea vor fi transmise prin referinta
FUNCTIILE FARA
RETUR
Alaturat avem doua functii, una
care citeste un vector si cealalta
ii afiseaza elementele. Intrucat
variabila n se citeste, vrem sa-I
modificam valoarea si va fi
transmisa prin parametru.
ATENTIE! Vectorii si matricile nu
se transmit prin parametru
intrucat valorile lor se modifica
definitive in cadrul functiilor.
FUNCTII FARA
RETUR
- Este important ca daca vrem sa
apelam functii din alte functii, cele
pe care le apelam sa fie situate
deasupra de cea in care suntem.
- Daca in momentul proiectarii nu se
stie exact continutul tuturor
functiilor, exista o modalitate utila
de a declara aceste functii in asa
fel incat sa nu fie o probleme cu
zona in care a fost declarata.
TRANSMITEREA UNEI MATRICI CA PARAMETRU
FUNCTII RECURSIVE
O functie care se auto-apeleaza se numeste o functie recursiva. O functie recursiva
are mereu o conditie de oprire si un auto-apel in ea.
In general, structurile repetitive pot fi foarte usor inlocuite cu o functie recursive.
De asemenea, atunci cand stim o formula de recursie (Ex: a[n] = a[n-1] * 2) – putem
aplica foarte usor o astfel de functie.
De regula, aceste functii sunt folosite pentru a usura eforturile de programare ale
informaticianului.
TRANSFORMAREA
IN FUNCTIE REC
Alaturat vedem o functie iterative
care calculeaza suma cifrelor unui
numar, iar mai jos se poate vedea
transformarea functiei in una
recursiva.
Se poate observa faptul ca in cea
de-a 2 functie nu avem o structura
repetitiva, acest lucru fiind simulat
de recursie.
De asemenea, in cadrul functiilor
recursive observam prezenta
conditiei de oprire.
EXEMPLE DE RECURSIVITATI
DIVIDE ET IMPERA
Divide et Impera este un concept filozofic antic care are in vedere un principiu destul
de simplu: divide si stapaneste.
In informatica, acest lucru va fi folosit sub o forma usor diferita. Acest algoritm se
foloseste cel mai mult pentru a determina proprietati ale vectorilor si ale matricilor.
Ideea este destul de simpla, pentru a stii proprietati ale vectorilor, vom cauta
secvential pe acesta si ii vom determina starea.
 Spre exemplu: Daca ne intereseaza sa stim daca un vector are toate elementele pare, este sufficient
pentru a verifica daca ambele jumatati ale acestuia au toate elemtele pare. Divizarea sirului continua
pana secventa are un singur element
EXEMPLE DE DIVIDE ET IMPERA
SIRURI DE CARACTERE
Sirurile de caractere sunt niste vectori in care se pun caractere. Datorita unei foarte
mari nevoie de prelucrare a acestor structuri, s-au dezvoltat niste modalitati de a-I
prelucra care sa faca viata programatorilor mult mai usoara.
Acestea nu se citesc la fel ca ceilalti vectori, nu se afiseaza ca ceilalti vectori si nici nu
se prelucreaza ca aceeia. Desigur, pot fi abordati similar cu vectorii normali, dar
acest lucru nu va duce la o mai buna prelucrare a lor.
In slide-urile urmatoare vom vorbi despre Citire, Afisare, Prelucrare, Functii
Predefinite pe Caractere si Functii Predefinite pe Siruri.
Citirea si Afisarea unui sir de caractere se poate face la fel
ca la o variabila.
E important de precizat faptul ca in urma citirii, in capatul
sirului se pune in mod automat caracterul ‘\0’ – NULL, astfel
stiind pana unde sa afiseze.
Daca avem sirul s=“Ana\0are mere multe!\0”

CITIRE SI cout << s; afiseaza “Ana” – oprindu-se la ‘\0’

AFISAREA
PRELUCRARI ELEMENTARE
Prelucrarile elementare sunt identice cu cele pe vectorii pe int sau alte tipuri de date.
Putem sorta, putem sterge si insera caractere noi, putem cauta binar in alfabet un
caracter, putem cauta secvente sau putem sa calculam frecvente ale acestor
caractere.
Toate aceste lucruri le stiti deja, asa ca ne vom concentra pe functiile predefinite din
biblioteca CSTRING – cea cu care aveti voie la BAC!
In aceasta biblioteca dispunem de 2 tipuri de functii pe care le putem utiliza:
- Functii pe Siruri
- Functii pe Caractere
FUNCTII PREDEFINITE PE CARACTERE
FUNCTII PREDEFINITE PE CARACTERE
FUNCTII PREDEFINITE PE SIRURI DE CARACTERE
strlen(sir) –> lungimea sirului de caractere memorat in s
FUNCTII PREDEFINITE PE
SIRURI DE CARACTERE
nr = strcmp(sir1, sir2)
Compara cele 2 siruri
alfabetic:
nr < 0 -> sir1 < sir2,
nr = 0 -> sir1 = sir2,
nr > 0 -> sir1 > sir2
FUNCTII PREFEFINITE PE SIRURI DE CARACTERE
strcpy(dest, sursa) -> copiaza in sirul dest, sirul sursa
(identic)
FUNCTII PREDEFINITE PE
SIRURI DE CARACTERE

strchr(sir, caracter):
- verifica daca caracter
apare in sirul sir. Retur:
-> pozitia caracterului ca
pointer daca gaseste
-> NULL daca nu gaseste (0)
FUNCTII PREDEFINITE PE SIRURI DE CARACTERE
strcat(dest, sursa) -> concateneaza la sirului dest, sirul
sursa
FUNCTII PREDEFINITE CU SIRURI DE CARACTERE
strstr(sursa, sir) -> pointer la prima aparitie a sirului sir
in sursa
pozitia de inceput ca pointer
NULL daca nu gaseste
FUNCTII PREDEFINITE CU SIRURI DE CARACTERE
strtok(sir, separatori) -> desparte sirul in mai multe
subsiruri
-> Cand intalneste un separator, ne da cuvantul curent si
trece mai departe

EXEMPLU PE URMATORUL SLIDE


CE SUNT POINTERII?
- adrese catre anumite zone din memorie
char s[1001] -> se aloca in memorie 1001 pozitii sirului s
s -> este o adresa catre prima pozitie a acestei zone
operatorii pe pointeri: *, &
* - operatorul de dereferentiere
& - operator de referentiere
daca ma intereseaza adresa unei variabile / sir / orice este
suficient sa punem operatorul de referentiere in fata
daca stim adresa si punem * in fata adresei, ia valoarea de la
pozitia aceea
STRUCTURI DE DATE NEOMOGENE (STRUCT)
Structul ne permite declararea unor noi tipuri de date care sa memorize date mult
mai exacte despre niste obiecte. (Sunt copii ai claselor pe care le veti invata la
facultate)
Pentru bac este sufficient sa stiti cum sa va creati astfel de structuri si cum sa
memorati si accesati diverse campuri ale lor.

In acest mod ne putem crea o variabila a care retine 2


numere naturale de tipul int. Fiecare camp se acceseaza
prin operatorul ‘.’ si poate fi accesat la orice moment de
timp.
STRUCTURI DE DATE NEOMOGENE (STRUCT)
In cazul in care ne dorim sa creem mai multe astfel de date si sa ne definim propria
structura, putem sa ii dam o eticheta structului pentru a fi usor de identificat si pentru
a putea declara mai multe variabile de acest gen.

De cate ori scriem cuvantul eticheta, declaram practic o


noua variabila din acest tip de date. In acest mod putem
sa declaram multiple variabile.
STRUCTURI DE DATE NEOMOGENE (STRUCT)
STRUCTURI DE DATE NEOMOGENE (STRUCT) -
EXTRA
STRUCT IN STRUCT
Material scris de Somesan Paul-Ioan
VA RUGAM SA NU-L DISTRIBUITI

MULTUMESC!

ACADEMIA-ZECELAINFO

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