Tags:
create new tag
view all tags

Programmazione 1    (P-Z) a.a. 2007-08


Docente: R. Silvestri
Esercitatore: A. Carosi
Tutor: J. Stefa



Esercitazioni del 9 ottobre 2007

Esercizio 1

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.

Esercizio 2

Scrivere un programma che prende in input un intero n e poi genera, tramite la funzione rand(), n 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 n = 5 e i numeri generati sono 3, 56, 23, 12, 79 allora la media è 41.2 e il massimo scarto è 38.2.

Esercizio 3

Scrivere un programma che prende in input una stringa tramite la specifica di conversione "%s" (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 "non ci sono doppi". Ad esempio, se la stringa è "tutto e niente" il programma stampa "t", se la stringa è "niente per niente" il programma stampa "non ci sono doppi".

Esercizio 4

Scrivere un programma che prende in input un intero n e genera, tramite la funzione rand(), n 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 n = 10 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).

Esercizio 5

Scrivere un programma che prende in input 10 valori in virgola mobile (tipo float) 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:
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 ******************************









Soluzioni



Soluzione Esercizio 1

#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;
}
Nota per lo studente: provare a risolvere l'esercizio senza utilizzare la funzione matematica fabs().

Soluzione Esercizio 2

#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;
}

Soluzione Esercizio 3

#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;
}

Soluzione Esercizio 4

#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;
}

Soluzione Esercizio 5

#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;
}

Edit | Attach | Watch | Print version | History: r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r3 - 2007-10-12 - RiccardoSilvestri






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback