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:
- inizializzi a zero un complesso Z;
- 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;
- esca dal ciclo al verificarsi (anche) di una (sola) di queste eventualità:
- il modulo di Z sia diventato maggiore di 2;
- siano state effettuate già N iterazioni del ciclo (N è il secondo parametro della funzione);
- 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:
- 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)...))); - 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...);
- 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.
- 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:
Posta un commento