Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * PROVA DI FONDAMENTI DI INFORMATICA 24.06.2016
- * TRACCIA E1
- *
- * Scrivere un programma C che letta da file una matrice di dimensione (n,m)
- * di interi positivi, individui l'esistenza di una riga i cui elementi hanno la stessa
- * somma di una colonna.
- * Ad esempio dato il file "input.txt" strutturato come segue:
- 3 5
- 0 3 1 2 1
- 4 3 0 1 3
- 0 2 0 4 2
- * File output:
- * La riga di indice 0 ha la stessa somma della colonna di indice 3 cioe' 7 .
- *
- *
- * NOTA: nel caso in cui non ci fosse alcuna coppia riga colonna che soddisfano la condizione,
- * sul file finale verra' stampato il messaggio "Nessuna riga ha somma uguale a qualche colonna."
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define DIMR 20
- #define DIMC 20
- #define NCAR 20
- void leggiMatrice(char *nomefile, int *nA, int *mA,int A[][DIMC] );
- int verificaMatrice(int A[][DIMC],int nA, int mA, int *x, int *y );
- void scriviEsito (char *nomefile, int x, int y, int esito);
- int main()
- {
- char nomefile[NCAR];
- int A[DIMR][DIMC];
- int nA,mA,x,y,esito;
- printf("Digitare il nome del file contenente la matrice A: ");
- scanf("%s", nomefile);
- leggiMatrice(nomefile, &nA, &mA, A );
- esito=verificaMatrice(A,nA,mA,&x,&y);
- printf("Digitare il nome del file output: ");
- scanf("%s", nomefile);
- scriviEsito (nomefile, x, y, esito);
- return (EXIT_SUCCESS);
- }
- /*
- * La funzione leggiMatrice riceve il nome del file input, la matrice dove memorizzare
- * i valori letti e 2 puntatori a intero per memorizzare le dimensioni delle matrice letta
- * mediante passaggio per riferimento.
- */
- void leggiMatrice(char *nomefile, int *n, int *m, int M[][DIMC] )
- {
- int i, j;
- FILE * fp;
- ((fp=fopen(nomefile, "r"))!=NULL)?:(abort());
- fscanf(fp, "%d %d", n, m);
- for(i=0;i<*n;i++)
- for(j=0;j<*m;j++)
- fscanf(fp, "%d", &M[i][j]);
- fclose(fp);
- }
- /* La funzione verificaMatrice riceve come parametro la matrice A e le sue dimensioni;
- * 2 puntatori a intero dove memorizzare l'indice della riga e della colonna
- * i cui elementi hanno la stessa somma.
- * Restituisce il valore della somma se e' stato trovato almeno un caso ricercato, altrimenti "0".
- */
- int verificaMatrice(int A[][DIMC],int nA, int mA, int *x, int *y )
- {
- int i, j, sums[2][DIMC+DIMR];
- for(i=0;i<nA;i++)
- for(j=0, sums[0][i]=0;j<mA;j++)
- sums[0][i]+=A[i][j];
- for(i=0;i<mA;i++)
- for(j=0, sums[1][i]=0;j<nA;j++)
- sums[1][i]+=A[i][j];
- for(i=0;i<nA;i++)
- for(j=0;j<mA;j++)
- if(sums[0][i]==sums[1][j]){
- *x=i;
- *y=j;
- return sums[0][i];
- }
- }
- /*
- * La funzione scriviEsito scrive su un file di uscita l'esito della ricerca come
- * specificato nell'esempio.
- * Riceve come parametro il nome del file di uscita, gli indici di riga e colonna che
- * soddisfano la richiesta e l'esito.
- */
- void scriviEsito (char *nomefile, int x, int y, int esito)
- {
- FILE * fp;
- ((fp=fopen(nomefile, "w"))!=NULL)?:(abort());
- fprintf(fp, "Row %d sum = Col %d sum = %d", x, y, esito);
- fclose(fp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement