venerdì, novembre 17, 2006

compiti

A/ Scrivere una classe che implementi il campo dei numeri complessi. In particolare implementi almeno:
  • il creatore void, il creatore con un argomento float/double (la parte reale), il creatore con due argomenti float/double (parte reale e immaginaria), il copy-constructor (costruttore con argomento complesso);
  • l'overload degli operatori aritmetici elementari (somma, sottrazione, meno-unario, prodotto, divisione);
  • i metodi per le operazioni più elementari sui numeri complessi (coniugio, modulo, modulo-quadro, fase...)
ed eventualmente
  • l'overload degli operatori in notazione compatta (+=, -=, *=, /=).

B/
Scrivere una funzione (non un metodo della classe complessi!!!)
int RunOut(complesso C, int N);
che si comporti nel seguente modo:
  1. inizializzi a zero un complesso Z;
  2. imposti un ciclo al cui interno il valore di tale complesso Z venga sostituito dal suo quadrato aumentato di C (il primo argomento della funzione), ovvero esegua: Z = Z*Z + C;
  3. esca dal ciclo al verificarsi (anche) di una (sola) di queste eventualità:
    1. il modulo di Z sia diventato maggiore di 2;
    2. siano state effettuate già N iterazioni del ciclo (N è il secondo parametro della funzione);
  4. una volta fuori dal ciclo, la funzione restituisca il numero di cicli effettuati (che dunque non potrà superare N, e sarà minore se il modulo di Z avrà superato il valore 2).

C/ Scrivere un programma principale che, facendo uso della classe dei numeri complessi e della funzione di cui al punto B, si comporti nel seguente modo:
  1. chieda all'utente di specificare un intervallo rettangolare I del piano complesso (traduco: chieda all'utente di specificare due numeri complessi z1 e z2 da considerare rispettivamente l'estremo superiore-sinistro e inferiore-destro di tale intervallo... (traduco ancora: chieda all'utente di specificare la parte reale e la parte immaginaria di tali due numeri complessi... (è chiaro, no? l'intervallo del piano di Argand-Gauss I è costituito da tutti quei numeri z tali che Re(z) è compreso fra Re(z1) e Re(z2) e Im(z) è compreso fra Im(z1) e Im(z2)...)));
  2. consideri tutti i numeri complessi c corrispondenti alle intersezioni di una griglia rettangolare omogenea in questo intervallo (chiedendo, ad esempio, all'utente di specificare il numero di suddivisioni di tale intervallo...);
  3. Per ciascuno di questi punti (scorrendoli, ad esempio, con un (doppio) ciclo...), il programma calcoli il valore della funzione RunOut passando appunto ciascun punto c come primo argomento C e il valore 100 come secondo argomento N.
  4. disegni a video una rappresentazione ASCII dell'intervallo I in cui ogni punto c per cui il valore di RunOut è pari a 100 venga rappresentato con una "M" e tutti gli altri (indifferentemente dal loro valore) con una "O";

Nessun commento: