/*** 2. Dato un file matrice.txt (ad esempio come quello qui sotto, ove i due primi numeri interi
stabiliscono rispettivamente le righe e le colonne di una matrice) caricare in una matrice M
in memoria il file e poi visualizzare a video:
A) la matrice
B) gli elementi della colonna N (chiedi N da tastiera)
C) quanti elementi della matrice sono divisibili per l’elemento K (Chiedi K da tastiera. Se
K=6 e la matrice č quella qui sotto, il valore corrispondente č 0, cioč il sesto numero
partendo dall’elemento 0,0)
 3 4
 2 3 4 5
 8 0 7 2
 4 4 9 8
***/
#include <stdio.h>
#include <stdlib.h>
#define MAX 10

void caricamatrice (int m[MAX][MAX],int dimensione[])
{
    FILE *f;
    int i, j, righe,colonne;

    f= fopen("matrice.txt","r"); // apro il file dove ho la matrice
    if (f== NULL)
    {
        printf("ERRORE! nella apertura del file ");
        exit(1);
    }
    printf("La matrice-->\n");
    fscanf(f,"%d %d",&righe,&colonne);
    dimensione[0]=righe;   // per il valore di ritorno della matrice
    dimensione[1]=colonne; // per il valore di ritorno della matrice
    for(i=0; i<righe; i++) // riempimento della matrice
        for(j=0; j<colonne; j++)
            fscanf(f,"%d",&m[i][j]);
    fclose (f);
}

void stampamatrice (int m[MAX][MAX], int righe, int colonne)
{
    int i, j;
    for(i=0; i<righe; i++)
    {
        for(j=0; j<colonne; j++)
            printf("%3d",m[i][j]);// stampa la matrice
        printf("\n");
    }
}

void stampacolonna(int m[MAX][MAX],int n, int righe)
{
    int i;
    for(i=0; i<righe; i++)
        printf("%d\n",m[i][n-1]);  // stampa colonna desiderata
}

int trovak1 (int m[MAX][MAX], int k, int righe, int colonne)
{
    int elem,i,j,cont=1;
    // printf(" Da trovak() k=%d, righe=%d, colonne=%d\n",k,righe,colonne);
    for(i=0; i<righe; i++)
        for(j=0; j<colonne; j++)
        {
            if (cont == k)
            {
                elem = m[i][j];
                return(elem);
            }
            cont++;
        }
    return 0;
}

int trovak2(int m[][MAX], int righe, int colonne, int k) // con calcolo o formula
{

}

int trovak3(int m[][MAX], int righe, int colonne, int k)
// trova l'elemento k nella matrice e lo ritorna con calcolo di pointer
{
    int *p;
    int i;
    p= &m[0][0]; // in p c'e' l'indirizzo del primo elemento della matrice
    //............

    return *p; // ritorna l'elemento
}

int trovadivisibili(int m[MAX][MAX],int righe,int colonne, int elem)
{
    int i, j, cont=0;
    for(i=0; i<righe; i++)
        for(j=0; j<colonne; j++)
            if(elem != 0 && m[i][j] % elem == 0)
                cont++;
    return cont;
}

int main ()
{

    int m[MAX][MAX];
    int righe, colonne;
    int i,j,elem;
    int dim[2];
    int divisibili=0;
    int n,k;

    caricamatrice(m,dim);
    righe= dim[0];
    colonne= dim[0];
    stampamatrice(m,righe,colonne); // funzione della stampa matrice

    printf("Dimmi quale colonna vuoi visualizzare-->");
    scanf("%d",&n);
    stampacolonna(m, n,righe ); // funzione della stampa colonna

    printf("Dimmi il valore della k--->");
    scanf("%d",&k);
    elem=trovak1(m,k, righe, colonne);
    // funzione della trova elemnto della matrice attraverso  k
    printf (" dal main() elemento della matrice-->%d\n",elem);


    printf("\n");


    divisibili=trovadivisibili(m,righe,colonne,elem);
    printf("\nElementi divisibili per %d: %d\n", elem, divisibili);
    return 0;
}
