Advertisement
Irma16

prodotto_complessi_new

Dec 6th, 2019
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.00 KB | None | 0 0
  1. //prodotto tra due numeri complessi con strutture e funzioni prendendo due numeri complessi da testo e restituendo il prodotto su schermo
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define FILE_COMPLEX_IN "n_complessi.txt"
  7. #define FILE_COMPLEX_OUT "prodotto_complessi.txt"
  8.  
  9. #define STRL 256
  10.  
  11. typedef struct _complesso
  12.                   {
  13.                     float re;
  14.                     float imm;            
  15.                   } complesso;
  16. typedef complesso* pcomplesso;
  17. typedef FILE* pfile;
  18.  
  19. complesso prodotto_complessi(int n, pcomplesso px,pcomplesso py)//IRMA:nella funzione devi passare anche la n da moltiplicare alla malloc
  20.   {
  21.     int i;//IRMA:lo aggiungo per poter usare pz[i] dato che a me interessano i valori contenuti nella malloc, non gli indirizzi!
  22.     pcomplesso pz;
  23.     pz=(pcomplesso)malloc(sizeof(complesso)*n);
  24.     pz->re=((px->re)*(py->re)-(px->imm)*(py->imm));
  25.     pz->imm=((px->re)*(py->imm)+(px->imm)*(py->re));
  26.     return pz[i]; //IRMA: ho cambiato pz in pz[i] per avere il valore
  27.   }
  28.  
  29. int main(void)
  30.   {
  31.     //complesso x,y,z; //non capisco che scopo potrebbero avere x,y,z in questo caso<!-- >
  32.     pcomplesso px,py,pz;
  33.     pfile pf;
  34.     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
  35.     int n, i;
  36.  
  37.     if((pf=fopen(FILE_COMPLEX_IN,"r"))==NULL)
  38.       {
  39.         printf("errore apertura file input\n");
  40.         return EXIT_FAILURE;
  41.       }
  42.     fscanf(pf,"%s",s);
  43.     n=atoi(s);
  44.  
  45.     if((px=(pcomplesso)malloc(sizeof(complesso)*n))==NULL)
  46.       {
  47.         printf("problema con la memoria\n");
  48.       }
  49.     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?
  50.     px->re=atof(s);
  51.     fscanf(pf,"%s",s);
  52.     px->imm=atof(s);
  53.  
  54.     if((py=(pcomplesso)malloc(sizeof(complesso)*n))==NULL)
  55.       {
  56.         printf("problema con la memoria\n");
  57.       }
  58.     fscanf(pf,"%s",s);
  59.     py->re=atof(s);
  60.     fscanf(pf,"%s",s);
  61.     py->imm=atof(s);
  62.        
  63.     fclose(pf);
  64.      
  65.     printf("il numero dei complessi nel file è %d\n",n);
  66.     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);
  67.    
  68.     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
  69.     printf("il numero complesso derivante dal prodotto di x e y è: z= %.2f + i %.2f\n",(pz->re),(pz->imm));
  70.     free(pz);
  71.     return EXIT_SUCCESS;
  72.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement