Advertisement
Mazamin

Prova Giugno 2017

Jan 19th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.22 KB | None | 0 0
  1. /*
  2.  * PROVA DI FONDAMENTI DI INFORMATICA 24.06.2016
  3.  * TRACCIA E1
  4.  *
  5.  * Scrivere un programma C che letta da file una matrice di dimensione (n,m)
  6.  * di interi positivi, individui l'esistenza di una riga i cui elementi hanno la stessa
  7.  * somma di una colonna.
  8.  * Ad esempio dato il file "input.txt" strutturato come segue:
  9.  
  10. 3    5
  11. 0    3    1    2    1
  12. 4    3    0    1    3
  13. 0    2    0    4    2
  14.  
  15.  * File output:
  16.  * La riga di indice 0 ha la stessa somma della colonna di indice 3 cioe' 7 .
  17.  *
  18.  *
  19.  * NOTA: nel caso in cui non ci fosse alcuna coppia riga colonna che soddisfano la condizione,
  20.  * sul file finale verra' stampato il messaggio "Nessuna riga ha somma uguale a qualche colonna."
  21.  */
  22.  
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25.  
  26. #define DIMR 20
  27. #define DIMC 20
  28. #define NCAR 20
  29.  
  30. void leggiMatrice(char *nomefile, int *nA, int *mA,int A[][DIMC]  );
  31. int verificaMatrice(int A[][DIMC],int nA, int mA, int *x, int *y );
  32. void scriviEsito (char *nomefile,  int x, int y, int esito);
  33.  
  34.  
  35. int main()
  36. {
  37.     char nomefile[NCAR];
  38.     int A[DIMR][DIMC];
  39.     int nA,mA,x,y,esito;
  40.    
  41.     printf("Digitare il nome del file contenente la matrice A: ");
  42.     scanf("%s", nomefile);
  43.    
  44.     leggiMatrice(nomefile, &nA, &mA, A   );
  45.    
  46.     esito=verificaMatrice(A,nA,mA,&x,&y);
  47.  
  48.    
  49.     printf("Digitare il nome del file output: ");
  50.     scanf("%s", nomefile);
  51.    
  52.     scriviEsito (nomefile, x,  y,  esito);
  53.    
  54.     return (EXIT_SUCCESS);
  55. }
  56.  
  57. /*
  58.  * La funzione leggiMatrice  riceve il nome del file input, la matrice dove memorizzare
  59.  * i valori letti e 2 puntatori a intero per memorizzare le dimensioni delle matrice letta
  60.  * mediante passaggio per riferimento.
  61.  */
  62. void leggiMatrice(char *nomefile, int *n, int *m, int M[][DIMC]  )
  63. {
  64.     int i, j;
  65.     FILE * fp;
  66.     ((fp=fopen(nomefile, "r"))!=NULL)?:(abort());
  67.     fscanf(fp, "%d %d", n, m);
  68.     for(i=0;i<*n;i++)
  69.         for(j=0;j<*m;j++)
  70.             fscanf(fp, "%d", &M[i][j]);
  71.     fclose(fp);
  72. }
  73.  
  74. /* La funzione verificaMatrice riceve come parametro la matrice A e le sue dimensioni;
  75.  * 2 puntatori a intero dove memorizzare l'indice della riga e della colonna
  76.  * i cui elementi hanno la stessa somma.
  77.  * Restituisce il valore della somma se e' stato trovato almeno un caso ricercato, altrimenti "0".
  78.  */
  79. int verificaMatrice(int A[][DIMC],int nA, int mA, int *x, int *y )
  80. {
  81.     int i, j, sums[2][DIMC+DIMR];
  82.     for(i=0;i<nA;i++)
  83.         for(j=0, sums[0][i]=0;j<mA;j++)
  84.             sums[0][i]+=A[i][j];
  85.     for(i=0;i<mA;i++)
  86.         for(j=0, sums[1][i]=0;j<nA;j++)
  87.             sums[1][i]+=A[i][j];
  88.     for(i=0;i<nA;i++)
  89.         for(j=0;j<mA;j++)
  90.             if(sums[0][i]==sums[1][j]){
  91.                 *x=i;
  92.                 *y=j;
  93.                 return sums[0][i];
  94.             }
  95. }
  96.  
  97. /*
  98.  * La funzione scriviEsito scrive su un file di uscita l'esito della ricerca come
  99.  * specificato nell'esempio.
  100.  * Riceve come parametro il nome del file di uscita, gli indici di riga e colonna che
  101.  * soddisfano la richiesta e l'esito.
  102.  */
  103. void scriviEsito (char *nomefile, int x, int y, int esito)
  104. {
  105.     FILE * fp;
  106.     ((fp=fopen(nomefile, "w"))!=NULL)?:(abort());
  107.     fprintf(fp, "Row %d sum = Col %d sum = %d", x, y, esito);
  108.     fclose(fp);
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement