Richiamo sulle regole relative ai numeri complessi, per lo svolgimento dell’ esercizio assegnato relativo a realizzare una classe Complesso I numeri complessi sono numeri composti da due parti una reale ed una complessa Essi sono frequentemente utilizzati in scienze applicate come l’elettronica e l’elettrotecnica. Una curiosità: il linguaggio Fortran, essendo un linguaggio orientato al calcolo scientifico, ha il tipo complesso implementato nativamente (ossia non c’è bisogno di programmarlo perchè già incluso nel linguaggio). I numeri complessi sono rappresentabili in forma cartesiana ( o altrimenti detta rettangolare) con x + i y (ove x è il valore della parte reale e y il valore della parte immaginaria), o con la forma esponenziale θi ρ.e Valgono le relazioni di base su i (unità nel campo complesso): sqrt(-1) = i da cui i2 = -1. Il passaggio dall’uno all’altro tipo di rappresentazione può essere fatto facilmente considerando che ρ è pari alla radice quadrata della parte reale del numero al quadrato più quella immaginaria del numero al quadrato (teorema di Pitagora). Questo valore corrisponde anche al cosiddetto modulo del numero complesso. L’angolo θ può essere determinato calcolando l’ arctangente del rapporto tra parte immaginaria e parte reale (θ = arctan(y / x) per x > 0 e θ = arctan(y / x) + ¶ per x < 0) Il calcolo inverso (da forma esponenziale a rettangolare), può essere effettuato considerando che le due componenti reale ed immamginaria, equivalgono in realtà a: x = ρ cos (θ) e y = ρ sin (θ) Le tipiche e più frequenti operazioni che possono essere compiute sui numeri complessi sono: opposto: determina il numero complesso opposto di un numero complesso; si effettua invertendo (negando), la componente reale e quella immaginaria del numero complesso, vale a dire l’opposto di x + i y risulterà –x – i y somma: determina il numero complesso risultato della somma di due complessi. L’operazione è piuttosto semplice, si tratta di sommare la parte reale con la parte reale e la parte immaginaria con la parte immaginaria; (a + i b) + (c + i d) = (a + c) + i (b + d); ciò ovviamente crea un nuovo complesso anch’esso con una parte reale ed immaginaria. sottrazione: la si pensi ed implementi come somma dell’opposto di un certo numero: (a + i b) - (c + i d) = (a + ib) – [(c + id))] = (a +ib) + (-c- id) (sottrazione tra le rispettive parti reali e le rispettive parti immaginarie) moltiplicazione: per implementarla la si concepisca come moltiplicazione tra due binomi algebrici (in analogia con (a+bx) (c + dx) ). Quindi dall’algebra (a+ ib) (c +id) = ac + i 2 bd + i ad + i bc = (ac – bd) + i (ad + bc) reciproco: il calcolo di 1 / (a + ib) risulta possibile con la considerazione che moltiplicando sopra e sotto il rapporto per (a – ib) si ottiene: (a – ib) / (a2 - (ib)2) = (a – ib) / (a2 - i2b2) = (a –ib) / (a2 + b2) = a / (a2 + b2) – i b / (a2 + b2). Si ricordi nel calcolo che i2 = -1. divisione: si implementi come la moltiplicazione del primo numero complesso con il reciproco dell’altro, ossia (a + ib) / (c + id) = (a + ib) x 1 / (c + id), sfruttando quindi i metodi precedentemente realizzati. Detto questo il compito assegnato era di implementare un classe Complesso che: mantenga una opportuna rappresentazione del numero complesso in questione all’interno dell’ oggetto (usualmente in forma cartesiana) Pagina 1 che permettesse di istanziare un numero complesso con opportuni costruttori (ad esempio un costruttore che acquisisca la parte immaginaria e complessa in forma rettangolare) che permetta eventualmente con un opportuno metodo anche di assegnare un valore complesso al numero. Si preveda un metodo che permetta di ricavare la parte reale del numero complesso ed analogamente si preveda un metodo capace di ricavare la parte complessa del numero Si prevedano metodi per calcolare il modulo del numero complesso e l’angolo relativo, ossia per ricavare la sua forma esponenziale. Si prevedano metodi che riescano ad implmentare le operazioni considerate prima in dettaglio, vale a dire il calcolo: o Opposto del numero complesso o Somma fra due numeri complessi o Sottrazione fra due numeri complessi o Moltiplicazione fra due nueri complessi o Reciproco di un numero complesso o Divisione di due numeri complessi Si tenga conto che questi ultimi metodi possono essere utilmente implementati in una forma del tipo Complesso opposto(), oppure come per la somma Complesso somma (Complesso c). Nel primo caso l’operazione ricava un nuovo complesso dal complesso corrente; nel secondo l’operazione di somma viene effettuata tra l’oggetto Complesso corrente (quello su cui è applicato il metodo), un ulteriore oggetto complesso (che sarà stato opportunamente creato ed inizializzato), e da luogo ad un ulteriore oggetto Complesso risultato della operazione. La creazione degli oggetto risultato di una operazione avverrà nei relativi metodi nella forma: Complesso opposto() { Complesso cr; ...... return(cr); } Nel caso di passaggio di un parametro di tipo oggetto (Complesso) si avrà la sintassi: Complesso somma(Complesso c) { Complesso cr; ...... return(cr); } Pagina 2