home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca
 
NUMERI COMPLESSI IN LINGUAGGIO DI PROGRAMMAZIONE C tipo: livello:
Numeri complessi in linguaggio di programmazione C, sudduviso per funzioni.
 
 



 

 

Numeri complessi in C


Buongiorno a tutti, il progetto che inserisco oggi, più che un progetto, è un file di programmazione che serve a gestire i numeri complessi nel linguaggio C. Il file completo che verrà inserito alla fine della pagina è composto da molte funzioni che servono per effettuare tutti i conti dei numeri complessi. L'obiettivo di questo post è presentare queste funzioni affinchè possano essere utilizzate in progetti di diverse nature, come magari una macchina con movimentazione su due assi e controllate da PC. Verrano spiegate tutte le funzioni una alla volta, ma prima di tutto, la definizione di numero complesso, che in C non è contemplata. Queste funzioni possono essere copiate ed utilizzate in qualsiasi vostro programma.

Il compilatore utilizzato è:        dev-c++ 4.9.7.0

 

Definizione di un nuovo tipo di dato...

Come già accennato, il linguaggio di programmazione non contempla il tipo di dato "numero complesso", quindi dobbiamo crearlo e lo definiamo così:

typedef struct {float x; float y;} nC;

Adesso nC è un nuovo tipo di dato, come lo è int, float, char etc.

Per accedere a tale dato scriviamo :

nC numero;              //DICHIARAZIONE DI UNA VARIABILE DI NOME NUMERO, DI TIPO nC (NUMERO COMPLESSO).

numero.x=4;             //la parte reale di numero vale 4.

numero.y=5              //la parte immaginaria di numero vale 5.

 

Le dichiarazioni delle funzioni sono queste:

void printc(nC);
nC inserisci();
float absmio(float);
nC somma(nC, nC);
nC coniugato(nC);
float modulo(nC);
float fase (nC);
nC moltiplicazione(nC, nC);
nC divisione(nC, nC);
nC trigalg (float, float);

1-La funzione printc serve per stampare a schermo un numero complesso ed essa non ritorna niente.
2-La funzione inserisci serve per asegnare un valore complesso ad una variabile complessa, essa ritorna una struct di tipo nC. es.:
nC numero;
numero=inserisci();
(una interfaccia grafica interrogherà l'utente per inserire la parte reale ed immaginaria del numero).


3-La funzione abs ritorna il valore assoluto di un INT o FLOAT.
4-La funzione somma riceve in ingresso due numeri di tipo nC e ritorna una struct nC che è la somma delle 2 in ingresso.
5-La funzione coniugato riceve in ingresso un numero di tipo nC e ritorna una struct di tipo nC che è il complesso coniugato di quello in ingresso.
6-La funzione modulo ritorna un float che è il modulo del numero complesso ricevuto in ingresso.
7-La funzione fase ritorna un float che è la fase del numero complesso ricevuto in ingresso.
8-La funzione moltiplicazione riceve in ingresso due numeri complessi e ritorna un numero complesso che è il prodotto dei due in ingresso.
9-La funzione divisione ritorna il quoziente dei due numeri complessi ricevuti in ingresso.
10-La funzione trigalg riceve in ingresso il modulo e fase di un numero complesso e ritorna un numero complesso di tipo nC.

ok adesso credo di avervi annoiati abbastanza quindi scrivo un..........

Esempio di programma
 
Questo programma presenta un menù nel quale si può scegliere quale operazione fare utilizzando tutte quelle funzioni descritte di sopra.
 
 

typedef struct {float x; float y;} nC;

void printc(nC);
nC inserisci();
float absmio(float);
nC somma(nC, nC);
nC coniugato(nC);
float modulo(nC);
float fase (nC);
nC moltiplicazione(nC, nC);
nC divisione(nC, nC);
nC trigalg (float, float);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main () {
int i, o=1;
float z, x;
char c;
nC n, a, v[100];

while (1){
printf("Quale operazione vuoi fare (PREMI 0 per uscire):");
printf("n1-SOMMAn2-CONIUGATOn3-ALGEBRICA A TRIGONOMETRICAn4-MOLTIPLICAZIONEn5-DIVISIONEn6-TRIGONOMETRICA ad ALGEBRICAnn------------->");
do{
    fflush(stdin);
    scanf("%c", &c);
} while(c<'0'||c>'6');

o=(int)c-48;

switch(o){
    case 1 : n=inserisci();a=inserisci(); printc(somma(n, a));getch();break;
    case 2 : n=inserisci();printc(coniugato(n));getch();break;
    case 3 : n=inserisci();printf("nIl modulo e': %.2f",modulo(n));printf("nIl modulo e': %.2f",fase(n));getch();break;
    case 4 : n=inserisci();a=inserisci(); printc(moltiplicazione(n, a));getch();break;
    case 5 : n=inserisci();a=inserisci(); printc(divisione(n, a));getch();break;
    case 6 : printf("MODULO: ");scanf("%f", &z);printf("FASE: ");scanf("%f",&x);printc(trigalg(z,x));getch();break;
    default : return 0; break;}

system("cls");
}
return 0;
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////DA QUI IN POI CI SONO GLI ALGORITMI DELLE FUNZIONI
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////STAMPA NUMERO COMPLESSO
void printc(nC n)
{
char segnox, segnoy;

if (n.x<0)
    segnox='-';
else
    segnox='+';
   
if (n.y<0)
    segnoy='-';
else
    segnoy='+';

if (n.x<0)
    n.x=absmio(n.x);
if (n.y<0)
    n.y=absmio(n.y);
   
printf("nIl numero complesso e': %c%.2f %cJ%.2f", segnox, n.x, segnoy, n.y);
}

//////////////////////INSERISCI

nC inserisci (){
nC n;
printf("nInserire parte reale: ");
scanf("%f", &n.x);
printf("Inserire parte immaginaria: ");
scanf("%f", &n.y);
return n;
}

//////////////////////ABSMIO

float absmio (float i){

if (i<0)
    return (i=i*(-1));
else
    return i;
}

//////////////////////SOMMA

nC somma (nC a, nC b){
nC n;
n.x=a.x+b.x;
n.y=a.y+b.y;
return n;
}

//////////////////////CONIUGATO

nC coniugato (nC a){
a.y=a.y*(-1);
return a;
}

//////////////////////MODULO

float modulo (nC a){
float modulo;

modulo=sqrt((a.x*a.x)+(a.y*a.y));
return modulo;
}

//////////////////////FASE

float fase (nC a){
float fase;

fase=atan(a.y/a.x);
fase=(fase/3.141516)*180;

if(a.x<0 && a.y>0 || a.x<0&&a.y<0)
    fase=fase+180;

return fase;
}

//////////////////////TRIGALG

nC trigalg (float a, float i){
nC c;

c.x=a*(cos((i/180)*3.1415));
c.y=a*(sin((i/180)*3.1415));

return c;
}

//////////////////////MOLTIPLICAZIONE

nC moltiplicazione (nC a, nC b){
nC c;

c.x=a.x*b.x-a.y*b.y;
c.y=a.x*b.y+b.x*a.y;

return c;
}

//////////////////////DIVISIONE

nC divisione (nC a, nC b){
nC c;

c=moltiplicazione(a,coniugato(b));
c.x=c.x/(b.x*b.x+b.y*b.y);
c.y=c.y/(b.x*b.x+b.y*b.y);

return c;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 

Chiunque può utilizzare e modificare queste funzioni come meglio crede.

Attenzione!Non mi rendo responsabile per eventuali danni a persone e/o cose derivanti dall' uso di questi algoritmi!



  il parere della community
esprimi il tuo voto approvi questa pagina? promo


  non sei autenticato, per questo non puoi visualizzare i commenti sulla pagina. Se sei registrato accedi oppure registrati.


difficoltà
costo
informazioni
Questa pagina è stata creata da Sysko
il 16/11/2011 ore 00:46
ultima modifica del 19/11/2011 ore 19:49
la pagina è stata visitata 14618 volte




Lo staff di www.grix.it non si assume responsabilità sul contenuto di questa pagina.
Se tu sei l'autore originale degli schemi o progetti proposti in questo articolo, e ritieni che siano stati violati i tuoi diritti, contatta lo staff di www.grix.it per segnalarlo.

   
 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale