Esercitazione #1



Esercizi introduttivi

  • [1] Un anno bisestile è identificato da un intero maggiore di 1584 che sia divisibile per 4 ma non per 100, oppure che sia divisibile per 400.

    Scrivere un programma che chieda in input un anno e stampi BISESTILE se l'anno inserito è bisestile, e NON BISESTILE altrimenti.

    Soluzione: bisestile.c


  • [2] Scrivere un programma che legga un valore di tipo float, uno di tipo char e poi ancora uno di tipo float e infine:

    • se il carattere letto è una delle quattro operazioni aritmetiche allora calcoli e stampi il risultato della corrispondente operazione sui due valori numerici;
    • se è un altro carattere allora stampi un messaggio d'errore.

    Soluzione: operazione.c


  • [3] Scrivere un programma potenze.c che legga un valore intero positivo e restituisca la prima potenza di 2 maggiore o uguale al valore letto. Compilare il codice sorgente per ottenere un file eseguibile con nome Potenze2.

  • Soluzione: potenze.c


  • [4] Scrivere un programma serie.c che legga una serie di valori interi (terminata dal valore 0), e che restituisca in output la somma, il valor medio, il massimo e il minimo dei valori letti (escludendo dal computo il valore 0 che termina la serie). Compilare il codice sorgente per ottenere un file eseguibile con nome Serie.

    Attenzione: la media potrebbe non essere un valore intero! Usare una variabile di tipo float per memorizzare il risultato ad ogni nuova lettura. Usare la sequenza di escape %f per visualizzare il valore della media.
    Consiglio: Prevedere il caso della sequenza vuota (attenti alla divisione per 0!).

  • Soluzione: serie.c


  • [5] Un palindromo è un numero o una frase di testo che si può leggere allo stesso modo indipendentemente dalla direzione della lettura (da sinistra verso destra oppure da destra verso sinistra).

    Scrivere un programma palindromo.c che legga un valore intero di esattamente 5 cifre e determini se si tratta di un numero palindromo oppure no. Compilare il sorgente nel file eseguibile CheckNum.

  • Soluzione: palindromo.c


  • [6] Scrivere un programma che chieda all'utente di inserire un numero intero compreso tra 0 e 10000 (estremi inclusi) e fornisca in output la cifra più alta contenuta nel numero letto. Se il numero non è compreso nell'intervallo specificato deve essere visualizzato un messaggio di errore.
  • Soluzione: cifraMassima.c


  • [7] Considerate le due seguenti espressioni

    1. c = (a = 2) + (b = 4);
    2. d = (printf("Uno strano comando \n")) * 2 + 4;

    dove a, b, c e d sono variabili di tipo intero. Rappresentano comandi legali in C? In caso positivo, che valore hanno le variabili dopo la loro esecuzione, supponendo che prima valgano tutte 0 ?

  • Soluzione: testing.c


  • [8] Scrivere un programma schedina.c che generi casualmente due colonne per giocare la schedina del totocalcio di domenica prossima. Fare in modo che i simboli 1 e X siano equiprobabili, mentre 2 abbia probabilità del 20%. Compilare il codice sorgente per ottenere un file eseguibile con nome vincente. Salvare la stampa delle due colonne nel file colonne.txt
     
    Per la generazione di numeri casuali, si usi la funzione rand( ), parte della libreria stdlib.h (che va importata). L'invocazione restituisce un numero decimale casuale compreso tra 0 e MAX_RAND, che può variare a seconda delle implementazioni.

    La generazione è ovviamente solo pseudo-casuale. Per variare il seme, ovvero la base del generatore psudocasuale, si utilizza la funzione srand, che necassita di un parametro di tipo unsigned. Spesso, tale parametro è ottenuto mediante la funzione time, della libreria time.h, con parametro NULL. Ad esempio, per assegnare alla variabile intera numeroCasuale un numero casuale intero compreso tra 0 e 5, si può utilizzare l'istruzione

    #include <stdlib.h>
    #include <time.h>
    ...
    srand(time(NULL));
    numeroCasuale = rand( ) % 6;
  • Soluzione: schedina.c