POO – Laborator 1

Dezvoltarea programelor. Scrierea functiilor membru (metodelor). Introducere in programarea Java

 

1.1. Descrierea laboratorului

 

In aceasta lucrare de laborator vor fi acoperite urmatoarele probleme:

 

- Instalarea kitului de dezvoltare Java (jdk) (include si configurarea variabilelor de mediu PATH si CLASSPATH si a tipurilor de fisiere .java) – link extern

 

- Etapele dezvoltarii unui program Java (conceperea, editarea – scrierea comentariilor si a codului, compilare, lansarea programului in interpretor, depanarea) – link extern

 

- Studiu de caz: programul Salut.java

 

- Utilizarea script-urilor (fisiere batch) pentru simplificarea dezvoltarii programelor Java

 

- Depanarea programelor Java (creare de erori, urmarirea efectului, interpretarea mesajelor)

 

- Modificarea programelor Java (modificarea functionalitatii, adaugarea unor noi functionalitati)

 

- Studiu de caz: programul Salut.javalink extern

 

            - Program de calcul al unui polinom

 

- Teme de casa

                                

1.2. Dezvoltarea unui program Java. Studiu de caz: programul Salut.java

1.2.1. Conceperea si editarea programului Salut.java

 

O cale de a incepe conceperea programelor simple este de a crea un asa numit pseudocod, adica o descriere intr-un limbaj apropiat de cel natural a ceea ce trebuie sa faca programul. De exemplu:

 

 

clasa care ilustreaza elementele esentiale ale unui program Java, contine:

          metoda principala (punctul de intrare in program):

                  afiseaza pe ecran textul “Buna ziua”

 

Urmatorul pas poate fi transformarea acestor texte in comentarii.

 

1

2

3

4

5

6

7

8

9

10

11

  /** Clasa care ilustreaza elementele esentiale ale unui program Java.

   *  Trebuie sa fie publica pentru ca are metoda principala.

   */

 

    /** Metoda principala (punct de intrare in program).

     *  Este prima metoda executata de JVM (Java Virtual Machine).

     *  Primeste ca parametri argumentele din lina de comanda.

     *  Nu returneaza nici o valoare. Trebuie sa fie ‘public static’

     */

 

      // Corpul metodei afiseaza textul "Buna ziua" pe ecran

In continuare, se pot utiliza pasi succesivi in care se adauga codul Java, pornind de la nivelul cel mai inalt (urmand o strategie top-down – de la nivel inalt la nivel jos – prin detaliere):

 

- declaratia clasei:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

  /** Clasa care ilustreaza elementele esentiale ale unui program Java.

   *  Trebuie sa fie publica pentru ca are metoda principala.

   */

  public class Salut {

 

    /** Metoda principala (punct de intrare in program).

     *  Este prima metoda executata de JVM (Java Virtual Machine).

     *  Primeste ca parametri argumentele din lina de comanda.

     *  Nu returneaza nici o valoare. Trebuie sa fie ‘public static’

     */

 

      // Corpul metodei afiseaza textul "Buna ziua" pe ecran

  }

 

- declaratiile atributelor si metodelor (in cazul nostru metoda main()):

 

1

2

3

4

5

6

7

8

9

10

11

12

13

  /** Clasa care ilustreaza elementele esentiale ale unui program Java.

   *  Trebuie sa fie publica pentru ca are metoda principala.

   */

  public class Salut {

    /** Metoda principala (punct de intrare in program).

     *  Este prima metoda executata de JVM (Java Virtual Machine).

     *  Primeste ca parametri argumentele din lina de comanda.

     *  Nu returneaza nici o valoare. Trebuie sa fie ‘public static’

     */

    public static void main(String[] args) {

      // Corpul metodei afiseaza textul "Buna ziua" pe ecran

    }

  }

 

 

- si corpurile metodelor (in cazul nostru metoda main()):

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

  /** Clasa care ilustreaza elementele esentiale ale unui program Java.

   *  Trebuie sa fie publica pentru ca are metoda principala.

   *  @author  Eduard C. Popovici

   */

  public class Salut {

    /** Metoda principala (punct de intrare in program).

     *  Este prima metoda executata de JVM (Java Virtual Machine).

     *  Primeste ca parametri argumentele din lina de comanda.

     *  Nu returneaza nici o valoare. Trebuie sa fie ‘public static’

     */

    public static void main(String[] args) {

      System.out.println("Buna ziua"); // Afisarea unui text pe ecran

    }

  }

 

Daca inlaturam comentariile, codul ramas este urmatorul:

 

1

2

3

4

5

  public class Salut {

    public static void main(String[] args) {

      System.out.println("Buna ziua");

    }

  }

 

In laborator: Se va deschide editorul Notepad, si se va edita codul de mai sus (fara comentarii) intr-un fisier salvat cu numele Salut.java in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria. (exemplu: 421E sau 454D sau 454 E).

 

 

1.2.2. Compilarea programului Salut.java

 

Daca se presupune utilizarea compilatorului Java din linia de comanda (consola de intrare), atunci trebuie executata urmatoarea comanda, in directorul in care se afla fisierul Salut.java:

 

directorcurent> javac Salut.java

 

In urma acestei comenzi, compilatorul Java va crea genera codul de octeti corespunzator intr-un fisier cu numele Salut.class, in directorul in care se afla si fisierul Salut.java.

 

In laborator: Se va compila codul sursa in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria.

 

1.2.3. Lansarea programului Salut.java

 

Pentru executia programului, acesta trebuie lansat in interpretor, folosind comanda:

 

directorcurent> java Salut

 

Rezultatul va fi aparitia mesajului Buna ziua! pe ecranul monitorului.

 

In laborator: Se va lansa in executie codul de octeti in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria.

 

In final, pe ecran poate fi urmatoarea secventa de informatii:

directorcurent> javac Salut.java

 

directorcurent> java Salut

Buna ziua!

 

directorcurent>

 

1.2.4. Automatizarea dezvoltarii prin utilizarea unui fisier script

 

O simplificare a lansarii in executie a programului este crearea unui fisier script cu extensia .bat (in acelasi directorul cu sursa java), numit de exemplu Run_Salut.bat, cu urmatorul continut:

javac Salut.java

java Salut

pause

 

si lansarea lui in executie. Pe ecran se va obtine:

directorcurent> Run_Salut.bat

directorcurent> javac Salut.java

directorcurent> java Salut

Buna ziua!

directorcurent> pause

Press any key to continue...

 

In laborator: Se va crea fisierul script Run_Salut.bat cu continutul de mai sus. Se va executa scriptul prin dublu click, in Windows Explorer, pe numele fisierului.

 

1.2.5. Depanarea programului Salut.java

 

In laborator: Se vor produce urmatoarele erori si modificari in codul sursa (varianta de 5 linii, fara comentarii), se vor urmari efectele, si se vor face interpretari ale acestora:

 

Dupa fiecare modificare codul va fi recompilat (iar in caz de succes executat din nou), iar inaintea unei noi modificari va fi mai intai restabilit programul initial.

Raspunsurile la urmatoarele intrebari vor usura interpretarea rezultatelor :

            - Ce se afiseaza pe ecran?

- Ce fel de problema apare (eroare de compilare, exceptie in timpul executiei, niciuna)?

- Care este cauza probabila?

- Cat de sugestiv este mesajul care apare?

- Ce concluzii se pot trage?

 

I.          Se va elimina prima acolada (din linia 1)

 

            Exemplu de rezolvare: La compilare, pe ecran se afiseaza:

 

 

Salut.java:1: '{' expected

public class Salut

                  ^

1 error

 

            Problema: eroare de compilare. Cauza: compilatorul sesizeaza inexistenta acoladei deschise dupa numele clasei, acolada care marcheaza inceputul corpului clasei. Mesajul e destul de sugestiv incat sa ne permita corectarea rapida a erorii. Concluzii: …

 

II.        Se va elimina acolada din linia 2

 

            Exemplu de rezolvare: La compilare, pe ecran se afiseaza:

 

 

Salut.java:2: ';' expected

    public static void main(String[] args)

                                          ^

Salut.java:5: 'class' or 'interface' expected

}

^

Salut.java:6: 'class' or 'interface' expected

^

3 errors

 

            Problema: eroare de compilare. Cauza: compilatorul sesizeaza inexistenta acoladei deschise dupa numele metodei main, acolada care marcheaza inceputul corpului metodei. Prima parte a mesajului este utila pentru a corecta eroarea, dar restul mesajului poate produce confuzie in primul moment. Dupa corectarea erorii din linia doi, “erorile” 2 si 3 “dispar”. Concluzii: Apare un fenomen de “propagare a erorilor”, lipsa acoladei respective putand avea mai multe interpretari.

 

III.       Se va elimina simbolul punct si virgula (;) din linia 3

 

IV.       Se vor elimina parantezele drepte, [], din linia 2

 

V.        Se va elimina cuvantul cheie void (din linia 2)

 

VI.       Se va elimina cuvantul cheie static (din linia 2)

 

            Exemplu de rezolvare: Dupa compilare, in momentul executiei, pe ecran se afiseaza:

 

 

Exception in thread "main" java.lang.NoSuchMethodError: main

 

            Problema: situatie exceptionala (java.lang.NoSuchMethodError) in timpul executiei. Cauza: Masina Virtuala Java (JVM), cea care sta in spatele interpretorului java sesizeaza inexistenta unei metode Java cu semnatura completa:  public static void main(String[] args) Mesajul produce confuzie in primul moment, deoarece da impresia ca metoda nu exista, si nu sugereaza cauza situatiei exceptionale. Concluzii: Este strict necesara declararea metodei main() ca fiind de tip static. Este recomandabila retinerea simptomelor acestei situatii exceptionale!

 

VII.     Se vor inlocui ghilimelele cu apostroafe in linia 3

 

VIII.    Se va inlocui numele clasei System cu system in linia 3

 

IX.       Se va inlocui numele clasei Salut cu salut in linia 1

 

X.        Se va inlocui args din linia 2 cu cuvantul argumente

 

 

1.3. Scrierea si modificarea programelor Java. Studiu de caz: Program de calcul al unui polinom

 

1.3.1. Specificatia initiala (varianta cu valori prestabilite)

 

Sa se scrie un program Java numit Polinom0, care:

- creeaza un polinom cu grad prestabilit si coeficienti de valori prestabilite (1, 2, 3, 2, 1),

- afiseaza polinomul,

- calculeaza valoarea polinomului pentru o anumita valoare prestabilita a necunoscutei (2), si

- afiseaza aceasta valoare.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

  public class Polinom0 {

 

    public static void main(String[] args) {

      System.out.println("\nProgramul Polinom0 a fost lansat...\n");

 

      // Declararea si initializarea variabilei intregi numita gradPolinom,

      // care contine gradul polinomului, N=4

 

      // Crearea tabloului coeficientilor (de dimensiune N+1),

      // numit coeficienti, folosind valorile prestabilite : 1, 2, 3, 4, 5

 

      // Afisarea polinomului P(X)

      // - mai intai termenul liber Co

      // - apoi termenii Ci*X^i, unde i=1,N

 

      // Declararea si initializarea variabilei intregi numita necunoscuta,

      // care contine valoarea necunoscutei, X=2

 

      // Afisarea valorii necunoscutei (X)

 

      // Declararea si initializarea variabilei intregi numita polinom,

      // care contine valoarea polinomului, P(X)

 

      // Calculul polinomului P(X) = suma(Ci * X^i), unde i=0,N

         // - actualizarea valorii polinomului

         // - actualizarea valorii X^i, unde i=1,N

 

      // Afisarea valorii polinomului P(X)

    }

  }

 

 

Observatii:

 

- pentru a crea un tablou se foloseste sintaxa:

 

      // Crearea unui tablou de 7 valori intregi, varianta scurta

      int[] tab = { 1, 2, 3, 4, 3, 2, 1 };

 

- pentru a afisa valorile din tabloul tab poate fi folosita urmatoarea secventa de cod:

 

      System.out.print("elementele tabloului sunt: " + tab[0]);

      for (int i=1; i<tab.length; i++) {

        System.out.print(", " + tab[i]);

      }

      System.out.println("\n");     

 

- formatul pentru afisarea polinomului (pentru gradul 4 si coeficientii 1, 2, 3, 4, 5) va fi:

 

P(X) = 1 + 2*X^1 + 3*X^2 + 4*X^3 + 5*X^4

 

In laborator: Se va completa codul cu instructiuni Java, se va salva intr-un fisier cu numele Polinom0.java, se va compila si executa programul. Link catre Polinom0.class.

 

In aceasta forma, la fiecare executie programul va genera aceleasi iesiri.

 

1.3.2. Program de calcul al unui polinom cu valori obtinute de la utilizator

 

Pornind de la programul Polinom0 sa se scrie un program numit Polinom1, care:

- creeaza un polinom cu grad si coeficienti avand valorile obtinute de la utilizator,

- afiseaza polinomul,

- calculeaza valoarea polinomului pentru o valoare a necunoscutei specificata de utilizator, si

- afiseaza aceasta valoare.

 

Programul Polinom1 reprezinta o generalizare a programului anterior (versiune mai flexibila), deoarece gradul polinomului, valorile coeficientilor si necunoscutei sunt obtinute de la utilizator.

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

  import javax.swing.JOptionPane;

 

  public class Polinom1 {

 

    public static void main(String[] args) {

      System.out.println("Programul Polinom1 a fost lansat...");

 

      // Declararea variabilei intregi gradPolinom pt. gradul polinomului, N

      // Obtinerea gradului polinomului de la utilizator, conversie String-int

 

      // Declararea si crearea tabloului coeficientilor, numit coeficienti

 

      // Obtinerea de la utilizator a coeficientilor Ci, unde i=0,N

 

      // Afisarea polinomului P(X)

      // - mai intai termenul liber Co

      // - apoi termenii Ci*X^i, unde i=1,N

 

      // Declararea variabilei intregi necunoscuta

      // Obtinerea valorii necunoscutei de la utilizator, conversie String-int

 

      // Afisarea valorii necunoscutei (X)

 

      // Declararea si initializarea variabilei intregi numita polinom,

      // care contine valoarea polinomului, P(X)

 

      // Calculul polinomului P(X) = suma(Ci * X^i), unde i=0,N

         // - actualizarea valorii polinomului

         // - actualizarea valorii X^i, unde i=1,N

 

      // Afisarea valorii polinomului P(X)

 

      System.exit(0); // Inchiderea interfetei grafice

    }

  }

 

Observatii:

 

- pentru a obtine de la utilizator o valoare de tip sir de caractere (String) se foloseste sintaxa:

 

      String nume = JOptionPane.showInputDialog("Introduceti numele"));

 

- pentru a o valoare de la String la int se foloseste sintaxa:

 

      int numarStudenti = Integer.parseInt("25");

 

- evident, combinand cele sintaxe se poate scrie:

 

      int numarStudenti = Integer.parseInt(JOptionPane.showInputDialog(

                                   "Introduceti numarul studentilor din grupa"));

 

- pentru a declara si crea (aloca memorie pentru) un tablou de intregi se foloseste sintaxa:

 

      int[] noteStudenti = new int[numarStudenti];

 

- pentru a popula (atribui valori initiale) un tablou de intregi se foloseste sintaxa:

 

      for (int i=0; i<noteStudenti.length; i++) {

         noteStudenti[i] = Integer.parseInt(JOptionPane.showInputDialog(

                                   "Introduceti nota studentului cu numarul " + i));

      }

 

In laborator: Se va completa codul cu instructiuni Java, se va salva intr-un fisier cu numele Polinom1.java, se va compila si executa programul. Link catre Polinom1.class.

 

In aceasta forma, la fiecare executie programul poate genera alte iesiri, in functie de valorile de intrare.

 

1.3.3. Program de calcul al unui polinom (varianta cu delegare functionala)

 

Pornind de la programul Polinom1 sa se scrie codul unei clase Java numita Polinom2, a carei structura interna contine:

 

- o metoda (declarata public static) numita obtineGrad(), care obtine de la utilizator valoarea gradului polinomului, si o returneaza ca intreg de tip int,

 

- o metoda (declarata public static) numita stabilesteCoeficienti(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, creaza un nou tablou al coeficientilor (cu gradPolinom +1 elemente), obtine de la utilizator valori pentru coeficientii polinomului si populeaza cu ei tabloul nou creat, apoi returneaza taboul de tip int[] creat,

 

- o metoda (declarata public static) numita obtineNecunoscuta(), care obtine de la utilizator valoarea necunoscutei, si o returneaza ca intreg de tip int,

 

- o metoda (declarata public static) numita afisarePolinom(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, si un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si afiseaza polinomul corespunzator valorilor primite,

 

- o metoda (declarata public static) numita valoarePolinom(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si un parametru intreg de tip int, numit necunoscuta, reprezentand necunoscuta, si calculeaza valoarea polinomului corespunzatoare valorilor primite si o returneaza ca intreg de tip int,

 

- o metoda principala, de test, care:

- deleaga catre metoda obtineGrad() obtinerea valorii gradului polinomului,

- deleaga catre metoda stabilesteCoeficienti() stabilirea valorilor coeficientilor polinomului,

- deleaga catre metoda afisarePolinom() afisarea polinomului,

- deleaga catre metoda obtineNecunoscuta() obtinerea valorii necunoscutei,

- afiseaza valoarea necunoscutei,

- deleaga catre metoda valoarePolinom() calculul valorii polinomului,

- afiseaza valoarea polinomului.

 

In laborator: Se va completa codul sursa cu instructiuni Java, se va salva intr-un fisier cu numele Polinom2.java, se va compila si executa programul. Link catre Polinom2.class.

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

  import javax.swing.JOptionPane;

  public class Polinom2 {

 

    // Metoda care obtine de la utilizator gradul polinomului

    public static int obtineGrad() {

      // Obtinerea de la utilizator a gradului polinomului

 

      // Returnarea valorii gradului polinomului

    }

 

    // Metoda care obtine de la utilizator coeficientii polinomului

    public static int[] stabilesteCoeficienti(int gradPolinom) {

      // Declararea si crearea tabloului coeficientilor, numit coeficienti

 

      // Obtinerea de la utilizator a coeficientilor Ci, unde i=0,N

 

      // Returnarea tabloului coeficientilor

    }

 

    // Metoda care afiseaza polinomul P(X)

    public static void afisarePolinom(int gradPolinom, int[] coeficienti) {

      // Afisarea polinomului P(X)

      // - mai intai termenul liber Co

      // - apoi termenii Ci*X^i, unde i=1,N

    }

 

    // Metoda care obtine de la utilizator valoarea necunoscutei

    public static int obtineNecunoscuta() {

      // Obtinerea de la utilizator a valorii necunoscutei

 

      // Returnarea valorii necunoscutei

    }

 

    // Metoda care calculeaza valoarea polinomului pt o valoare a necunoscutei

    public static int valoarePolinom(int gradPolinom, int[] coeficienti,

                              int necunoscuta) {

      // Declararea si initializarea variabilei intregi numita polinom,

      // care contine valoarea polinomului, P(X)

 

      // Calculul polinomului P(X) = suma(Ci * X^i), unde i=0,N

         // - actualizarea valorii polinomului

         // - actualizarea valorii X^i, unde i=1,N

 

      // Returnarea valorii polinomului

    }

 

    // Metoda principala. Utilizata pentru testarea celorlalte metode.

    public static void main(String[] args) {

      // Apelul metodei care obtine de la utilizator gradul polinomului

 

      // Apelul metodei care obtine de la utilizator coeficientii polinomului

 

      // Apelul metodei care afiseaza polinomul

 

      // Apelul metodei care obtine o valoare a necunoscutei

      // Afisarea valorii necunoscutei

 

      // Apelul metodei care calculeaza polinomul pentru necunoscuta data

      // Afisarea valorii polinomului

      System.exit(0); // Inchiderea interfetei grafice

    }

  }

 

De reflectat:

 

1. Ce alte metode ar putea fi utile pentru lucrul cu polinomul?

 

2. Cum ar trebui modificat programul pentru a putea efectua scenariul in mod repetat?

 

In laborator:

 

1. Se va adauga o metoda (declarata public static) numita toString(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, si un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si care returneaza polinomul sub forma de sir de caractere (obiect de tip String) in formatul (pentru grad 4 si coeficienti 1,2,3,4,5):

 

P(X) = 1 + 2*X^1 + 3*X^2 + 4*X^3 + 5*X^4

 

2. Se va modifica programul Polinom2 astfel incat sa utilizeze metoda toString() pentru a afisa forma generala a polinomului (in loc sa utilizeze metoda afisarePolinom() in acest scop).

 

3. Se va crea o clasa noua, UtilizarePolinom2 care sa utilizeze metodele clasei Polinom2 pentru calculul unui polinom (delegare catre metodele altei clase).

 

4. Se va modifica programul Polinom2 pentru a putea efectua scenariul in mod repetat.

 

1.4. Referinte                                                      

 

Bruce Eckel, Thinking in Java, 3 rd ed. Rev. 4.0, http://www.faqs.org/docs/think_java/TIJ3_c.htm

(PDF: http://www.planetpdf.com/codecuts/pdfs/eckel/TIJ3.zip (beta), Zipped HTML and

source code: http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip)

Kevin Taylor, Java Progr. Tutorial, http://java.about.com/od/beginningjava/a/beginjavatutor.htm

Sun Microsystems, The Java™ Tutorials, http://java.sun.com/docs/books/tutorial/java/TOC.html

(download : http://java.sun.com/docs/books/tutorial/information/download.html)

Sun Microsystems, J2SE 5.0 API Specification, http://java.sun.com/j2se/1.5.0/docs/api/index.html

Sun Microsystems, JDK™ 5.0 Documentation, http://java.sun.com/j2se/1.5.0/docs/index.html

 

1.5. Teme pentru acasa                                   

 

 

Tema de casa pentru data viitoare:

 

 

I. Sinteza (interpretarea) raporturilor de eroare obtinute prin modificarea programului Salut.java (scrisa pe hartie, nu tiparita la imprimanta).

 

II. Codurile sursa ale programelor Polinom0, Polinom1 si Polinom2 completate.

 

 

De reflectat, pentru examen, asupra programelor din paragrafele urmatoare:

 

1. Cum trebuie modificat programul pentru a lucra cu valori specificate de utilizator in

timpul executiei?

 

2. Cum poate fi realizata delegarea functionala?

 

3. Cum poate fi realizata delegarea catre o alta clasa (metodele altei clase)?

 

4. Cum trebuie modificat programul pentru a putea efectua scenariul in mod repetat?

 

 

1.5.1. Program de calcul al numarului de aparitii ale fiecarei valori intr-o multime (histograma)

 

Programul NumarAparitii0.java creaza un tablou care contine o multime de valori prestabilite (cea minima este 1, cea maxima prestabilita), afiseaza elementele tabloului, calculeaza si stocheaza intr-un tablou numarul de aparitii ale fiecarei valori in multime (histograma), si afiseaza elementele acestui tablou.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

  public class NumarAparitii0 {

 

    public static void main(String[] args) {

 

      System.out.println("\n  Program NumarAparitii (histograma) \n");

 

      // Valoarea maxima (M) (valoarea minima este 1)

      int maxim = 5;

 

      // Numarul de valori (N)

      int numarValori = 20;

 

      // Crearea tabloului (de dimensiune N) valorilor

      int[] valori = { 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 

                       3, 4, 5, 4, 3, 2, 1, 2, 3, 4 };

 

      // Afisarea tabloului initial

      System.out.print("\nValorile testate: ");

 

      for (int i=0; i<numarValori; i++) {

        System.out.print(valori[i] + " ");

      }

      System.out.println("\n");

 

      // Crearea tabloului (de dimensiune M) cu numarul de aparitii

      int[] numarAparitii = new int[maxim];

 

      // Determinarea numarul de aparitii ale fiecarei valori de la 1 la M

      for (int i=0; i<numarValori; i++) {

        numarAparitii[valori[i]-1]++;

      }

 

      // Afisarea tabloului cu numarul de aparitii

      for (int i=0; i<maxim; i++) {

        System.out.println("Valoarea  " + (i+1) +

                           " apare de " + numarAparitii[i] + " ori");

      }

      System.out.println();

    }

  }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.5.2. Program de cautare a unor cuvintelor cheie in texte (siruri de caractere) date

 

Programul CautareCuvantCheie0.java creaza un tablou care contine siruri de caractere prestabilite si un tablou care contine cuvinte cheie prestabilite, afiseaza elementele tabloului, pentru fiecare sir de caractere si fiecare cuvant cheie determina daca si unde se afla cuvantul in sir, si informeaza utilizatorul cu privire la cuvintele gasite si pozitia lor in siruri.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

  import java.io.*;

  import java.util.*;

 

  public class CautareCuvantCheie0 {

 

    public static void main(String[] args) throws IOException {

 

      String[] texteAnalizate = {

      "The string tokenizer class allows an application" ,

      "to break a string into tokens." ,

      "The tokenization method is much simpler than" ,

      "the one used by the StreamTokenizer class. " ,

      "The StringTokenizer methods do not distinguish" ,

      "among identifiers, numbers, and quoted strings," ,

      "nor do they recognize and skip comments. " ,

      "The set of delimiters (the characters that separate tokens)" ,

      "may be specified either at creation time or on a per-token basis." };

     

      String[] cuvinteCheie = { "string" , "token" };

     

      // Pentru toate textele analizate

      for (int i=0; i<texteAnalizate.length; i++) {

 

        // Pentru toate cuvintele cheie cautate

        for (int j=0; j<cuvinteCheie.length; j++) {

 

          // Daca un anumit cuvant cheie este gasit intr-un anumit text

          // Varianta cu String.indexOf()

          if ( texteAnalizate[i].indexOf(cuvinteCheie[j]) > -1 ) {

 

            // Informeaza utilizatorul (indicand si pozitia)

            System.out.println("Cuvantul cheie ''" + cuvinteCheie[j] +

               "'' a fost gasit in textul ''" + texteAnalizate[i] +

               "'' pe pozitia " +

               (texteAnalizate[i].indexOf(cuvinteCheie[j]) + 1) + "\n");

          }

         

          // Daca un anumit cuvant cheie este gasit intr-un anumit text

          // Varianta cu String.split()

          if ( texteAnalizate[i].split(cuvinteCheie[j]).length != 1 ) {

 

            // Informeaza utilizatorul

            System.out.println("Cuvantul cheie ''" + cuvinteCheie[j] +

               "'' a fost gasit in textul ''" + texteAnalizate[i] + "''\n");

          }

        }

      }

    }

  }

 

 

 

 

1.5.3. Program de calcul al unor statistici asupra unor texte (siruri de caractere) date

 

Programul StatisticiText0.java creaza un tablou care contine siruri de caractere prestabilite si un tablou care contine cuvinte cheie prestabilite, afiseaza elementele tabloului, pentru fiecare sir de caractere si fiecare cuvant cheie determina daca si unde se afla cuvantul in sir, si informeaza utilizatorul cu privire la cuvintele gasite si pozitia lor in siruri.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

  import java.io.*;

  import java.util.*;

 

  public class StatisticiText0 {

 

    public static void main(String[] args) throws IOException {

 

      String textAnalizat =

       "The string tokenizer class allows an application to break a string" +

       " into tokens. The tokenization method is much simpler than the one" +

       " used by the StreamTokenizer class. The StringTokenizer methods do" +

       " not distinguish among identifiers, numbers, and quoted strings," +

       " nor do they recognize and skip comments. The set of delimiters" +

       " (the characters that separate tokens) may be specified either at" +

       " creation time or on a per-token basis.";

     

      String[] cuvinte = textAnalizat.split(" ");

    

      // Numarul de cuvinte

      System.out.println("  Textul:\n\n" + textAnalizat + "\n\n  contine " +

                         cuvinte.length + " cuvinte:");

 

      // Cuvintele

      for (int i=0; i<cuvinte.length; i++) {

        System.out.print("\t" + cuvinte[i]);

      }

      System.out.println();

 

      // Propozitiile

      System.out.println("\n  Textul contine urmatoarele propozitii:\n");

 

      String propozitie = null;

     

      int p = 0;

 

      String text = textAnalizat;

 

      for (int f = 0; (f = text.indexOf(".")) > -1; p++) {

        propozitie = text.substring(0, f);

        System.out.println(propozitie + ".\n");

        text = text.substring(f+1, text.length());

        if (text.indexOf(" ") == 0) {

          text = text.substring(1, text.length());

        }

      }

     

      // Numarul de propozitii

      System.out.println("\n  In total sunt " + p + " propozitii:\n");    

    }

  }