#include <stdio.h> #include <stdlib.h> #define MAX 100 /*ATTENZIONE: TENETE NOTA NEL SEGUENTE ESERCIZIO CHE LA MATRICE VIENE SALVATA TUTTA SU INDIRIZZI SUCCESSIVI, LA POSIZIONE [I][J] NON CORRISPONDE ALL'INDIRIZZO *(MAT + I*C + J). PER RISOLVERE IL PROBLEMA USARE LE FUNZIONI DI MALLOC PER DEALLOCARE MEMORIA DALLA MATRICE */ void leggiMatrice(float *p); void stampaMatrice(float *p); void contaValori(float *p, float *valori); void stampaVettore(float *p); struct LaMiaStruct { float val; int numOccorrenze; int mat[MAX][2]; }; int r = 0; int c = 0; int ValoriDiversi =0; int main() { struct LaMiaStruct VectStruct[MAX]; float mat[MAX][MAX]; float *p = mat; float valori[MAX]; leggiMatrice(mat); stampaMatrice(mat); contaValori(mat,valori); stampaMatrice(mat); stampaVettore(valori); int occorrenza = 0; int RigaProv =0; int ColonnaProv = 0; for(int i=0; i<r; i++) { printf("\n"); for(int j=0; j<c; j++) { printf("%.1f",mat[i][j]); } } printf("%d", ValoriDiversi); for(int i=0; i<ValoriDiversi; i++) { VectStruct[i].val = valori[i]; occorrenza = 0; for(int k=0; k<r; k++) { for(int j=0; j<c; j++) { if(*(p +k*c +j) == valori[i]) { VectStruct[i].mat[occorrenza][0]=k; VectStruct[i].mat[occorrenza][1]=j; occorrenza ++; } } } VectStruct[i].numOccorrenze = occorrenza; } for(int i=0; i<ValoriDiversi; i++) { printf("\n"); printf("il valore %.1f esiste %d volte", VectStruct[i].val,VectStruct[i].numOccorrenze ); for(int j=0; j<VectStruct[i].numOccorrenze; j++) { printf("[%d][%d] \n", VectStruct[i].mat[j][0], VectStruct[i].mat[j][1]); } } return 0; } void leggiMatrice(float *p) { printf("Inserisci, per piacere, il numero di righe della matrice?\n"); scanf("%d",&r); printf("Inserisci, per piacere, il numero di colonne della matrice?\n"); scanf("%d",&c); printf("Inserisci, per piacere, la matrice?\n"); for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { printf("Inserisci l'elemento di posto [%d][%d]:\n",i+1,j+1); scanf("%f",(p+i*c+j)); } } } void stampaMatrice(float *p) { for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { printf("%.1f ",*(p+i*c+j)); } printf("\n"); } } void stampaVettore(float *p) { for(int i=0; i<ValoriDiversi; i++) { printf("%.1f ",*(p+i)); } } void contaValori(float *p, float *valori) { ValoriDiversi = 0; int trovato = 1; for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { trovato = 1; for(int k=0; k<ValoriDiversi; k++) { if(*(p+i*c+j) == *(valori+k)) { trovato = 0; } } if(trovato==1) { *(valori+ValoriDiversi) = *(p+i*c+j); ValoriDiversi++; } } } }