Sunteți pe pagina 1din 5

http://www.cs.ubbcluj.

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

Date, variabile, expresii, operatori

Informaiile din lumea real se pot codifica sub forma unor date.
1

Data este modelul de codificare a informaiei, accesibil calculatorului pentru prelucrare.


Datele sunt caracterizate de urmtoarele atribute: identificator (nume), valoare, adres de
memorie, tip.
Tipul unei date definete mulimea valorilor posibile, modul de reprezentare intern,
dimensiunea locaiei de memorie alocate i operaiile ce se pot efectua cu aceasta.
Clasificarea datelor:
n funcie de valoare:
o variabile: i pot modifica valoarea pe parcursul execuiei algoritmului
o constante: nu i modific valoarea pe parcursul execuiei algoritmului.
O constant simbolic are un nume, declararea sa ncepe cu const, se precizeaz
numele i se iniializeaz cu o valoare care nu se poate modifica ulterior.
Ex. Pascal: const n=100;
Ex. C/C++: #define n 100 sau const int n=100
n funcie de modul de compunere: elementare i structurate.
Variabilele i constantele pot fi:
globale: se declar nafara oricrei funcii/subprogram, se memoreaz n segmentul de date i
sunt vizibile pe tot parcursul execuiei programului;
locale: se declar ntr-o funcie/subprogram/ program principal/bloc de instruciuni (C/C++), se
memoreaza pe stiva si sunt vizibile doar n subprogramul/blocul de intruciuni n care au fost
declarate.
Tipuri elementare de date: ntreg, real, caracter, sir de caractere, logic (booleen), pointer.
Asupra datelor se aplic operatori rezultnd expresii.
Operatori
atribuire
aritmetici
relationali
logici
pe bii
alii

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

y^=x^=y^=x interschimb valorile ntregilor x i y.

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>]...;

var a: array[1..20] of integer; (vector cu 20 elemente)

int a[20];

var b: array[1..10,1..20] of real;

float b[10][20]; (matrice 10 linii, 20 coloane)

(matrice 10 linii, 20 coloane)


initializare var c: array[1..6] of real =(2.5,-6,7.3,-4.7,0,-8);
//trebuie initializate toate cele 6 elemente alocate

(vector cu 20 elemente)

!! numele unui tablou este un pointer constant


avnd ca valoare adresa de nceput a tabloului
float c[6]={2.5,-6,7.3,-4.7}; //s-au initializat
//doar primele 4 elemente din cele 6 alocate
int d[]={1,2,3,4}; //s-a alocat zona de
//memorie pentru 4 intregi si s-au initializat

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

b[i,j], i=1,...10; j=1,...,20 (matrice)

b[i][j] sau *(b[i]+j) sau *(*(b+i)+j)

atribuire/
copiere

Nu se poate folosi operatia de atribuire asupra a 2


tablouri, copierea trebuie fcut element cu element.

i=0,...9; j=0,...19 (matrice)


Nu se poate folosi operatia de atribuire asupra a
2 tablouri, copierea trebuie fcut element cu
element.
3

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

var p1,p2: persoana;

persoana p1,p2;

de tip structura
declarare/initializare
accesare cmpuri
atribuire/
copiere

var p1:persoana={Pop Ana,10, f };


p1.nume; p1.varsta, p1.sex
:= (copiere cmp cu cmp, bit cu bit)
p2 := p1

persoana p1={Pop Ana,10,f};


p1.nume; p1.varsta, p1.sex
= (copiere cmp cu cmp, bit cu bit)
p2 = p1;

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

C/C++ - nu exista tip predefinit, 2 abordri:


- vector de caractere alocare static
- pointer la caracter alocare dinamica
! sfritul logic al vectorului este marcat prin \0

declarare

char s1[255]; (max 254 caractere utile + \0)


char *s2; s2 = new char[20]; (max 19 caractere +\0)

accesare

char s1[]=ABC; (lungime vector este 4, lungime sir este 3)


char *s3=abcd;
s1[i],i=0,...254,
s1[254] este \0
s2[i] sau *(s2+i) , i=0,...19,
*(s2+19) este \0
functii specifice: strcmp, strcat,...

caractere
operatori

s1[i], i=1,...,255
s2[i], i=1,...20
+, < ; <=; > ; >=;
=; <>

Operatori, funcii si proceduri pentru prelucrarea sirurilor de caractere


4

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)

strncpy(destinatie,sursa,n) (copiere max n caract. )


ex: strncpy(s1,s2,2)
strcmp(s1,s2)
stricmp(s1,s2)(nu se face diferenta intre litere mici
si mari)
strncmp(s1,s2,n) (compara primele n caractere)
strncmpi(s1,s2,n) (compara primele n caractere si
este case insensitive)
toate funciile de mai sus returneaza o valoare:
< 0 (dac sirul s1< sirul s2 ordine lexicografica)
= 0 (daca sunt siruri identice)
>0 (dac sirul s1> sirul s2 ordine lexicografica)
strlen(s2) este 3 n exemplul de mai sus

lungime sir
s3=s1+s2;
s4=concat(s1,s2,s3);

- adaugare sir s2 (maxim n caractere) la sirul s1


strcat(s1,s2)
strncat(s1,s2,n)

Pos (x,S) determina pozitia


subsirului x n sirul S sau 0 daca
sirul S nu contine ca subsir pe x

- verifica daca s2 este subsir al lui s1


strstr(s1,s2) returneaza adresa de nceput a subirului
s2 n s1 dac exist i NULL (0) n caz contrar.
- conversie sir de caractere la int, long, float si
double
atoi(sir), atol(sir), atof(sir), atod(sir)
ex: int n; n=atoi(1234);

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

Delete (S,p,l) - terge din irul S


ncepnd din poziia p, l
caractere.

inserare ir

Insert(x,S,p)insereazirul
xnirulSlapoziiap.

Concatenare

Subsir
conversii
ir de caractere
i

-conversie int, long, double la sir de caractere


int i=234; long j=1234567, double d=234.6;
itoa(i), ltoa(j), ecvt(d)

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