Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //prodotto tra due numeri complessi con strutture e funzioni prendendo due numeri complessi da testo e restituendo il prodotto su schermo
- #include <stdio.h>
- #include <stdlib.h>
- #define FILE_COMPLEX_IN "n_complessi.txt"
- #define FILE_COMPLEX_OUT "prodotto_complessi.txt"
- #define STRL 256
- typedef struct _complesso
- {
- float re;
- float imm;
- } complesso;
- typedef complesso* pcomplesso;
- typedef FILE* pfile;
- complesso prodotto_complessi(int n, pcomplesso px,pcomplesso py)//IRMA:nella funzione devi passare anche la n da moltiplicare alla malloc
- {
- int i;//IRMA:lo aggiungo per poter usare pz[i] dato che a me interessano i valori contenuti nella malloc, non gli indirizzi!
- pcomplesso pz;
- pz=(pcomplesso)malloc(sizeof(complesso)*n);
- pz->re=((px->re)*(py->re)-(px->imm)*(py->imm));
- pz->imm=((px->re)*(py->imm)+(px->imm)*(py->re));
- return pz[i]; //IRMA: ho cambiato pz in pz[i] per avere il valore
- }
- int main(void)
- {
- //complesso x,y,z; //non capisco che scopo potrebbero avere x,y,z in questo caso<!-- >
- pcomplesso px,py,pz;
- pfile pf;
- char s[STRL]; //IRMA: non c'è bisogno di due stringhe perchè ogni volta che ne usi una fai l'assegnamento: n=atoi(s) quindi puoi riusare s
- int n, i;
- if((pf=fopen(FILE_COMPLEX_IN,"r"))==NULL)
- {
- printf("errore apertura file input\n");
- return EXIT_FAILURE;
- }
- fscanf(pf,"%s",s);
- n=atoi(s);
- if((px=(pcomplesso)malloc(sizeof(complesso)*n))==NULL)
- {
- printf("problema con la memoria\n");
- }
- fscanf(pf,"%s",s);//ho provato ad acquisire insieme px->re e px->imm ma non ci sono riuscito se non così, inoltre in un programma con più numeri complessi e vari prodotti da calcolare bisognerebbe fare un cilco, ma come acquisire i complessi da un file di testo con un puntatore?
- px->re=atof(s);
- fscanf(pf,"%s",s);
- px->imm=atof(s);
- if((py=(pcomplesso)malloc(sizeof(complesso)*n))==NULL)
- {
- printf("problema con la memoria\n");
- }
- fscanf(pf,"%s",s);
- py->re=atof(s);
- fscanf(pf,"%s",s);
- py->imm=atof(s);
- fclose(pf);
- printf("il numero dei complessi nel file è %d\n",n);
- printf("il primo numero complesso è: x= %.2f + i %.2f\nil secondo numero complesso è: y= %.2f + i %.2f \n",px->re,px->imm,py->re,py->imm);
- pz[i]=prodotto_complessi(n, px,py); /*in realtà quello corretto è pz=prodotto_complessi(&x,&y);*/ //questo è quello che aveva detto il prof nel caso in cui px e py non fossero stati assegnati ad un indirizzo da puntare (senza una malloc per entrambi). Qui invece abbiamo fatto una malloc per px e py e così il programma funziona, a px e py è stato dedicato uno spazio in memoria e li è stato assegnato a cosa puntare
- printf("il numero complesso derivante dal prodotto di x e y è: z= %.2f + i %.2f\n",(pz->re),(pz->imm));
- free(pz);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement