Documente Academic
Documente Profesional
Documente Cultură
ro/~lupea/Consultatii-elevi-2015/
ALGORITMI
Algoritmul este o mulime ordonat i finit de pai (instruciuni) prin care se prelucreaz date
de intrare i se obin date de ieire (rezultate), rezolvnd astfel o clas de probleme.
Proprietile fundamentale ale algoritmilor:
Caracterul finit: orice algoritm bine proiectat se termin ntr-un numr finit de pai.
Claritatea: algoritmul trebuie descris clar, fr ambiguitati.
Generalitatea: orice algoritm trebuie sa rezolve toate problemele dintr-o clasa de probleme.
Corectitudinea: rezultatele (datele de iesire) sunt corecte n raport cu datele de intrare, adic
sunt satisfcute anumite relaii matematice ntre acestea.
Completitudinea presupune tratarea cazurilor speciale (a excepiilor) unei probleme.
Realizabilitatea: orice algoritm trebuie sa poat fi codificat ntr-un limbaj de programare.
Eficiena se refer la timpul de execuie (n care sunt folosite resursele calculatorului:
memorie, procesor) i la spaiul de memorie utilizat. Un algoritm este cu att mai eficient cu
ct spaiul de memorie utilizat este mai mic i numrul de operaii mai puine.
Orice algoritm poate fi descris folosind 3 structuri de baz:
liniar,
alternativ (dac ... atunci )
repetitive (pentru, ct timp, repet)
Specificarea algoritmilor:
Antetul: nume_algoritm (lista de parametri)
Descriere: n limbaj natural, o propozitie scurta
Date: lista parametri de intrare + preconditiile care trebuie satisfcute de datele de intrare;
Rezultate: lista parametri de iesire + postconditiile care trebuie satisfacute de rezultate
Informaiile din lumea real se pot codifica sub forma unor date.
1
Pascal
:=
+, -, *, /, ^, div, mod
=, <, >, <=, >=, <>
and, or, not, xor
C/C++
=, +=, -=, *=, /=, ...
+, -, *, /, %, ++, -==, >, <, >=, <=, !=
&& (i), || (sau), !(negaie)
logici: ~ (negaie), &(i), | (sau), ^(sau exclusiv)
de deplasare: <<, >>
,
ex:
e1,e2
?: ex:
e1: e2 ? e3; (operator condiional)
sizeof()
(determinare dimensiune)
(<tip>)
(conversie de tip)
2
Exemple C/C++:
int x, y;
if( x&1) cout<< x este impar
else cout<<x este par;
if (x^y) cout<<ntregii x i y nu sunt egali
else cout<<ntregii x i y sunt egali
expresia x^=y^=x^=y
sau
expresia 1 << i reprezint numrul binar care are doar bitul de pe poziia i egal cu 1,
restul fiind 0 i este egal cu 2i:
ex: expresia 1<<4 are ca valoare 24 = 16
max_ab = (a>b)? a:b;
//calculeaza maximul dintre a i b
max_ab = (a>b)?(t=a, a=b, b=t): b;
//calculeaza maximul dintre a si b si le ordoneaza astfel nct a<b.
min_abc = (a<b) ? (a<c ? a:c) : (b<c ? b:c); //calculeaza minimul dintre a, b si c
Tipul tablou
Tabloul este o structur de date static (dimensiunea este fix) care memorez o succesiune de
elemente de acelai tip. Elementele tabloului sunt identificate prin indici.
declarare
Pascal
var <identif>:array[<tip1>,<tip2>,...] of <tip_e>;
C/C++
<tip> <identif> [<ind1>][<ind2>]...;
int a[20];
(vector cu 20 elemente)
accesare
var mat:array[1..2,1..3]=((1,2,3),(4,5,6));
a[i], i=1,...,20 (vector)
int mat[2][3]={{1,2,3},{4,5,6}};
a[i] sau *(a+i), i=0,...,19 (vector)
elemente
atribuire/
copiere
Tipul nregistrare
Inregistrarea este o structur de date ce conine date neomogene (de diferite tipuri) numite
cmpuri.
Pascal
type [<nume inregistrare>] = record
<nume11>[,<nume12>,...]: <tip1>;
<nume21>[,<nume22>,...]: <tip2>;
...
end;
type persoana=record
nume:string[20];
varsta: integer;
sex: char;
end;
C/C++
struct [<nume structura>]
{ <tip1> <nume11>[,<nume12>,...];
<tip2><nume21>[,<nume22>,...];
...
}[lista variabile];
struct persoana
{ char nume[20];
int varsta;
char sex;};
declarare variabile
persoana p1,p2;
de tip structura
declarare/initializare
accesare cmpuri
atribuire/
copiere
declarare
tip structura
Tipul ir de caractere : reunete mai multe caractere sub "un nume comun".
Pascal tipul String
var s1:String;
(max 255 caractere)
s2:String[20];
(max 20 caractere)
initializare var s1:String=ABC
declarare
accesare
caractere
operatori
s1[i], i=1,...,255
s2[i], i=1,...20
+, < ; <=; > ; >=;
=; <>
Copiere
Comparare
Pascal
var s1,s3,s4: String;
s2:String=ABC;
C/C++
#include <string.h>
char s1[30],s2[20]=ABC;
s1: =s2;
s3:=Calculator
copy (S,p,l) - returneaza
subsirul lui S de lungime l
ncepnd din poziia p
s4 = Copy(s3,4,3)
strcpy(destinatie,sursa)
length(s2) este 3
ex: strcpy(s1,s2);
(copiere totala)
lungime sir
s3=s1+s2;
s4=concat(s1,s2,s3);
valori
numerice
Val (S,v,Cr)
- v este valoare numerica din
vectorul S, iar Cr =0
- v =0 i Cr este pozitia primului
caracter nepermis din S
Str (e,S) depune n variabila S,
sirul cifrelor corespunzatoare
valorii (numerice) expresiei e
tergere
caractere
inserare ir
Insert(x,S,p)insereazirul
xnirulSlapoziiap.
Concatenare
Subsir
conversii
ir de caractere
i