/* =============================================================== */ /* CORSO DI PROGRAMMAZIONE IN C (C89) */ /* Claudio Fornaro */ /* Ver. 3 - 2021 */ /* 08-VettMat_Soluzioni.txt */ /* =============================================================== */ /* =============================================================== */ /* 1 */ /* =============================================================== */ #include #define MAXNUM 100 int main() { int v[MAXNUM], n, i; printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); if (n>0 && n<=MAXNUM) { for (i=0; i=0; i--) printf("%d\n", v[i]); } else printf("Il valore inserito (%d) non e' corretto\n", n); return 0; } /* =============================================================== */ /* 2 */ /* =============================================================== */ #include #define MAXNUM 100 int main() { int v[MAXNUM], n, i; printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); if (n>0 && n<=MAXNUM) { for (i=0; i=0; i--) if (v[i] % 2 == 1) printf("%d ", v[i]); /* DISPARI */ /* NO ELSE QUI in quanto si vogliono SALTARE i pari */ } else printf("Il valore inserito (%d) non e' corretto\n", n); return 0; } /* =============================================================== */ /* 3 */ /* =============================================================== */ #include #define MAXNUM 100 int main() { int a[MAXNUM], b[MAXNUM], c[MAXNUM], n, i; printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); if (n>0 && n<=MAXNUM) { for (i=0; i #define MAXNUM 100 int main() { int v[MAXNUM], max, min, somma; int n, i; do { printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); }while(n>MAXNUM || n<=0); /* continua a chiedere un nuovo valore per n fintanto che il valore non e' minore di MAXNUM, ossia prosegue quando n e' nelle specifiche */ for (i=0; imax) max = v[i]; else if (v[i] #define MAXNUM 100 int main() { double v[MAXNUM]; int n, i; do { printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); }while(n>MAXNUM || n<=2); /* almeno 3 valori */ for (i=0; i #define MAXVALORI 100 int main() { int i, n, quanti, maxQuanti; int v[MAXVALORI], valoremax; do { printf("Quanti valori introdurrai (max %d)? ", MAXNUM); scanf("%d", &n); }while(n>MAXNUM || n<=0); /* continua a chiedere nuovo val */ printf("Introduci gli %d valori:\n", n); for (i=0; imaxQuanti) /* ricerca del max di quanti */ { maxQuanti=quanti; valoremax=v[i]; } } else quanti=1; } printf("numero: %d, ripetizioni: %d\n", valoremax, maxQuanti); return 0; } /* =============================================================== */ /* 7 */ /* =============================================================== */ #include #define MAXRIGHE 10 #define MAXCOLONNE 10 int main() { int Mx[MAXRIGHE][MAXCOLONNE], v, max, min, somma; int r, c, i, j; /* verifica che r sia un valore appropriato */ do { printf("Quante righe (max %d)? ", MAXRIGHE); scanf("%d", &r); }while (r>MAXRIGHE || r <= 0); /* verifica che c sia un valore appropriato */ do { printf("Quante colonne (max %d)? ", MAXCOLONNE); scanf("%d", &c); }while (c>MAXCOLONNE || c <= 0); for (i=0; i max) max = v; else if (v < min) min = v; } printf("Massimo: %d\n", max); printf("Minimo: %d\n", min); printf("Somma: %d\n", somma); printf("Media: %f\n", (double)somma/(r*c)); return 0; } /* =============================================================== */ /* 8 */ /* =============================================================== */ #include #include #include #define MAXRIGHE 20 #define MAXCOLONNE 26 #define MAXCASUALE 99 int main() { int MX[MAXRIGHE][MAXCOLONNE], r, c, i, j, numpari; srand(time(NULL)); /* verifica che r sia un valore appropriato */ do { printf("Quante righe (max %d)? ", MAXRIGHE); scanf("%d", &r); }while (r>MAXRIGHE || r <= 0); /* verifica che c sia un valore appropriato */ do { printf("Quante colonne (max %d)? ", MAXCOLONNE); scanf("%d", &c); }while (c>MAXCOLONNE || c <= 0); /* riempie MX di valori casuali */ for (i=0; i #include #include #define MAXRIGHE 20 #define MAXCOLONNE 26 #define MAXCASUALE 99 int main() { int MX[MAXRIGHE][MAXCOLONNE], r, c, i, j, numpari=0; double unquarto; srand(time(NULL)); do { printf("Quante righe (max %d)? ", MAXRIGHE); scanf("%d", &r); }while (r>MAXRIGHE || r <= 0); do { printf("Quante colonne (max %d)? ", MAXCOLONNE); scanf("%d", &c); }while (c>MAXCOLONNE || c <= 0); unquarto = r*c/4.0; /* 4.0 e' double per avere un risultato frazionario */ /* riempie MX di valori casuali */ for (i=0; i= unquarto) goto fuori; /* vedi nota */ } fuori: if (numpari >= unquarto) printf("Almeno un quarto dei valori e' pari\n"); else printf("Meno di un quarto dei valori e' pari\n"); return 0; } /* Note Il generatore di numeri casuali ha una distribuzione uniforme per cui e' estremamente improbabile che meno di 1/4 dei valori sia pari. Si noti l'uso del goto per uscire immediatamente da due cicli annidati. Come scritto nelle slide, l'etichetta deve essere collocata subito dopo la chiusura dei cicli piu' esterno da cui uscire, cioe' non ci devono essere istruzioni in mezzo che verrebbero saltate dal goto. Una soluzione strutturata, ossia senza goto, sostituirebbe il ciclo indicato con il seguente: #define NO 0 #define SI 1 ... int esci = NO; /* flag */ for (i=0; i= unquarto) esci = SI; } Le due #define e la definizione di esci potevano essere sostituite da: enum {NO, SI} esci; */ /* =============================================================== */ /* 10 */ /* =============================================================== */ #include #include #define N 19 int main() { int n, i, j, c; int mx[N][N]= {{0}}; /* non indispensab. ma utile per il debug */ int cont; /* chiede la dimensione e controlla sia corretta */ do { printf("Dimensione del quadrato (max %d): ", N); scanf("%d", &n); } while (n<1 || n>N); cont=1; /* se questa viene collocata all'inizio del for si riparte da 1 per ogni cornice */ /* n/2 cornici concentriche */ for (c=0; c0+c; j--) mx[i][j]=cont++; /* lato sinistro */ for (i=n-1-c; i>0+c; i--) mx[i][j]=cont++; } if (n%2 != 0) mx[++i][++j]=cont; /* visualizza la matrice */ for (i=0; i #include #define R 4 #define C 5 int main() { int r, c, i, j, k, l; int mx[R][C], somma; printf("Introduci i valori della matrice (%d x %d):\n", R, C); for (i=0; iR || r <= 0); do { printf("numero colonne (max %d): ", C); scanf("%d", &c); }while (c>C || c <= 0); for (i=0; i #include #include #define MAXRIGHE 20 #define MAXCOLONNE 26 #define MAXCASUALE 99 int main() { int MX[MAXRIGHE][MAXCOLONNE], a[MAXRIGHE][MAXCOLONNE]; int r, c, ra, ca, i, j; int cont; srand(time(NULL)); /* riempie la matrice di valori casuali */ for (r=0; rMAXRIGHE || ra <= 0); do { printf("Quante colonne (max %d)? ", MAXCOLONNE); scanf("%d", &ca); }while (ca>MAXCOLONNE || ca <= 0); /* chiede i valori della matrice da cercare */ for (r=0; r #include #define RIGHE 10 #define COLONNE 10 int main() { int mat1[RIGHE][COLONNE], mat2[RIGHE][COLONNE], result[RIGHE][COLONNE]= {0}; /* indispensabile sia azzerato */ int i, j, k; int r1, c1, r2, c2; /* dimensioni effettive delle due matrici */ printf("PRIMA MATRICE - righe: "); scanf("%d", &r1); printf("PRIMA MATRICE - colonne: "); scanf("%d", &c1); printf("SECONDA MATRICE - righe: "); scanf("%d", &r2); printf("SECONDA MATRICE - colonne: "); scanf("%d", &c2); if (c1!=r2) { printf("Le due matrici non si possono moltiplicare: il numero delle colonne della prima deve essere uguale al numero di righe della seconda\n"); return EXIT_FAILURE; } printf("PRIMA MATRICE\n"); for(i=0; i