Documente Academic
Documente Profesional
Documente Cultură
i structuri de date
-conspect -
CUPRINS
1. Sistem Informaional Sistem Informatic
2. Structuri de date
3. Grafuri
4. Algoritmi definire
5. Descrierea algoritmilor
6. Structuri fundamentale ale algoritmilor
7. Evaluarea corectitudinii algoritmilor
8. Limbaje de programare
9. Algoritmi speciali
10.
Tehnici de programare
11.
12.
Probleme
Bibliografie
Introducere:
2
10
11
12
a1
a2
a3
a4
2
X2
Adresa
de
baz+1
....
Adresa
de
baz+2*1
n
Xn
Adresa
Adresa
de
baz+(n-1)*1
17
20
CAPITOLUL 5
Limbaje de prezentare a algoritmilor ( pseudocod )
21
PROCEDURE nume_procedura
FUNCTIE nume_functie
Exista posibilitatea reluarii repetate a unui pas sau grup de mai multi pasi in
interiorul unui aloritm; aceste procee repetitive pot fi definite ca iterative sau
recursive.
Iterativitatea este procesul prin care rezultatul este obtinut prin executia
repetata a uui set de operatii, de fiecare data cu alte valori de intrare.
Recursivitatea reprezinta un proces repetitiv prin care rezultatul de la un
anumit pas se determina pe baza unuia sau mai multor rezultate obtinute in
pasii anteriori.
Scheme logice
Schema logica este o forma de prezentare a algoritmului si a modului de
lucru al acestuia sub forma grafica, folosind diferite simboluri grafice.
Se stie ca in practica programarii se acorda o importanta deosebita realizarii
schemelor logice in perioada de debut, astfel ca dupa o anumita experienta in
domeniu, se incearca tot mai des renuntarea la aceasta importanta etapa a
proiectarii.
23
24
25
26
CAPITOLUL 7
Evaluarea corectitudinii algoritmilor
Un program realizat trebuie s fie corect, clar, sigur n funcionare,
uor de modificat, portabil, eficient, nsoit de o documentaie
corespunztoare. Exist numeroase tehnici de verificare i validare a
algoritmilor, adresate n general practicienilor, dar i uor accesibile unui
nceptor n programare.
Dintre acestea amintim:
verificare
validare
27
30
gramatica
punctuatia
semantica
Rezultatul activitii de programare l constituie programul scris ca
text ntr-un limbaj de programare. Un astfel de program se numete program
sursa. El este scris printr-un editor de texte acceptat de limbajul de
programare respectiv.
Fiind scris ca format text, programul surs nu este neles de ctre
istemul electronic de calcul. Pentru aceasta este necesara traducerea lui intrun cod intern, accesibil calculatorului. Aceast operaie se realizeaz cu un
program translator numit compilator. Compilatorul este componenta
software care realizeaz traducerea programului sursa n cod intern,
rezultand aa numitul program cod obiect. Lucrul cu un anumit limbaj de
programare presupune existenta compilatorului pentru acel limbaj.
Ansamblul format din limbajul de programare i programul translator
asociat, formeaza sistemul de programare.
Limbajul de programare pascal face parte din categoria limbajelor de
programare evoluate de nivel inalt. Un program structurat este constituit din
unitati functionale bine definite, ierarhizate conform naturii specifice a
problemei de rezolvat. n interiorul unei astfel de unitati functionale,
structurarea se manifesta att la nivelul operaiilor de executat ct i la cel al
datelor de prelucrat.
Programarea structurata este o metoda independenta de limbajul de
programare utilizat. Limbajul Pascal include conceptele programarii
structurate n ambele sensuri ale efortului de abstractizare presupus de
realizarea unui program: ogranizarea datelor i conceperea succesiunii de
operaii.Limbajul Pascal a fost implementat pn n prezent pe o mare
varietate de calculatoare, avnd un inalt grad de portabilitate comparativ cu
implementarea altor limbaje de programare.
Un program reprezint o mulime ordonat de instruciuni, asociat
unui algoritm de rezolvare a unei probleme care comand operaiile de
prelucrare a datelor.
Instruciunea reprezint exprimarea intr-o forma riguroasa a unei
operatii i precizeaza functia i adresele operanzilor.Relaia dintre cele 3
elemente: algoritm, limbaj i program poate fi exprimat astfel:
Blocul
32
invers.
CHR ( cod ) este o funcie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o funcie care intoarce codul ASCII al
caracterului respectiv.
Tipul Boolean este un tip ordinal, enumerativ, care ocup un octet
memorie i poate lua 2 valori logice: adevarat i fals.
Declaraia de tip se face :
Type boolean = ( True, False )
Tipul Declarat ( Enumerativ ) este definit de utilizator ca o lista
ordonat, prin enumerarea valorilor posibile astfel:
TYPE identif tip = ( lista elemente )
TYPE zi-sapt= ( luni, marti, ... , duminica )
Tipul Subdomeniu se mai numeste tip interval i se defineste ca
submultime a unui tip ordinal prin precizarea intervalului inchis de valori.
Toate caracteristicile tipului parinte ( Integer , Char ) se regasesc n tipul
subdomeniului, singura deosebire dintre ele constand n multimea valorilor
pe care le poate lua.
Declararea constantelor:
CONST ident = valoare;
Pot fi numai de tip standard ( scalar ) i se declar n sectiunea
CONST
Valoarea constantei nu poate fi modificat n timpul rulrii
programelor.
Orice ncercare de a atribui constantelor o valoare, chiar dac este
egal cu cea iniial, va genera un mesaj de eroare.
Se asigur astfel protecia valorilor.
Declaraia de tip
TYPE Identif_tip=definiie tip;
Declaraia de variabile
Var identif var: spaiu tip var
Dac sunt mai multe variabile de acelasi tip, se inir separate cu `,`
Declaraia de funcii i proceduri
function nume_funcie (declaraie de var): tip rez;
function fact (n: integer):integer;
34
Instruciuni simple:
de atribuire
apeluri de procedura
instruciunea de salt necondiionat(goto)
instruciunea vid
Instruciuni simple
Prin instructiuni simple se realizeaz o mare parte din operatiile
de baz a algoritmilor de prelucrare. Instructiunea vid descrie aciunea vid,
ea este definit prin lipsa n contextul unor construcii pascal, fr a avea o
mnemonica explicit.
Se prezint ca o linie goala urmat de `;`
i:=1 ; 2 instruciuni vide
If x>0 then
x:=x+1
else;
Instruciunea de atribuire evalueaz o expresie i atribuie rezultatul
obtinut unei variabile sau functii.
Are formatul general:
Identificator:=valoare;
Prioritatea operanzilor n Pascal:
NOT
* / DIV MOD AND
+ - OR ( *, +, -, pe multimi )
= , > , < ,<= , >= , <> , i operatori relationali pe multimi
Expresii logice sunt cele care n urma evaluarii produc un rezultat
logic de TRUE sau FALSE ( Boolean ). Ele se prezint fie sub forma unor
condiii simple, fie sub forma unor conditii compuse, formate din mai multe
conditii simple legate prin operatorii logici: AND, OR, NOT.
Dac nu suntem siguri de prioritatea anumitor operatori este necesara
utilizarea parantezelor.
35
Apelul de procedur:
Orice rutin scris de noi, pentru a efectua anumite operaii, se
numete procedur.
Procedurile ntlnite n program ca simple instruciuni genereaz o
serie de operaii:
compilatorul caut numele de procedur n biblioteca sa; dac
nu este gsit acolo procedura e cautat n lista de declaraii de proceduri a
programului; dac nu este nici acolo se afiseaz un mesaj de eroare.
dac este gsit procedura e apelat.
Instructiunea de salt neconditionat GOTO
Format : GOTO eticheta;
La intalnirea ei se executa un salt la linia care este precedata de
eticheta urmata de `:`
IF delta >= 0 THEN
GOTO 30
ELSE
WRITE (` ecuatia nu are solutii`);
30: x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
write ( x1, x2 );
end.
Instructiuni structurate
Instructiunea compusa este o secventa de instructiuni delimitata de
cuvintele rezervate BEGIN, END.
Format :
BEGIN lista-instr END;
Efectul executiei instructiunii IF:
Se evalueaza conditia specificata.
Instructiuni pentru realizarea structurilor repetitive
Instructiunea WHILE realizeaza structura repetitiva conditionata
anterior.
Format:
WHILE conditie DO instructiune; este echivalenta cu o
constructie formata din urmatoarele instructiuni:
IF conditie THEN
BEGIN
instructiune
GOTO 1
end.
Instructiunea WHILE se mai numeste instructiune cu test initial.
36
Instructiunea Repeat
Realizeaza structura repetitiva conditionata posterior.
Format:
REPEAT instructiune UNTIL conditie ;
REPEAT
instructiune
UNTIL
conditie;
Ca i ELSE, inainte de UNTIL mi se pune `;`.
Instructiunea FOR ( ciclu cu contor )
Realizeaza structura repetitiva cu numarator ( contor de numarare ).
Format:
1) FOR contor:=val initiala TO val finala
DO instructiunea;
2) FOR contor:=val initiala DOWNTO val finala
DO instructiunea
38
- tip de data
- domeniu.
Utilizatorul poate defini n cadrul modulului su i tipuri de date
proprii, deci tipuri de date predefinite. Pentru aceasta, declaraia de tip se
face de ctre programatori n prima parte a modului de cod cu ajutorul
instruciunii :
END TYPE
Operatorii : Reprezint comenzi speciale pentru operaiile ce pot fi executate
cu datele din program. Basic pune la dispoziie 4 tipuri de operatori :
aritmetici, logici, de comparare i de concatenare.
O funcie este o procedur care efectueaz o anumit sarcin ntr-un
program.
1.
Dialogul standard cu utilizatorul
Funcia INPUT- apelul funciei INPUT permite preluarea de date de la
tastatur.
2.
Funcii matematice i statistice : ABS, EXP, INT, LOG, RND,
SQR, ATN, SIN, COS, TAN ;
3.
Funcii pentru iruri de caractere : LCASE$, UCASE$,
LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$,
INSTR,
4.
Funcii pentru conversia ntregilor : INT, CINT ;
5.
Funcii pentru conversia tipului de dat : CDBL, CLNG.
6.
Funcii pentru lucrul cu date calendaristice : TIME$, DATE$ ;
O procedur este o secven de instruciuni executate ca un tot unitar
sau partajabile. Exist trei tipuri de proceduri : SUB, FUNCTION, Tip de
proprietate. Sintaxa general a unei proceduri este : Private/Public/Static/Sub
.
End Sub.
Instruciuni de atribuire atribuirea se poate efectua prin
instruciunile :
Let - pentru valori atribuite variabilelor i proprietilor ;
Set pentru atribuirea de obiecte la o variabil de tip obiect ;
Lset i Rset pentru atribuiri speciale de iruri sau tipuri
definite de utilizator
39
40
42
CAPITOLUL 11
Tehnici de programare structurat
43
1. Recursivitatea
Este o tehnic de programare utilizat frecvent , n implementarea
funciilor i procedurilor . La baza recursivitii st stiva, care este gestionat
n mod implicit, n aceast zon de memorie salvndu-se automat, la fiecare
la fiecare apel de funcieurmtoarele informaii :
Valorile parametrilor de tip valoare;
Adresele parametrilor de tip variabil;
Variabilele locale ale subprogramului;
Adresa de ntoarcere la instruciunea aflat dup instruciunea de apel.
2. Tehnica Backtracking
44
CAPITOLUL 12
Probleme
Problema nr. 1
Sa se prezinte sub forma de chema logic i instruciunea unui limbaj de
programare sau pseudocod un algoritm eficient care s determine pentru o
matrice de n linii i m coloane a crei elemente se citesc de la tastatur
urmtoarele:
a) media aritmetic a elementelor de pe fiecare linie
b) media aritmetica a elementelor de pe fiecare coloan
c) valoarea elem. maxim i locul n care acesta se afl de pe fiecare linie
d) valoarea elem. maxim i locul n care acesta se afl de pe fiecare
coloan
e) valoarea elem. minim i locul n care acesta se afl de pe fiecare linie
f) valoarea elem. minim i locul n care acesta se afl de pe fiecare
coloan
g) elementul maxim la nivel de matrice
h) elementul minim la nivel de matrice
program matricea_de_la_curs;
type matrice=array[1..20,1..20] of integer;
var a:matrice;
max,max2,min,min2,w,z,i,p,maa,m,n,d,e,f,g,minn,maxx,j,s,ma,x,y:integer;
begin
writeln('dati nr de linii i nr de coloane');
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n do
45
for j:=1 to m do
begin
writeln('a[',i,',',j,']=');
read(a[i,j]);
end;
a) for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
ma:=(s div m);
writeln('media aritmetica pe linia ',i ,'=',ma);
readln;
end;
b) for j:=1 to m do
begin
p:=0;
for i:=1 to n do
p:=p+a[i,j];
maa:=(p div n);
writeln('media aritmetica pe coloana ',j,'= ',maa);
readln;
end;
c) for i:=1 to n do
begin
max:=-3200;
for j:=1 to m do
if a[i,j]>max then
begin
max:=a[i,j];
x:=j;
end;
writeln('maximul liniei ',i,' este elementul a[',i,',',x,'] i este egal cu ',max);
readln;
end;
d) for j:=1 to m do
begin
max2:=-3200;
for i:=1 to n do
if a[i,j]>max2 then
46
begin
max2:=a[i,j];
y:=i;
end;
writeln('maximul coloanei ',j,' este elementul a[',y,',',j,'] i este egal cu
',max2);
readln;
end;
e) for i:=1 to n do
begin
min:=3200;
for j:=1 to m do
if a[i,j]<min then
begin
min:=a[i,j];
w:=j;
end;
writeln('minimul liniei ',i,' este elementul a[',i,',',w,'] i este egal cu ',min);
readln;
end;
f) for j:=1 to m do
begin
min2:=3200;
for i:=1 to n do
if a[i,j]<min2 then
begin
min2:=a[i,j];
z:=i;
end;
writeln('minimul coloanei ',j,' este elementul a[',z,',',j,'] i este egal cu
',min2);
readln;
end;
g) maxx:=-3200;
minn:=3200;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>maxx then
begin
maxx:=a[i,j];
47
d:=i;
e:=j;
end;
h) for i:=1 to n do
for j:=1 to m do
if a[i,j]<minn then
begin
minn:=a[i,j];
f:=i;
g:=j;
end;
writeln('elementul maxim al matricei este a[',d,',',e,']=',maxx);
writeln('elementul minim al matricei este a[',f,',',g,']=',minn);
readln;
end.
SCHEMA LOGIC:
48
49
50
51
52
Problema nr. 2
Se d un vector cu n elemente numere ntregi. S se mute la sfritul
vectorului elementele sale nule pstrnd ordinea celorlalte elemente.
program ddd;
type vector=array[1..20] of integer;
var v:vector;
n,i,j,k:integer;
begin
write('dati numarul de elemente');
readln(n);
for i:=1 to n do
begin
write('v[',i,']=');
readln(v[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if v[i]=0 then
begin
k:=v[i];
v[i]:=v[j];
v[j]:=k;
end;
for i:=1 to n do
writeln('v[',i,']=',v[i]);
readln;
end.
53
SCHEMA LOGIC:
54
Problema nr. 3
S se realizeze un program pentru evaluarea expresiei:
A +B, dac C0
E=
A-B, dac C<0
Analiznd problema dat, se observ c datele de intrare sunt A, B i
C. Algoritmul va testa pe C, i, n funcie de valoarea sa, va calcula pe E fie
ca A+B, fie ca A-B.
program prg2_pagina_187;
var a,b,c:integer;
e:real;
begin
write('Introduceti valoarea pentru a= ');read(a);
write('Introduceti valoarea pentru b= ');read(b);
write('Introduceti valoarea pentru c= ');read(c);
e:=0;
if (c<0) then e:=(a*a)-b
else
if (c=0) then e:=sqrt((a*a)-b)
else e:=(1/(a*a))-b;
write('E:= ',e:8:2);
readln;
end.
55
SCHEMA LOGIC:
56
Problema nr. 4
Sa se verifice dac 2 numere sunt prietene
Doua numere sunt prieten dac primul numar este = cu suma divizorilor
celui de-al doilea mai putin el insusi i cel de-al doilea este egal cu suma
divizorilor primului numar mai putin el insusi
n=220 1+2+4+5+10+11+20+22+44+55+110
m=284 1+2+4+71+142
s1 = suma divizorilor lui n mai putin el insusi
s2 = suma divizorilor lui m mai putin el insusi
n i m prietene dac s1=m i s2=n
program lalala;
var m,n,s1,s2,i:integer;
begin
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n-1 do
if n mod i=0 then s1:=s1+i;
for i:=1 to m-1 do
if m mod i=0 then s2:=s2+i;
if (s1=m) and (s2=n) then writeln('aceste doua numere sunt prietene')
else writeln('din pacate nu sunt prietene');
readln;
end.
57
SCHEMA LOGIC:
58
Probleme de logic:
Problema nr. 5:
n aceast var, btrnul Tric a murit, lsnd proprietile sale ca motenire
nepotului su Andi, prietenul meu. El a motenit i castelul Towertia, bntuit
de fantome. ncepnd cu ora 12 noaptea pn dimineaa se aud n tot castelul
dou zgomote descifrabile: un cntat duios la vioar i un rs puternic. Andi
a observat anumite obiceiuri:
- cnd el cnt la pian i fantoma nu rde, fantoma care cnt la
vioara i schimb activitatea (dac cnta-tace, dac tcea-cnt);
altfel ea face n fiecare minut ce fcea n cel precedent;
- cnd fereastra este nchis fantoma care rde face ce fcea cealalt
fantom n minutul precedent (rde dac cealalt cnt, tace dac
cealalt tcea);
- cnd fereastra este deschis, fantoma care rde face opusul la ceea
ce cealalt fcea n minutul precedent.
Andi vrea s tie cum s scape de fantome (s le fac s tac)!
Rezolvare:
- 3: cnd fereastra este deschis, fantoma care rde face opusul la
ceea ce cealalt fcea n minutul precedent.
- 1: cnd el cnt la pian i fantoma nu rde, fantoma care cnt la
vioara i schimb activitatea (dac cnta-tace, dac tcea-cnt);
altfel ea face n fiecare minut ce fcea n cel precedent;
- 2: cnd fereastra este nchis fantoma care rde face ce fcea
cealalt fantom n minutul precedent (rde dac cealalt cnt,
tace dac cealalt tcea)
Problema nr. 6
Duminic, Marius i Radu au fost s vad la hipodrom cursa de cai. Mai
nti s-au dus s vad caii. Au fcut pariuri pe primele cinci locuri.
Radu a crezut astfel:
59
1
Doodoo
Azur
2
Azur
Emily
3
Elfy
Candy
4
Candy
Doodoo
5
Emily
Elfy
2
Doodoo
3
Azur
4
Candy
5
Emily
Problema nr. 7
Un batranel se duce la pia (mai bine statea acasa) s vnd nite ou. Un
tnr neatent l-a mbrncit i coul a czut sprgnd oule. vinovatul vrnd
s i rscumpere greeala l-a ntrebat :
60
61
Bibliografie
62