Sunteți pe pagina 1din 3

1.2 NOIUNEA DE ALGORITM.

DEFINIII I PROPRIETI
Pentru rezolvarea unei probleme cu calculatorul electronic se ntocmete un algoritm. De cele mai
multe ori algoritmii se reprezint sub form de schem logic. O schem logic se elaboreaz, de regul,
n mai multe etape. La nceput se face o schi a schemei logice. Aceast schi se rafineaz ulterior pn
cnd se ajunge la forma final.
Noiunea de algoritm este o noiune matematic foarte veche. Cu toate acestea, o definiie unanim
acceptat a acestei noiuni nu a fost nc dat. Se cunosc definiii riguroase pentru cteva tipuri de
algoritmi. Dintre acestea amintim: funciile recursive, algoritmii normali ai lui Markov i mainile Turing.
Adesea se consider noiunea de algoritm ca o noiune primar. De cele mai multe ori se dau definiii de
lucru. Potrivit unei asemenea definiii, un algoritm este un sistem de reguli pe baza cruia se obine
soluia problemei, corespunztoare unui set de date iniiale, dup un numr finit de operaii numite pai.
Orice algoritm trebuie s aib o serie de proprieti. Cele mai importante proprieti sunt:
- Claritatea. Un algoritm trebuie s descrie cu precizie ordinea operaiilor care se vor efectua.
- Universalitatea. Un algoritm trebuie s poat fi aplicat oricrui set de date iniiale ale problemei pentru
care a fost ntocmit.
- Eficacitatea. Un algoritm trebuie s conduc la soluia problemei dup un numr finit de operaii.
Este posibil ca pentru rezolvarea unei probleme s existe mai muli algoritmi. n asemenea situaii, la
alegerea algoritmului se ine seama de diverse criterii. Dintre acestea menionm: viteza de calcul,
mrimea erorilor de calcul, spaiul de memorie intern a calculatorului necesar programului corespunztor
algoritmului, etc. Mrimea erorilor de calcul este important, n special, la algoritmii care au la baz
metode numerice. De cele mai multe ori, algoritmii care dau erori mici de calcul au o vitez redus.
Criteriul legat de volumul de memorie necesar este, de asemenea, un parametru important. Dac
algoritmul conduce la un program care nu ncape n memoria intern a calculatorului, atunci nu putem
opta pentru el. De regul, nu putem construi un algoritm care s satisfac toate criteriile de performan.
De aceea, se alege algoritmul care rspunde cel mai bine cerinelor care se impun.
7.2 DEFINIREA IRURILOR
De obicei, irurile se definesc printr-o instruciune de forma:
int v[ ]=new int[4];
Aceast instruciune precizeaz c v este un ir de tip int cu 4 componente. Numerotarea componentelor
irului ncepe cu 0. Ele se identific prin v[0], v[1], v[2] i v[3]. Prin urmare, numrul 4 din declaraia irului
v nu este indicele ultimei componente ci dimensiunea sa, adic numrul de componente. n figura 7.1
apar numele componentelor irului v.

Fig. 7.1
Dimensiunea unui ir v se poate determina printr-o instruciune de forma:
n=v.length;
n aceast instruciune, n este o variabil de tip int.
Ca exemplu, considerm programul:
class Siruri1{
public static void main(String args[ ]){
int v[ ]=new int[4];
System.out.println(Numar componente ir v="+v.length);
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]+",
v[3]="+v[3]);
}
}
Acest program l nregistrm n fiierul iruri1.java. Dup ce compilm programul i l lansm n execuie,
pe ecran se afieaz textul:
Numar componente ir v=4
v[0]=0, v[1]=0, v[2]=0, v[3]=0
Aa cum observm, toate componentele irului sunt iniializate cu 0. Ulterior putem s atribuim
elementelor tabloului diferite valori.
Ca exemplu, considerm programul:
class Siruri2{

public static void main(String args[ ]){


int v[ ]=new int[4];
System.out.println(Numar componente ir v=+v.length);
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]+",
v[3]="+v[3]);
v[0]=3; v[1]=5; v[2]=7; v[3]=4;
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]+",
v[3]="+v[3]);
}
}
Acest program l nregistrm n fiierul Siruri2.java. Dup ce compilm programul i l lansm n execuie
pe ecran se afieaz textul:
Numar componente ir v=4
v[0]=0, v[1]=0, v[2]=0, v[3]=0
v[0]=3; v[1]=5, v[2]=7, v[3]=4
irurile se pot defini i printr-o instruciune de forma:
int v[ ]=new int[m];
unde m este o variabil ntreag creia i s-a asociat n prealabil un numr natural mai mare strict dect 0.
n programul:
class Siruri3{
public static void main(String args[ ]){
int m=4; int v[ ]=new int[m];
System.out.println(Numar componente ir=+v.length);
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]+",
v[3]="+v[3]);
}
}
este declarat un ir folosind o instruciune n care dimensiunea irului se precizeaz printr-o variabil.
Acest program l nregistrm n fiierul iruri3.java. Dup ce compilm programul i l lansm n execuie
pe ecran se afieaz textul:
Numar componente ir v=4
v[0]=0, v[1]=0, v[2]=0, v[3]=0
n capitolul destinat schemelor logice am lucrat cu iruri de numere reale x 0, x1, x2, , xn formate din n+1
componente. Pentru a declara n programe iruri de acest fel, trebuie s folosim o instruciune de forma:
float x[ ]=new int[n+1];
Aadar, n declaraia unui ir trebuie s precizm numrul de elemente.
Este posibil ca irurile s se defineasc i printr-o instruciune de forma:
int v[ ]={3, 7, 5, 2}
Aceast instruciune definete un ir v de tip int cu 4 componente v[0], v[1], v[2] i v[3] crora li se
asociaz valorile 3, 7, 5 i, respectiv, 2. S observm c n acest caz dimensiunea tabloului nu se
definete explicit.
Ca exemplu, considerm programul:
class Siruri4{
public static void main(String args[ ]){
int v[ ]={3, 7, 5, 2}; System.out.println(Numar componente
ir=+v.length);
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]+",
v[3]="+v[3]);
}
}
Acest program l nregistrm n fiierul iruri4.java. Dup ce compilm programul i l lansm n execuie
pe ecran se afieaz textul:
Numar componente ir v=4
v[0]=3, v[1]=7, v[2]=5, v[3]=2
Valoarea maxim a indicilor care definesc componentele unui ir v nu trebuie s fie mai mare dect
v.length-1. Dac nu respectm aceast condiie, atunci, pe parcursul execuiei, n momentul n care se
folosete un element de tablou cu indicele mai mare dect v.length-1, interpretorul emite un mesaj de
eroare i abandoneaz execuia.
Ca exemplu, considerm programul :

class Siruri5{
public static void main(String args[ ]){
int v[ ]={2, 5, 4};
System.out.println(Numar componente ir v=+v.length);
System.out.print("v[0]="+v[0]); System.out.print(", v[1]="+v[1]);
System.out.print(", v[2]="+v[2]); System.out.println(" v[3]="+v[3]);
}
}
Acest program l nregistrm n fiierul Siruri5.java Dup ce compilm programul i l lansm n execuie
pe ecran se afieaz textul:
Numar componente ir v=3
v[0]=2, v[1]=5, v[2]=4
java.lang.ArrayIndexOutOfBoundsException:3
at Siruri5.main(Siruri5.java:6)
Explicaia mesajului de eroare aprut este simpl. n linia 8 a programului, linie care conine instruciunea
System.out.println(, v[3]=+v[3]); apare scris v[3], iar irul nu are dect trei componente, v[0], v[1] i v[2].
Mai exact, cnd interpretorul a ntlnit v[3] a lansat excepia ArrayIndexOutOfBoundsException i a
abandonat execuia.
n exemplele pe care le-am dat pn acum am avut iruri cu componente de tip standard. Este ns
posibil s lucrm i cu iruri ale cror elemente sunt obiecte. n mod implicit acestor elemente li se
atribuie obiectul null. Acest obiect nu trebuie confundat cu numrul 0.
Ca exemplu, considerm programul:
class Siruri6{
public static void main(String args[ ]){
Integer v[ ]=new Integer[3];
v[0]=new Integer(1); v[1]=new Integer(3); v[2]=new Integer(5);
System.out.println("Numar componente sir="+v.length);
System.out.println("v[0]="+v[0]+", v[1]="+v[1]+", v[2]="+v[2]);
}
}
irul v din acest exemplu are componente de tip Integer. Acest program l nregistrm n fiierul
Siruri6.java. Dup ce compilm programul i l lansm n execuie pe ecran se afieaz textul:
Numar componente sir=3
v[0]=1, v[1]=3, v[2]=5