Exercitii

Se recomanda sa se lucreze in echipa: fiecare membru a echipei va scrie programul pentru o clasa sau pentru unele din metodele clasei, dupa care se vor asambla aceste module pentru a obtine aplicatia solicitata. In consecinta, fiecare student poate folosi si programele scrise de colegi, cu conditia sa delimiteze clar care este contributia lui.

1. Se va elabora programul clasei Complex, respectand urmatoarea specificatie:

    Conceptual orice instanta a clasei Complex este un numar complex z=a+bi in care a si b sunt numere reale, care reprezinta respectiv partea reala si partea imaginara a numarului complex z. Numarul complex se caracterizeaza, de asemenea, prin modulul sau |z|=sqrt(a*a+b*b) si prin argumentul arg(z)=arctg(b/a). Asupra numerelor complexe se pot aplica operatiile de adunare, scadere, inmultire, impartire.

    Campuri:
    private double re - partea reala a numarului complex;
    private double im - partea imaginara a numarului complex;

    Constructori:
    public Complex() - se creeaza un nou numar complex cu partea reala si cea imaginara egale cu zero;
    public Complex(double a) - se creeaza un numar complex cu partea reala a si partea imaginara 0;
    public Complex(double re, double im) - creeaza un nou numar complex, fiind date partea reala re si partea imaginara im.

    Metode publice:
    public double real() - intoarce partea reala a numarului complex;
    public double imag() - intoarce partea imaginara a numarului complex;
    public double modul()  - intoarce modulul numarului complex;
    public double arg()  - intoarce argumentul numarului complex;
    public Complex plus(Complex z) - intoarce suma dintre acest numar complex si parametrul z;
    public Complex minus(Complex z) - intoarce diferenta dintre acest numar complex si parametrul z;
    public Complex inmultitCu(Complex z) - intoarce produsul dintre acest numar complex si parametrul z;
    public Complex impartitLa(Complex z) - intoarce catul impartirii acestui numar complex la parametrul z;
    public Complex laPuterea(int n) - intoarce acest numar complex ridicat la puterea intreaga n;
    public String toString() - intoarce un sir de caractere care contine acest numar complex pus sub forma (re+im*i) in care re si im sunt valorile numerice ale partii reale si partii imaginare a numarului complex;
    public static Complex complexValue(double mod, double arg) - intoarce un numar complex care are modulul mod si argumentul arg;
    public static Complex complexValue(String str) throws Exception - primeste ca argument un sir str care contine un numar complex sub forma (re+im*i), unde re si im sunt numere reale, verifica daca este corect sintactic si intoarce numarul complex corespunzator; daca sirul dat nu este corect, se genereaza o exceptie de eroare de sintaxa.

Clasa Complex va implementa interfata Serializable.

2. Se va elabora un program simplu de testare a clasei Complex (fara interfata grafica) in care se vor testa atat toate metodele acestei clase, cat si situatiile in care:
    - intr-o operatie binara, primul operand este complex, iar al doilea este real;
    - intr-o operatie binara, primul operand este real, iar al doilea este complex;
    - se calculeaza o expresie mai complicata, de exemplu, daca a, b si c sunt numere complexe, se calculeaza 2*(a+b)*c-a/c;
    - se salveaza intr-un fisier mai multe numere complexe, apoi se citesc din fisier si se afiseaza (se vor folosi clasele ObjectOutputStream si ObjectInputStream).

3. Se va elabora un program cu interfata grafica de testare a clasei Complex, in care interfata permite atat introducerea operanzilor si alegerea operatiei,  cat si vizualizarea rezultatului

4. Se va scrie programul clasei Fractie, respectand urmatoarea specificatie:

Conceptual orice instanta a clasei Fractie este o fractie ordinara ireductibila, in care numaratorul si numitorul sunt numere de tip long, iar numitorul este pozitiv. Asupra fractiilor se pot aplica operatiile aritmetice de adunare, scadere, inmultire si impartire.

Clasa implementeaza interfata Comparable, deci instantele ei pot fi comparate dupa valoare.

Campuri:
    private long numarator, numitor;

Constructori:
    public Fractie() - construieste o fractie cu valoarea 0/1;
    public Fractie(long valoare) - construieste fractia valoare/1;
    public Fractie(long n1, long n2) - construieste o fractie, a carei valoare este egala cu n1/n2, dar este ireductibila; daca n2 este nul, este generata o exceptie.

Metode:
    public static long cmmdc(long n1, long n2) - intoarce cel mai mare divizor comun al numerelor n1 si n2 (se foloseste algoritmul lui Euclid);
    public double valoare() - intoarce valoarea fractiei, convertita in double;
    public long numarator() - intoarce numaratorul;
    public long numitor() - intoarce numitorul;
    public Fractie plus(Fractie f) - intoarce suma dintre aceasta fractie si fractia f;
    public Fractie minus(Fractie f) - intoarce diferenta dintre aceasta fractie si fractia f;
    public Fractie ori(Fractie f) - intoarce produsul dintre aceasta fractie si fractia f;
    public Fractie supra(Fractie f) - intoarce raportul dintre aceasta fractie si fractia f;
    public int compareTo(Object obj) - implementarea metodei cu acelasi nume a interfetei Comparable;
    public boolean equals(Fractie f) - verifica daca aceasta fractie este identica cu fractia f;
    public String toString() - intoarce fractia convertita intr-un sir de caractere, sub forma (numarator/numitor), unde numarator si numitor sunt valorile numerice corespunzatoare.

Clasa Fractie va implementa interfata Serializable.

5. Se va elabora o aplicatie cu interfata grafica pentru testarea clasei Fractie.

6. Se va scrie si se va testa programul pentru clasa Persoana, respectand urmatoarele specificatii:

Conceptual, instantele clasei persoana contin datele generale referitoare la o persoana oarecare.

Campuri:
    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() - intoarce numele;
    public String prenume() - intoarce prenumele;
    public String codNumeric() - intoarce codul numeric;
    public char sex() - intoarce sexul;
    public int anNastere() - intoarce anul nasterii.

Clasa persoana va implementa interfata Serializable.

6. Se va scrie un program in care se vor stoca intr-un fisier mai multe instante ale clasei Persoana, apoi se vor citi din fisier si se vor afisa. Se vor folosi clasele ObjectOutputStream si ObjectInputStream.

7. Se va elabora o aplicatie (preferabil cu interfata grafica), in care se ordoneaza prin diferite metode un tablou de numere reale, apoi se cauta diferite valori in tabloul ordonat.

8. Se va elabora o aplicatie (preferabil cu interfata grafica), in care se ordoneaza prin diferite metode un tablou de numere complexe, apoi se cauta diferite valori in tabloul ordonat;

9. Se va elabora o aplicatie (preferabil cu interfata grafica) in care se ordoneaza un tablou de fractii si apoi se cauta diferite valori in tabloul ordonat.



© Copyright 2001 - Severin BUMBARU, Universitatea "Dunarea de Jos" din Galati