Sunteți pe pagina 1din 11

Cuprins

Gndirea algoritmic ........................................... 1

Problema cutrii ...................................................................... 1


Problema intrrii ntr-un cabinet medical ................................. 3
Tipuri de date.............................................................................4
Identificatori ..............................................................................4
Constante ................................................................................... 5
Variabil.....................................................................................6
Tipul Integer ..............................................................................6
Tipul Real...................................................................................6
Tipul Char .................................................................................. 7
Tipul Boolean ............................................................................. 7
Tipul String ............................................................................... 8
Vectorul.................................................................................... 10
Matricea (tablou bidimensional) ..............................................11
nregistrarea (record) .............................................................. 12
Fiierul text .............................................................................. 13
Structuri de date de tip liste..................................................... 14

Proceduri .............................................................17

Media aritmetic ...................................................................... 17


Ariile unor figuri geometrice ................................................... 18
ir de numere n fiier ............................................................ 20
Laturi n triunghi ..................................................................... 21
Interschimbarea a dou linii ntr-o matrice ............................22

Funcii ................................................................. 24
Media aritmetic al perechii de numere .................................. 25
Suma cifrelor unui numr........................................................26
Numr prim .............................................................................26
Elementele prime ale unui ir .................................................. 27
Ordonarea a trei numere ........................................................ 28
Unghiuri n grade i radiani .....................................................29
Perechi de numere ................................................................... 31

Frecvenele caracterelor ntr-un ir ........................................ 32


Platouri de lungime maxim ntr-un ir.................................. 33
Cel mai mare divizor comun ................................................... 35

Recursivitate .......................................................38

Conceptul de recursivitate....................................................... 38
Inversarea unui cuvnt............................................................ 38
irul Fibonacci ........................................................................ 39
Cel mai mare divizor comun ................................................... 40
Funcia Ackermann ..................................................................41
Numrare .................................................................................41
Anagrame ................................................................................ 42
Generare .................................................................................. 44
Conversie ................................................................................. 45
Codul Gray............................................................................... 45
irul mediilor aritmetico-geometrice al lui Gauss .................. 47
Evaluarea unei expresii aritmetice .......................................... 48

Metoda Divide Et Impera................................... 51

Cel mai mare divizor comun .................................................... 51


Problema turnurilor din Hanoi ............................................... 53
Problema tieturilor ................................................................ 54
Algoritmi de cutare. Cutarea binar .................................... 56
Merge Sort sortare prin inreclasare ..................................... 57
QuickSort - Sortare Rapid ..................................................... 60

Metoda BackTracking ........................................62

Descrierea general a metodei ................................................ 62


Probleme reginelor .................................................................. 62
Generarea elementelor combinatorice .................................... 64
Partiiile unei mulimi ............................................................. 68
Partiiile unui numr natural .................................................. 70
Plata unei sume cu monede de valori date ............................... 71
Paranteze ................................................................................. 73
Comis-voiajor .......................................................................... 74
Backtracking n plan.................................................................77
Labirint.................................................................................... 78
Fotografie ................................................................................ 80
Cel mai lung prefix .................................................................. 82

Gndirea algoritmic
Problema cutrii
Exist i cazul care, pentru o aceeai problem putem prezenta
dou soluii, n care una este mai rapid ca alta. De pild, fie un
ir de numere natural oarecare, de exemplu 4,2,10,1,8,15,7.
Vream s testm dac un numr dat (s zivem numrul 8) se
afl n aceast secven sau nu.
O astfel de cutare, prin parcurgerea de a stnga la dreapta a
ntregii secvene de numere, pn se gsete numrul dorit sau
se epuieaz toate elementele din secven, se numete cutarea
secvenial. Dac avem un ir S de n elemente (notat S[1..n]),
atunci cutarea secvenial a lui x n S se descrie prin:
Cutare_secvential(x,S[1..n]) nseamn
nceput
Fie elemental_curent = primul_element;
Att timp ct (elemental_curent <> x) si (pozitia elementului
current <= pozitia ultimului element (n)) execut
nceput
Dac elemental_curent = x atunci mesaj(gsit)
Altfel treci la urmtorul element
Sfrit
Sfrit.
n continuare s presupunem c numerele erau dj ordonate
cresctor 1, 2, 4, 7, 8, 10, 15. n acest caz particular, cutarea
secvenial a unui numr cum este 8 nu este prea eficient,
deoarece 8 se afl n a doua jumtate a secvenei, deci ar fi de
preferat s nu-l cutm n prima jumtate. Acest procedeu este
mai rapid:

Dac numrul din mijloc este mai mic dect numrul


cutat, atunci cutm a doua jumtate;

Dac numrul din mijloc este mai mare ca numrul cutat,


atunci cutm n prima jumtate;

Dac numrul din mijloc este egal cu numrul cutat,


nseamn c am gsit numrul n cauz i trebuie s oprim
cutarea.

Cutarea n jumtatea aleas se face tot la fel, deci se va


njumti i aceast zon
Procedeul anterior se numete cutare binar, deoarece, de
fiecare dat, o secven de numere este divizat n dou
jumti. Putem descrie cutarea binar a unui numr x ntr-o
secven S[1..n] astfel.
Cutarea_binar(x, S[1..n]) nseamn
nceput
Stabileste elemental_curent ca fiind elemental din mijlocul
secventei;
Dac n=1 atunci
Dac x = elemental_curent atunci mesaj(gsit)
Altfel mesaj(negsit)
Altfel
nceput
mparte secventa n cele dou jumtti (S[1..mijloc] si
S[mijloc+1..n]);
Dac elemental_curent = x atunci mesaj(gsit)
Altfel
Dac elemental_curent < x atunci
Cutare_binar(x,S[mijloc+1..n])
Altfel cutarea_binar(x.S[1..mijloc])
Sfrit
Sfrit.

Problema intrrii ntr-un cabinet medical


Dac un om vrea s intre pentru consult la un medic, atunci,
mai nti va bate la u: dac medicul rspunde prin poftim!,
atunci va intra, atlfel va atepta pn cnd pacientul dinuntru
va iei; abia dup ce cabinetul va fi liber, va intra.
Intrare_la_medic nseamn
nceput
Bate la_u;
Dac rspunsul = poftim! atunci
ntr_n_cabinet;
Altfel
nceput
Att timp ct cabinetul_este_ocupat_de_alt_pacient
execut
Citeste_un_ziar;
Sfrit
Sfrit.
O intruciune compus este format dintr-o secven de
intruciuni, ncadrate de cuvinte nceput i sfrit, care pot
conine, la rndul lor, blocuri de alternativ i repetiie.
Programarea este tehnica realizrii de algoritmi descrii prin
proceduri i programe. Ea devine o art, atunci cnd se
folosesc cele trei elemente de structurate i se numete
programare structurat. Pentru a vedea ce ar nsemna
programare nestructurat, s reconsiderm procedura de
intrare n cabinetul medical:
Intare_la_medic nseamn
nceput
Bate_la_u;
Dac rspunsul = poftim! atunci intr_n_cabinet;
Altfel nceput
Att timp ct cabinetul_este_ocupat_de_alt_pacient
execut
Citeste_un_ziar;
ntr_n_cabinet
Sfrit
Sfrit.

Proceduri
Media aritmetic
Realizai un program care calculeaz i afieaz media
aritmetic a dou numere reale x i y.
Program Media_aritmetica;
Var
media,x,y:Real;
Begin
Write(Dati numerele:);
ReadLn(x,y);
Media:=(x+y)/2;
WriteLn(Media=Media:8:2);
ReadLn;
End.
Cu Procedure...
Program Media_aritmetica;
Var
media,x,y:Real;
Procedure media_calcul;
Begin
Media:=(x+y)/2;
WriteLn(Media=,Media:8:2);
End;
Begin
Write(Dati numerele:);
ReadLn(x,y);
media_calcul;
ReadLn;
End.

17

Procedura Media_calcul conine toate aciunile algoritmului:


citirea numerelor, calcul i afiarea mediei aritmetice.
Program Media_aritmetica;
Var
media,x,y:Real;
Procedure media_calcul;
Begin
Write(Dati numerele:);
ReadLn(x,y);
Media:=(x+y)/2;
WriteLn(Media=,Media:8:2);
End;
Begin
media_calcul;
ReadLn;
End.

Ariile unor figuri geometrice


Scriei un program care, n funcie de dorina utilizatorului,
calculeaz i afieaz: aria unui ptrat de latur L, sau aria unui
cerc de raz r, sau aria unui triunghi cu baza b i nlimea h.
Pentru calcul i afiarea fiecreia din cele trei arii, se va folosi
cte o procedur.
Program aria;
Const
pi=3,14159;
Var
opt:Integer;
Procedure aria_patrat;
Var

18

L:Integer;
Begin
Write(Latura L=);
ReadLn(L);
If L>0 Then
WriteLn(Aria =,(L+L):6)
Else
WriteLn(Date incorecte!);
End;
Procedure aria_cerc;
Var
r:Integer;
Begin
Write(Raza r=);
ReadLn(r);
If r>0 Then
WriteLn(Aria =,(pi*r*r))
Else
WriteLn(Date incorecte!);
End;
Procedure aria_triunghi;
Var
b,h:Integer;
Begin
Write(baza b si inalt h= );
ReadLn(b,h);
If (b>0) and (h>0) Then
WriteLn(Aria -, (b*h)/2)
Else
WriteLn(Date incorecte!);
End;
Begin
WriteLn(Dati iptiunea dvs. );
WriteLn([1:patrat, 2:cerc , 3:triunghi] );
ReadLn(opt);

19

Funcii
La fel ca i procedurile, funciile efectueaz anumite operaii,
dar n plus a foncie ntoarce o anumit valoare. Tipul valorii
returnate se precizeaz la sfritul antetului finiei, fiind
precedat de caracterul dou puncte. Valoarea pe care o
returneaz o funcie poate fi folosit apoi n modul apelant i n
celelalte module componente.
Sintaxa:
Function <id_fct> (<L1>:<tip1>; <L2>:<tip2>; ...;
<Ln>:<tipn>): <tipr>;
...
{declaraii de variabile locale}
Begin
...
{corpul funciei}
End;
<id_fact> - identificatorul
<L1>,<L2>,...,<Ln> - sunt liste de paramateri
<tip1>,<tip2>,...,<tipn> - tipurile parametrilor
<tip_r> - tipul valorii returnate
Exemplu:
Program Media;
Var
x,y:Real;
Function calcul(a,b:Real):real;
Begin
Calcul:=(a+b)/2;
End;

24

Begin
Write(x,y=);
ReadLn(x,y)
ReadLn(Media=,calcul(x,y));
ReadLn;
End.

Media aritmetic al perechii de numere


Realizai un program care citete de la tastatur dou perechi
de numere (x1,x2) i (y1,y2), calculeaz media aritmetic a
numerelor fiecrei perechi, apoi determin cea mai mare
dintre mediile obinute.
Progam media_2;
Var
m1,m2,x1,x2,y1,y2:Real;
Function calcul(x,y:Real):Real;
Begin
Calcul:=(x+y)/2;
End;
Begin
Write(x1,x2=);
ReadLn(x1,x2);
M1:=calcul(x1,x2);
Write(y1,y2=);
ReadLn(y1,y2);
M1:=calcul(y1,y2);
If M1>M2 Then
WriteLn(M1)
Else
WriteLn(M2);
ReadLn;
End.

25

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