Exerciții

Se recomandă să se lucreze în echipă: fiecare membru al echipei va scrie programul pentru o clasă sau pentru unele din metodele clasei, după care se vor asambla aceste module pentru a obține aplicația solicitată. În consecință, fiecare student poate folosi și programele scrise de colegi, cu condiția să delimiteze clar care este contribuția lui.

1. Se va elabora programul clasei Complex, respectând urmatoarea specificație:

    Conceptual orice instanță a clasei Complex este un număr complex z=a+bi în care a și b sunt numere reale, care reprezintă respectiv partea reală și partea imaginară a numărului complex z. Numărul complex se caracterizează, de asemenea, prin modulul său |z|=sqrt(a*a+b*b) și prin argumentul arg(z)=arctg(b/a). Asupra numerelor complexe se pot aplica operațiile de adunare, scădere, înmulțire, împărțire.

    Campuri:
    private double re - partea reală a numărului complex;
    private double im - partea imaginară a numărului complex;

    Constructori:
    public Complex() - se creează un nou număr complex cu partea reală și cea imaginară egale cu zero;
    public Complex(double a) - se creează un număr complex cu partea reală  a și partea imaginară 0;
    public Complex(double re, double im) - creează un nou număr complex, fiind date partea reală re și partea imaginară im.

    Metode publice:
    public double real() - întoarce partea reală a numărului complex;
    public double imag() - întoarce partea imaginară a numărului complex;
    public double modul()  - întoarce modulul numărului complex;
    public double arg()  - întoarce argumentul numărului complex;
    public Complex plus(Complex z) - întoarce suma dintre acest număr complex și parametrul z;
    public Complex minus(Complex z) - întoarce diferenta dintre acest număr complex și parametrul z;
    public Complex inmultitCu(Complex z) - întoarce produsul dintre acest număr complex și parametrul z;
    public Complex impartitLa(Complex z) - întoarce câtul împărțirii acestui număr complex la parametrul z;
    public Complex laPuterea(int n) - întoarce acest număr complex ridicat la puterea întreagă n;
    public String toString() - întoarce un șir de caractere care conține acest număr complex pus sub forma (re+im*i) în care re si im sunt valorile numerice ale părții reale și părții imaginare a numărului complex;
    public static Complex complexValue(double mod, double arg) - întoarce un număr complex care are modulul mod si argumentul arg;
    public static Complex complexValue(String str) throws Exception - primește ca argument un șir str care conține un număr complex sub forma (re+im*i), unde re si im sunt numere reale, verifică dacă este corect sintactic și întoarce numărul complex corespunzător; dacă șirul dat nu este corect, se generează o excepție de eroare de sintaxă.

Clasa Complex va implementa interfața Serializable.

2. Se va elabora un program simplu de testare a clasei Complex (fără interfață grafică) în care se vor testa atât toate metodele acestei clase, cât și situațiile în care:
    - într-o operație binară, primul operand este complex, iar al doilea este real;
    - într-o operatie binară, primul operand este real, iar al doilea este complex;
    - se calculează o expresie mai complicată, de exemplu, dacă a, b si c sunt numere complexe, se calculează 2*(a+b)*c-a/c;
    - se salvează într-un fișier mai multe numere complexe, apoi se citesc din fișier și se afisează (se vor folosi clasele ObjectOutputStream si ObjectInputStream).

3. Se va elabora un program cu interfața grafică de testare a clasei Complex, în care interfața permite atât introducerea operanzilor și alegerea operației,  cât și vizualizarea rezultatului

4. Se va scrie programul clasei Fractie, respectând urmatoarea specificație:

Conceptual orice instantă a clasei Fractie este o fracție ordinară ireductibilă, în care numărătorul și numitorul sunt numere de tip long, iar numitorul este pozitiv. Asupra fracțiilor se pot aplica operațiile aritmetice de adunare, scădere, înmulțire și împărțire.

Clasa implementează interfața Comparable, deci instanțele ei pot fi comparate după valoare. Se implementează, de asemenea, interfața Serializable.

Câmpuri:
    private long numarator, numitor;

Constructori:
    public Fractie() - construiește o fracție cu valoarea 0/1;
    public Fractie(long valoare) - construiește fracția valoare/1;
    public Fractie(long n1, long n2) - construiește o fracție, a carei valoare este egala cu n1/n2, dar este ireductibilă; dacă n2 este nul, este generată o exceptie.

Metode:
    public static long cmmdc(long n1, long n2) - întoarce cel mai mare divizor comun al numerelor n1 si n2 (se foloseste algoritmul lui Euclid);
    public double valoare() - întoarce valoarea fracției, convertită în double;
    public long numarator() - întoarce numărătorul;
    public long numitor() - întoarce numitorul;
    public Fractie plus(Fractie f) - întoarce suma dintre această fracție și fracția f;
    public Fractie minus(Fractie f) - întoarce diferența dintre această fracție și fracția f;
    public Fractie ori(Fractie f) - întoarce produsul dintre această fracție și fracția f;
    public Fractie supra(Fractie f) - întoarce raportul dintre această fracție și fracția f;
    public int compareTo(Object obj) - implementarea metodei cu același nume a interfeței Comparable;
    public boolean equals(Fractie f) - verifică dacă această fracție este identică cu fracția f;
    public String toString() - întoarce fracția convertita într-un șir de caractere, sub forma (numarator/numitor), unde numarator și numitor sunt valorile numerice corespunzătoare.
 

5. Se va elabora o aplicație cu interfață grafică pentru testarea clasei Fracție.

6. Se va scrie și se va testa programul pentru clasa Persoana, respectând urmatoarele specificații:

Conceptual, instantele clasei Persoana conțin datele generale referitoare la o persoană oarecare.

Câmpuri:
    private String nume, prenume, cod_numeric;
    private char sex;
    private int an_nastere;
Constructor:
    public Persoana(String nume, String prenume, char sex, int an_nastere, String cod_numeric)

Metode:
    public String nume() - întoarce numele;
    public String prenume() - întoarce prenumele;
    public String codNumeric() - întoarce codul numeric;
    public char sex() - întoarce sexul;
    public int anNastere() - întoarce anul nașterii.

Clasa Persoana va implementa interfața Serializable.

6. Se va scrie un program în care se vor stoca într-un fișier mai multe instanțe ale clasei Persoana, apoi se vor citi din fișier și se vor afișa. Se vor folosi clasele ObjectOutputStream și ObjectInputStream.

7. Se va elabora o aplicație (preferabil cu interfață grafică), în care se ordonează prin diferite metode un tablou de numere reale, apoi se caută diferite valori in tabloul ordonat.

8. Se va elabora o aplicație (preferabil cu interfață grafică), în care se ordonează prin diferite metode un tablou de numere complexe, apoi se caută diferite valori în tabloul ordonat;

9. Se va elabora o aplicație (preferabil cu interfață grafică) în care se ordonează un tablou de fracții și apoi se caută diferite valori în tabloul ordonat.



© Copyright 2001 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați