Documente Academic
Documente Profesional
Documente Cultură
Algoritmi
Si structuri de date
-conspect -
referat.clopotel.roreferat.clopotel.ro
CUPRINS
1. Sistem Informational 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:
10
11
12
a1
a2
a3
a4
14
16
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 in functionare,
usor de modificat, portabil, eficient, insotit de o documentatie
corespunztoare. Exist numeroase tehnici de verificare si validare a
algoritmilor, adresate in general practicienilor, dar si usor accesibile unui
inceptor in programare.
Dintre acestea amintim:
verificare
validare
27
30
gramatica
punctuatia
semantica
Rezultatul activittii de programare il constituie programul scris ca
text intr-un limbaj de programare. Un astfel de program se numeste 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 inteles de ctre
sistemul electronic de calcul. Pentru aceasta este necesara traducerea lui intrun cod intern, accesibil calculatorului. Aceast operatie se realizeaz cu un
program translator numit compilator. Compilatorul este componenta
software care realizeaz traducerea programului sursa in cod intern,
rezultand asa numitul program cod obiect. Lucrul cu un anumit limbaj de
programare presupune existenta compilatorului pentru acel limbaj.
Ansamblul format din limbajul de programare si 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. In interiorul unei astfel de unitati functionale,
structurarea se manifesta atat la nivelul operatiilor de executat cat si la cel al
datelor de prelucrat.
Programarea structurata este o metoda independenta de limbajul de
programare utilizat. Limbajul Pascal include conceptele programarii
structurate in ambele sensuri ale efortului de abstractizare presupus de
realizarea unui program: ogranizarea datelor si conceperea succesiunii de
operatii.Limbajul Pascal a fost implementat pan in prezent pe o mare
varietate de calculatoare, avand un inalt grad de portabilitate comparativ cu
implementarea altor limbaje de programare.
Un program reprezint o multime ordonat de instructiuni, asociat
unui algoritm de rezolvare a unei probleme care comand operatiile de
prelucrare a datelor.
Instructiunea reprezint exprimarea intr-o forma riguroasa a unei
operatii si precizeaza functia si adresele operanzilor.Relatia dintre cele 3
elemente: algoritm, limbaj si program poate fi exprimat astfel:
Blocul
32
invers.
CHR ( cod ) este o functie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o functie care intoarce codul ASCII al
caracterului respectiv.
Tipul Boolean este un tip ordinal, enumerativ, care ocup un octet
memorie si poate lua 2 valori logice: adevarat si fals.
Declaratia 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 si se defineste ca
submultime a unui tip ordinal prin precizarea intervalului inchis de valori.
Toate caracteristicile tipului parinte ( Integer , Char ) se regasesc in tipul
subdomeniului, singura deosebire dintre ele constand in multimea valorilor
pe care le poate lua.
Declararea constantelor:
CONST ident = valoare;
Pot fi numai de tip standard ( scalar ) si se declar in sectiunea
CONST
Valoarea constantei nu poate fi modificat in timpul rulrii
programelor.
Orice incercare de a atribui constantelor o valoare, chiar dac este
egal cu cea initial, va genera un mesaj de eroare.
Se asigur astfel protectia valorilor.
Declaratia de tip
TYPE Identif_tip=definitie tip;
Declaratia de variabile
Var identif var: spatiu tip var
Dac sunt mai multe variabile de acelasi tip, se insir separate cu `,`
Declaratia de functii si proceduri
function nume_functie (declaratie de var): tip rez;
function fact (n: integer):integer;
34
Instructiuni simple:
de atribuire
apeluri de procedura
instructiunea de salt neconditionat(goto)
instructiunea vid
Instructiuni simple
Prin instructiuni simple se realizeaz o mare parte din operatiile
de baz a algoritmilor de prelucrare. Instructiunea vid descrie actiunea vid,
ea este definit prin lipsa in contextul unor constructii pascal, fr a avea o
mnemonica explicit.
Se prezint ca o linie goala urmat de `;`
i:=1 ; 2 instructiuni vide
If x>0 then
x:=x+1
else;
Instructiunea de atribuire evalueaz o expresie si atribuie rezultatul
obtinut unei variabile sau functii.
Are formatul general:
Identificator:=valoare;
Prioritatea operanzilor in Pascal:
NOT
* / DIV MOD AND
+ - OR ( *, +, -, pe multimi )
= , > , < ,<= , >= , <> , si operatori relationali pe multimi
Expresii logice sunt cele care in urma evaluarii produc un rezultat
logic de TRUE sau FALSE ( Boolean ). Ele se prezint fie sub forma unor
conditii 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 operatii, se
numeste procedur.
Procedurile intalnite in program ca simple instructiuni genereaz o
serie de operatii:
compilatorul caut numele de procedur in biblioteca sa; dac
nu este gsit acolo procedura e cautat in lista de declaratii de proceduri a
programului; dac nu este nici acolo se afiseaz un mesaj de eroare.
dac este gsit procedura e apelata.
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 si 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 in cadrul modulului sau si tipuri de date
proprii, deci tipuri de date predefinite. Pentru aceasta, declaratia de tip se
face de catre programatori in prima parte a modului de cod cu ajutorul
instructiunii :
END TYPE
Operatorii : Reprezinta comenzi speciale pentru operatiile ce pot fi executate
cu datele din program. Basic pune la dispozitie 4 tipuri de operatori :
aritmetici, logici, de comparare si de concatenare.
O functie este o procedura care efectueaza o anumita sarcina intr-un
program.
1.
Dialogul standard cu utilizatorul
Functia INPUT- apelul functiei INPUT permite preluarea de date de la
tastatura.
2.
Functii matematice si statistice : ABS, EXP, INT, LOG, RND,
SQR, ATN, SIN, COS, TAN ;
3.
Functii pentru siruri de caractere : LCASE$, UCASE$,
LTRIM$, RTRIM, CHR, ASC, LEN, VAL, LEFT$, RIGHT$, MID$,
INSTR,
4.
Functii pentru conversia intregilor : INT, CINT ;
5.
Functii pentru conversia tipului de data : CDBL, CLNG.
6.
Functii pentru lucrul cu date calendaristice : TIME$, DATE$ ;
O procedura este o secventa de instructiuni executate ca un tot unitar
sau partajabile. Exista trei tipuri de proceduri : SUB, FUNCTION, Tip de
proprietate. Sintaxa generala a unei proceduri este : Private/Public/Static/Sub
.
End Sub.
Instructiuni de atribuire atribuirea se poate efectua prin
instructiunile :
Let - pentru valori atribuite variabilelor si proprietatilor ;
Set pentru atribuirea de obiecte la o variabila de tip obiect ;
Lset si Rset pentru atribuiri speciale de siruri sau tipuri
definite de utilizator
39
40
42
CAPITOLUL 11
Tehnici de programare structurat
43
1. Recursivitatea
Este o tehnica de programare utilizata frecvent , in implementarea
functiilor si procedurilor . La baza recursivitatii sta stiva, care este gestionata
in mod implicit, in aceasta zona de memorie salvandu-se automat, la fiecare
la fiecare apel de functieurmatoarele informatii :
Valorile parametrilor de tip valoare;
Adresele parametrilor de tip variabila;
Variabilele locale ale subprogramului;
Adresa de intoarcere la instructiunea aflata dupa instructiunea de apel.
2. Tehnica Backtracking
44
CAPITOLUL 12
Probleme
Problema nr. 1
Sa se prezinte sub forma de chema logic si instructiunea unui limbaj de
programare sau pseudocod un algoritm eficient care s determine pentru o
matrice de n linii si 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 si locul in care acesta se afl de pe fiecare linie
d) valoarea elem. maxim si locul in care acesta se afl de pe fiecare
coloan
e) valoarea elem. minim si locul in care acesta se afl de pe fiecare linie
f) valoarea elem. minim si locul in 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 si 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,'] si 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,'] si 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,'] si 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,'] si 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 intregi. S se mute la sfarsitul
vectorului elementele sale nule pstrand 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
Sa se realizeze un program pentru evaluarea expresiei:
A +B, daca C0
E=
A-B, daca C<0
Analizand problema data, se observa ca datele de intrare sunt A, B si
C. Algoritmul va testa pe C, si, in functie 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 si 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 si m prietene dac s1=m si 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:
In aceasta vara, batranul Trica a murit, lasand proprietatile sale ca mostenire
nepotului sau Andi, prietenul meu. El a mostenit si castelul Towertia, bantuit
de fantome. Incepand cu ora 12 noaptea pana dimineata se aud in tot castelul
doua zgomote descifrabile: un cantat duios la vioara si un ras puternic. Andi
a observat anumite obiceiuri:
- cand el canta la pian si fantoma nu rade, fantoma care canta la
vioara isi schimba activitatea (daca canta-tace, dac tacea-canta);
altfel ea face in fiecare minut ce facea in cel precedent;
- cand fereastra este inchisa fantoma care rade face ce facea cealalta
fantoma in minutul precedent (rade daca cealalta canta, tace daca
cealalta tacea);
- cand fereastra este deschisa, fantoma care rade face opusul la ceea
ce cealalta facea in minutul precedent.
Andi vrea sa stie cum sa scape de fantome (sa le faca sa taca)!
Rezolvare:
- 3: cand fereastra este deschisa, fantoma care rade face opusul la
ceea ce cealalta facea in minutul precedent.
- 1: cand el canta la pian si fantoma nu rade, fantoma care canta la
vioara isi schimba activitatea (daca canta-tace, dac tacea-canta);
altfel ea face in fiecare minut ce facea in cel precedent;
- 2: cand fereastra este inchisa fantoma care rade face ce facea
cealalta fantoma in minutul precedent (rade daca cealalta canta,
tace daca cealalta tacea)
Problema nr. 6
Duminica, Marius si Radu au fost sa vada la hipodrom cursa de cai. Mai
intai s-au dus sa vada caii. Au facut 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 piat (mai bine statea acasa) s vand niste ou. Un
tanr neatent l-a imbrancit si cosul a czut sprgand oule. vinovatul vrand
s isi rscumpere greseala l-a intrebat :
60
61
Bibliografie
62