<h1>Programmazione 1 <small> (P-Z) a.a. 2007-08</small></h1> <br> <big>Docente: R. Silvestri<br> Esercitatore: A. Carosi<br> Tutor: J. Stefa</big><br> <br> <br> <h2>Esercitazioni del 9 ottobre 2007</h2> <b>Esercizio 1</b> <div align="justify"> <blockquote> Scrivere un programma che prende in input 10 valori interi ne calcola la media e poi stampa la media e il valore (tra i 10 presi in input) che più si discosta dalla media. Ad esempio, se i 10 valori sono 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 allora la media è 5.5 e il valore che più si discosta dalla media è 1 oppure 10. </blockquote> </div> <br> <b>Esercizio 2</b> <div align="justify"> <blockquote> Scrivere un programma che prende in input un intero <tt>n</tt> e poi genera, tramite la funzione <tt>rand()</tt>, <tt>n</tt> numeri "casuali" compresi tra 1 e 100, ne calcola la media e il massimo scarto dalla media (cioè, la massima differenza in valore assoluto tra uno dei numeri generati e la loro media). Il programma infine stampa la media e il massimo scarto. Ad esempio, se <tt>n = 5</tt> e i numeri generati sono 3, 56, 23, 12, 79 allora la media è 41.2 e il massimo scarto è 38.2. </blockquote> </div> <br> <b>Esercizio 3</b> <div align="justify"> <blockquote> Scrivere un programma che prende in input una stringa tramite la specifica di conversione <tt>"%s"</tt> (si assuma che la stringa non abbia più di 100 caratteri) e controlli se c'è un carattere doppio, cioè, un carattere che appare nella stringa ripetuto almeno due volte in posizioni consecutive. Il programma se c'è un carattere doppio lo stampa altrimenti stampa <tt>"non ci sono doppi"</tt>. Ad esempio, se la stringa è <tt>"tutto e niente"</tt> il programma stampa <tt>"t"</tt>, se la stringa è <tt>"niente per niente"</tt> il programma stampa <tt>"non ci sono doppi"</tt>. </blockquote> </div> <br> <b>Esercizio 4</b> <div align="justify"> <blockquote> Scrivere un programma che prende in input un intero n e genera, tramite la funzione <tt>rand()</tt>, <tt>n</tt> numeri "casuali" compresi tra 1 e 100, poi conta per ogni valore tra 1 e 100 quante volte è stato generato e stampa il numero massimo di volte che un valore è stato generato. Ad esempio, se <tt>n = 10</tt> e i valori generati sono 2, 15, 67, 12, 15, 88, 67, 15, 71, 45 allora il programma stampa 3 (perché il 15 è stato generato 3 volte e nessun'altro valore è stato generato più di 3 volte). </blockquote> </div> <br> <b>Esercizio 5</b> <div align="justify"> <blockquote> Scrivere un programma che prende in input 10 valori in virgola mobile (tipo <tt>float</tt>) e stampa un istogramma dei 10 valori. A fianco di ogni valore viene stampata una riga di asterischi la cui lunghezza è proporzionale al valore. Esempio di esecuzione del programma: <tt><pre> 0) inserisci un numero: 0.6 1) inserisci un numero: 5.8 2) inserisci un numero: 2.97 3) inserisci un numero: 4 4) inserisci un numero: 3.05 5) inserisci un numero: 7.86 6) inserisci un numero: 8.05 7) inserisci un numero: 2.59 8) inserisci un numero: 5.8 9) inserisci un numero: 9.43 0.60 * 5.80 ****************** 2.97 ********* 4.00 ************ 3.05 ********* 7.86 ************************* 8.05 ************************* 2.59 ******** 5.80 ****************** 9.43 ****************************** </pre></tt> </blockquote> </div> <br> <br> <br> <br> <br> <br> <br> <br> <br> <big><b>Soluzioni</b></big> <br> <br> <br> <br> <b>Soluzione Esercizio 1</b> <div align="justify"> <blockquote> <tt><pre> #include <stdio.h> #include <math.h> #define MAX_ITEMS 10 int main (void) { int counter, value[MAX_ITEMS] = {0}; float avg; for (counter = 0; counter < MAX_ITEMS; counter++) { printf ("Inserisci un numero intero: "); scanf ("%d", &value[counter]); avg += value[counter]; } avg /= 10.0; float max_scarto = 0.0; int elem_max_scarto; for (counter = 0; counter < MAX_ITEMS; counter++) { if (fabs(value[counter] - avg) > max_scarto) { max_scarto = fabs(value[counter] - avg); elem_max_scarto = value[counter]; } } printf ("Media %.3f, elemento di massimo scarto %d\n", avg, elem_max_scarto); return 0; } </pre></tt> </blockquote> Nota per lo studente: provare a risolvere l'esercizio senza utilizzare la funzione matematica <tt>fabs()</tt>. </div> <br> <b>Soluzione Esercizio 2</b> <div align="justify"> <blockquote> <tt><pre> #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX_ITEMS 100 int main (void) { int n; printf ("Inserisci un numero intero positivo: "); scanf ("%d", &n); srand(time (NULL)); int value[MAX_ITEMS] = {0}, counter; float avg = 0.0, max_scarto = 0.0; for (counter = 0; counter < n; counter++) { value[counter] = (rand() % 100) + 1; avg += value[counter]; } avg /= n; for (counter = 0; counter < n; counter++) { printf ("%d) %d\n", counter + 1, value[counter]); if (fabs(value[counter] - avg) > max_scarto) max_scarto = fabs(value[counter] - avg); } printf ("Media %.3f, massimo scarto %.3f\n", avg, max_scarto); return 0; } </pre></tt> </blockquote> </div> <br> <b>Soluzione Esercizio 3</b> <div align="justify"> <blockquote> <tt><pre> #include <stdio.h> #define MAX_STRING 100 int main (void) { char string[MAX_STRING] = {'\0'}; printf ("Inserisci la stringa: "); scanf("%s", string); int counter = 0, trovato_doppio = 0; while(counter < MAX_STRING - 1) { int i = counter; while (i < MAX_STRING - 1 && string[i] == string[i + 1] && string[i] != '\0') i++; if (i > counter) { printf("%c\n", string[i]); trovato_doppio = 1; } counter = i + 1; } if (!trovato_doppio) printf("Non ci sono doppi\n"); return 0; } </pre></tt> </blockquote> </div> <br> <b>Soluzione Esercizio 4</b> <div align="justify"> <blockquote> <tt><pre> #include <stdio.h> #include <stdlib.h> #define MAX_VALUE 100 int main (void) { int n; printf ("Inserisci un numero: "); scanf ("%d", &n); srand(time (NULL)); int value[MAX_VALUE] = {0}, freq[100] = {0}, counter = 0, max_freq = 0; for (counter = 0; counter < n; counter++) { value[counter] = (rand() % 100) + 1; printf ("%d) %d\n", counter + 1, value[counter]); freq[ value[counter] - 1 ]++; } for (counter = 0; counter < 100; counter++) { if (freq[counter] > max_freq) max_freq = freq[counter]; } printf ("%d\n", max_freq); return 0; } </pre></tt> </blockquote> </div> <br> <b>Soluzione Esercizio 5</b> <div align="justify"> <blockquote> <tt><pre> #include <stdio.h> int main (void) { float value[10] = {0.0}, max = 0.0; int counter; for (counter = 0; counter < 10; counter++) { printf ("Inserisci un numero: "); scanf("%f", &value[counter]); if (value[counter] > max) max = value[counter]; } for (counter = 0; counter < 10; counter++) { printf ("%.2f\t", value[counter]); int ast = (int)(30.0 * value[counter]/max); while(ast > 0) { printf ("*"); ast--; } printf ("\n"); } return 0; } </pre></tt> </blockquote> </div> <br>
This topic: Programmazione1
>
WebHome
>
Prog1PZ
>
DiarioPZ0708
>
Eser091007
Topic revision: r3 - 2007-10-12 - RiccardoSilvestri
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback