visoft

2021Dec1_pregatire_numere_complexe

Dec 1st, 2021
1,105
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5.     double re, im;
  6. }Complex;
  7.  
  8. typedef struct{
  9.     Complex numere[50];
  10.     int nr_elemente;
  11. }Linie;
  12.  
  13. typedef struct{
  14.     Linie linii[50];
  15.     int nr_linii;
  16. }GrupLinii;
  17.  
  18. Complex adunare(Complex a, Complex b){
  19.     Complex rezultat;
  20.     rezultat.re = a.re + b.re;
  21.     rezultat.im = a.im + b.im;
  22.     return rezultat;
  23. }
  24.  
  25.  
  26. void inmultire_gresita(Complex* acumulator, Complex nr){
  27.     acumulator->re = acumulator->re * nr.re - acumulator->im * nr.im;
  28.     acumulator->im = acumulator->re * nr.im + acumulator->im * nr.re;
  29. }
  30.  
  31. Complex inmultire(Complex a, Complex b){
  32.     Complex rezultat;
  33.     rezultat.re = a.re * b.re - a.im * b.im;
  34.     rezultat.im = a.re * b.im + a.im * b.re;
  35.     return rezultat;
  36. }
  37.  
  38.  
  39. int main(void) {
  40.     FILE * file;
  41.     file = fopen("src/in.txt", "r");
  42.     if (file == NULL){
  43.         return -1;
  44.     }
  45.  
  46.     // DEMONSTRATIE
  47.     Complex a={3, 2};
  48.     Complex b={1, 4};
  49.     Complex c;
  50.     inmultire_gresita(&a, b);
  51.     printf("%f %f\n", a.re, a.im);
  52.     a.re = 3;
  53.     a.im = 2;
  54.     c = inmultire(a, b);
  55.     printf("%f %f", c.re, c.im);
  56.  
  57.     // REZOLVARE PROBLEMA
  58.  
  59.     GrupLinii problema;
  60.  
  61.     int nr_de_linii;
  62.     fscanf(file, "%d", &nr_de_linii);
  63.     problema.nr_linii = nr_de_linii;
  64.     for(int i=0; i < nr_de_linii; i++){
  65.         int nr_elemente;
  66.         fscanf(file, "%d", &nr_elemente);
  67.         problema.linii[i].nr_elemente = nr_elemente;
  68.         for (int j = 0; j < nr_elemente; j++){
  69.             Complex nr;
  70.             fscanf(file, "%lf %lf", &nr.re, &nr.im);
  71.             problema.linii[i].numere[j] = nr;
  72.  
  73.         }
  74.     }
  75.  
  76.     for(int i=0; i < problema.nr_linii; i++){
  77.         Linie linie = problema.linii[i];
  78.         Complex suma;
  79.         suma.im = 0;
  80.         suma.re = 0;
  81.         for (int j = 0; j < linie.nr_elemente; j++){
  82.             suma = adunare(suma, linie.numere[j]);
  83.         }
  84.         printf("Randul: %d suma: (%f, %f)\n",i, suma.re, suma.im);
  85.     }
  86.     return 0;
  87. }
  88.  
RAW Paste Data