/* =============================================================== */ /* CORSO DI PROGRAMMAZIONE IN C (C89) */ /* Claudio Fornaro */ /* Ver. 3 - 2021 */ /* 19-DynAlloc_Soluzioni.txt */ /* =============================================================== */ /* =============================================================== */ /* 1 */ /* =============================================================== */ #include #include void ordina(int vett[], int lung); int main() { int i, nvalori; FILE *fpIN, *fpOUT; char filename[FILENAME_MAX]; int *v; printf("Nome del file in input: "); gets(filename); if ((fpIN=fopen(filename,"r"))==NULL) { fprintf(stderr, "Il file non esiste\n"); return EXIT_FAILURE; } printf("Nome del file in output: "); gets(filename); if ((fpOUT=fopen(filename,"w"))==NULL) { fprintf(stderr, "Non posso aprire il file\n"); return EXIT_FAILURE; } /* conta quanti valori contiene il file */ nvalori = 0; while (fscanf(fpIN, "%*d") != EOF) /* li legge e li scarta */ nvalori++; /* fscanf da' 0 se legge e scarta */ /* alloca spazio per un vettore di int di dimensione nvalori */ v = (int *)malloc(nvalori*sizeof(int)); if (v == NULL) { fprintf(stderr, "Non posso allocare\n"); return EXIT_FAILURE; } rewind(fpIN); /* ora legge i valori dal file e li memorizza */ for (i=0; i #include #include #define NUMRIGHE 5 #define NUMCOL 15 void f2(int *arrayp, int rows, int cols); int main() { int i; int numRighe=20; int numCol=10; int array[NUMRIGHE][NUMCOL]; int **array1; /* vettore di puntatori, ragged */ int **array2; /* vettore di puntatori, contiguo */ int *array3; /* vettore NO matrice (flat) */ int (*array4)[NUMCOL]; /* puntatore a vettore */ array1=(int **)malloc(numRighe*sizeof(int *)); for (i=0; i #include #define NUMRIGHE 10 #define NUMCOL 20 int somma1(int *v, int nrows, int ncols); int somma2(int **v, int nrows, int ncols); int main() { int s1, s2; int ms[NUMRIGHE][NUMCOL]={1,2,3,4,5,6,7,8,9}; /* matr. statica */ int numRighe, numCol, i; int **md; /* matrice dinamica */ numRighe = 20; numCol = 30; /* crea una matrice dinamica tipo array2 */ md = (int **)malloc(numRighe*sizeof(int *)); md[0] = (int *)calloc(numRighe*numCol, sizeof(int)); for (i=1; i= NC */ } int somma2(int **v, int nrows, int ncols) { int r, c, sum = 0; for (r=0; r #include #define NUMRIGHE 10 #define NUMCOL 20 int somma1(int *v, int nrows, int ncols); int somma2(int **v, int nrows, int ncols); int main() { int s1, s2; int ms[NUMRIGHE][NUMCOL]={1,2,3,4,5,6,7,8,9}; /* matr. statica */ int numRighe, numCol, i; int **md; /* matrice dinamica */ numRighe = 20; numCol = 30; /* crea una matrice dinamica tipo array2 */ md = (int **)malloc(numRighe*sizeof(int *)); md[0] = (int *)calloc(numRighe*numCol, sizeof(int)); for (i=1; i= NC */ } int somma2(int **v, int nrows, int ncols) { int r, c, sum = 0; int **pp; /* puntatore a puntatore a int */ /* crea il vettore di puntatori alle righe, sia per la matrice statica sia per la matrice dinamica, per la sola dinamica non servirebbe */ pp = (int **)malloc(nrows * sizeof(int *)); /* mette nel primo puntatore il puntatore al blocco passato tramite v */ pp[0] = *v; /* assegna i valori dei puntatori alle righe successive alla 1a */ for (r=1; r