/* * File: main.cpp * Author: maurizio * * Created on 3 giugno 2010, 16.13 */ #include #include using namespace std; /* * */ const int MAX1=20; const int MAX2=30; // se tutti gli elementi di s fossero valori diversi da 0 avrei MAX3=MAX1*MAX2 const int MAX3=MAX1*MAX2; // una struttura individua un "tipo" di dati (come int, char, double, float ecc) // il costrutto struct si scrive fuori dal main (come le costanti) struct elemento { int val; int x; int y; }; // qui va il punto e virgola obbligatorio // prototipi delle funzioni void carica(int s[][MAX2], int n, int m, elemento a[], int& k); void stampa(elemento a[], int k); void stampaStrutt(elemento e); void stampaMatr(int s[][MAX2], int n, int m); int main(int argc, char** argv) { // n righe int n=4; // m colonne int m=5; // se si va oltre i valori di n ed m previsti // si interrompe l'elaborazione if (n>MAX1 || m>MAX2) return (EXIT_FAILURE); // caricamento della matrice sparsa s con valori predefiniti int s[][MAX2]={{0,0,3,0,0},{1,0,0,4,0},{0,5,0,0,0},{0,0,1,0,0}}; // stampa i dati della matrice sparsa s cout << "Elementi della matrice sparsa s" << endl; stampaMatr(s,n,m); // creiamo un array di strutture di tipo elemento elemento a[MAX3]; // k è la dimensione di a int k=0; // caricamento dell'array di strutture a carica(s,n,m,a,k); // stampiamo gli elementi dell'array di strutture cout << "Elementi dell'array (di strutture) a" << endl; stampa(a,k); return (EXIT_SUCCESS); } // a partire da s di dimensioni n ed m, carichiamo a di dimensione k // con matrici sparse di grandi dimensioni, memorizzando gli elementi non nulli // della matrice in un array di strutture, si risparmia decisamente un bel un pò di memoria // (provate a considerare una matrice di 1000 * 2000 elementi in cui ci sono solo 15 elementi // non nulli, quanto occupa l'array di strutture derivato dalla matrice? // quanto occupa la matrice?) void carica(int s[][MAX2], int n, int m, elemento a[], int& k) { for (int i=0; i