/* quesito a */
    /* Memoria: e' necessario un contatore per ogni possibile 
       coppia di valori (t,s), quindi occorre un array a 
       due dimensioni, una per titolo di studio e una per 
       stato civile
Algoritmo:
- inizializza l'array di contatori a zero
- inizializza un contatore a zero (servira per il quesito c)
- ripeti finche' c'e' input
- leggi la coppia di osservazioni ossT e ossS, 
  controllando che siano entro l'intervallo previsto 0..NT-1  e 1..NS
- incrementa il contatore individuato dalla coppia ossT,ossS-1, 
  ricordando che per quanto riguarda s e' necessario 
  "traslare" di una unita', il valore che si
  riferisce a s=1 verra' memorizzato in posizione 0
- visualizza l'intero contenuto dell'array, premettendo a ciascuna frequenza rilevata
   i valori di t e s; per quanto riguarda s visualizzare il valore incrementato di 1, per
   compensare la traslazione effettuata nella posizione di memorizzazione
*/


#include <stdio.h>
#include <stdlib.h>
#define NT 6
#define NS 4
#define FN "dati.txt"
#define ERRORE -1

int main (int argcconst char * argv[]) {
    int contaCoppie[NT][NS];
    int i,j,         /* contatori */
        conta,       /* conta numero letture valide */
        t,s,         /* totalizzatori */
        cMaxT,cMaxS/* posizioni del massimo */
        ossTossS;  /* osservazioni per t ed s */
    FILE *fin, *fout;
    fout=stdout;

    if ((fin=fopen(FN"r"))==NULL){
      fprintf(fout,"Impossibile aprire %s in lettura\n");
      return ERRORE;
    }

    for (i=0;i<NT;i++) /* inizializzazione */
        for (j=0;j<NS;j++)
            contaCoppie[i][j]=0;
    conta=0;
    while(fscanf(fin"%d %d",&ossT,&ossS)==2) {                                               /* acquisizione dati */
        if (ossT<0 || NT<=ossT || ossS<1 || NS<ossS)
            fprintf(fout,"Dati errati: %d %d\n",ossTossS);
        else 
        {
            contaCoppie[ossT][ossS-1]++; /* ossS va decrementato perche' parte da 1 */
            conta++;  /* se la lettura e' valida la conteggia */
        }
    }
    /* il numero totale di letture e' in conta */
/* quesito a */
    for (i=0;i<NT;i++)
        for (j=0;j<NS;j++)
            if (contaCoppie[i][j]!=0)
               fprintf(fout,
                "Titolo studio:%d - Stato civile:%d - Frequenza:%f\n",
                i,j+1,(float)contaCoppie[i][j]/conta);
                  /* j va incrementato, perche' in posizione 0 
                    e' memorizzato il valore per s=1 */
                 
/* quesito b */
  /* E' possibile ottenere il risultato a partire dall'array 
     delle frequenze di coppie ottenuto per il quesito a. 
     In questo caso e sufficiente fare la somma di tutti i valori
     di s per ogni t, calcolando la frequenza assoluta del valore 
     di t, e poi quella relativa. Con questa soluzione occorre 
     introdurre solo un totalizzatore, oltre al contatore di 
     osservazioni
Algoritmo:
- per ogni valore i di titolo di studio da 0 a NT-1
- azzera il totalizzatore
- per ogni posizione j di stato civile da 0 a NS-1
- aggiungi la frequenza assoluta della coppia i,j al totalizzatore
- visualizza i e la frequenza relativa
*/

    for (i=0;i<NT;i++){
        t=0/* per ogni valore di i occorre sommare le frequenze assolute dei vari j */
        for (j=0;j<NS;j++) 
            t+=contaCoppie[i][j];
        fprintf(fout,"Titolo di studio %d - Frequenza relativa %lf\n",i,(double)t/conta);
            /* t e conta sono interi, ma la frequenza relativa deve essere con i decimali
             * quindi occorre il type cast (double)
             */

    }

/* quesito c */
  /* Memoria: vanno memorizzate tutte le frequenze assolute 
     usate per il quesito a, in piu' occorre la posizione 
     della frequenza massima, individuata da una coppia di indici
Algoritmo: 
- assumi 0,0 come posizione del massimo corrente
- per tutte le posizioni i di titolo di studio, da 0 a NT-1
- per tutte le posizioni j di stato civile da 0 a NS-1 
     - se la frequenza in posizione i,j e' piu' grande di quella
         nel massimo corrente aggiorna la coppia di indici del massimo corrente a i,j
- visualizza gli indici del massimo (incrementando di 1 quello di stato civile) e la
    frequenza assoluta
*/

    cMaxT=0;cMaxS=0;
    for (i=0;i<NT;i++)
        for (j=0;j<NS;j++)
            if (contaCoppie[i][j]>contaCoppie[cMaxT][cMaxS]){
                cMaxT=i;
                cMaxS=j;
            }
    fprintf(fout,"Frequenza massima %d\n",contaCoppie[cMaxT][cMaxS]);
    fprintf(fout,"Verificata per le coppie:\n");
    for (i=0;i<NT;i++)
        for (j=0;j<NS;j++)
            if (contaCoppie[i][j]==contaCoppie[cMaxT][cMaxS])
                fprintf(fout,"Titolo studio:%d - Stato civile:%d\n",i,j+1);
                   /* j va incrementato perche' la modalita' parte da 1 */

    return 0;
}