/* */ /* Programma sviluppato da */ /* */ /* Giovanni DI CECCA */ /* */ /* http://www.dicecca.net */ /* */ #include #include /*prototipo della funzione MATRICE_SPARSA */ int MATRICE_SPARSA(int m, int p, int *ALFA, int *V1, int *V2, int *V3); main( ) { /*dichiarazione di variabili */ int m, p, k, j, num; int Alfa [10] [10] , V1[15], V2[15], V3[16]; printf("Memorizzazione di una matrice sparsa \n"); printf("Digitare la dimensione della matrice (Righe Colonne)\n"); scanf("%d %d", &m, &p); printf("Digitare i %d elementi della matrice \n"); printf("Digitare i %d elementi della matrice \n"); for (k = 0; k < m; k++) { for (j = 0; j < p; j++) { scanf("%d", &Alfa[k][j]); } } /*chiamata della funzione MATRICE_SPARSA */ num = MATRICE_SPARSA(m, p,Alfa,V1,V2,V3); if (num == 0) printf("La matrice č nulla!\n"); else { printf("\n1°vettore: \n"); for (k = 0; k < V3[num-1]; k++) printf("%d ", V1[k]); printf("\n2°vettore: \n"); for (k = 0; k< V3[num -1]; k++) printf("%d ", V2[k]); printf("\n3°vettore: \n"); for (k = 0; k <= num; k++) printf("%d ", V3[k]); } } /*--------------------------------------*/ /* Inizio funzione della matrice sparsa */ /*--------------------------------------*/ int MATRICE_SPARSA (int m, int p, int *Alfa, int *V1, int *V2, int *V3) { typedef enum { true, false } logical; int Ind, Ind2, e, f; logical Trovato; /* "Ind" e "Ind2" sono due contatori che ci servono per riempire i 3 array: "Ind" viene utilizzato per i primi 2 e ci restituire il numero di elementi non nulli della matrice, "Ind2" viene utilizzato per il terzo, la cui dimensione (generalmente minore di quella degli altri 2) deve essere restituito come valore della funzione. */ Ind = Ind2 = 0; Trovato = false; for (e = 0; e < m; e++) { for (f = 0; f < p; f++) { if (*(Alfa +e*10+f) != 0) { *(V1 + Ind) = *(Alfa + e * 10 + f ); *(V2 + Ind) = f + 1; if (Trovato == false) { *(V3 + Ind2) = Ind + 1; Trovato = true; Ind2++; } Ind++; } } Trovato = false; } *(V3 + Ind2) = Ind + 1; return Ind2; }