Laboratorio di Programmazione & Informatica 1
A.A. 2019-2020ESERCITAZIONI IN LABORATORIO
Questa pagina contiene gli esercizi proposti durante le lezioni di laboratorio. Le soluzioni degli esercizi (proposte da voi studenti e corrette in aula) si trovano nella scheda file del canale LezioniLaboratorio del corso su Teams.
- Laboratorio 7 del 2 aprile : Esercizi assegnati (Codice lab07_x):
- Scrivere un programma che prende in input un numero positivo N e scrive in output il valore di n!. Il programma deve utilizzare una funzione ricorsiva int fatt(int) per calcolare tale numero.
- Scrivere un programma che prende in input un numero positivo B e un numero positivo N e scrive in output il valore della potenza N-esima di B. Il programma deve utilizzare una funzione ricorsiva int pot(int,int) per calcolare tale numero.
- Scrivere un programma che prende in input un numero positivo N e scrive in output l' N-esimo numero di Fibonacci. Il programma deve utilizzare una funzione ricorsiva int Fibon(int) per calcolare tale numero.
- Scrivere una funzione ricorsiva int fatt(int) per calcolare il fattoriale di un numero.
Usando la formula e=1+ 1/1! + 1/2! + .... 1/n!+...., scrivere un programma che calcola una approssimazione di e con errore a scelta dell'utente. L'utente dovrà inserire un errore tipo 0,0001 e il programma dovrа selezionare i termini della serie in base all'errore fissato. Tale programma utilizza la funzione fattoriale sopra descritta. (non usare la libreria matematica).- Scrivere un programma che risolve il problema delle Torri di Hanoi in modo iterativo.
- Laboratorio 6 del 31 marzo : Esercizi assegnati (Codice lab06_x):
- Riscrivere l'esercizio Lab04_1 utilizzando la funzione vista a lezione:
void stampaRiga(char simb, int lung) { int i; for ( i= 1; i <= lung; i++) printf("%c", simb); }- Scrivere una funzione che, dato un numero intero positivo, calcola se e' un numero primo (non stampa messaggio ma restituisce valore booleano). Scrivere poi un programma, che utilizza questa funzione, che scrive sullo schermo tutti i numeri primi <1000.
- Def.: un numero si dice perfetto se è uguale alla somma dei suoi divisori (escluso il numero stesso). Scrivere una funzione che, dato un numero intero positivo, calcola se e' un numero perfetto (non stampa messaggio ma restituisce valore booleano). Scrivere poi un programma, che utilizza questa funzione, che scrive sullo schermo tutti i numeri perfetti <10000.
- Def.: Un numero naturale n si dice quadratoso se è un quadrato ed inoltre cancellando ad n una delle sue cifre si ottiene ancora un quadrato.
Ad esempio 1369 è quadratoso infatti 1369=372 e, cancellando la cifra 3, si ottiene 169=132 . Analogamente 2025= 452 è quadratoso infatti eliminando la prima cifra si ottiene 025 = 25 = 52 .
Scrivere una funzione che, dato un numero intero positivo, calcola se e' un numero quadratoso (non stampa messaggio ma restituisce valore booleano). Scrivere poi un programma che scrive in output tutti i numeri quadratosi di 4 cifre.- Laboratorio 5 del 26 marzo : Esercizi assegnati (Codice lab05_x):
- Scrivere un programma che chiede all’utente di inserire tre numeri interi giorno, mese, anno corrispondenti ad una data e poi controlla se si tratta di una data valida. (Il giorno del mese deve essere "compatibile" con il mese secondo la nota filastrocca e non dimenticare gli anni bisestili!) Usare una istruzione switch .
Se la data è valida la riscrive, scrivendo il mese "a parole". Se la data non è valida, sullo schermo si scrive anche il perchè.
(Da realizzare utilizzando l' istruzione switch . )
Si ricorda che gli anni bisestili sono quelli divisibili per 4, con eccezione dei secoli che devono essere divisibili per 8 (ad esempio il 1900 non è stato bisestile). Assumiamo valori di anno validi a partire dall'inizio del calendario gregoriano 1582 e fino al 2100.
CURIOSITA': il calendario gregoriano fu promulgato da papa Gregorio XIII a villa Mondragone adesso proprierà dell'Università di Roma Tor Vergata.- Scrivere un programma che prende in input 3 numeri interi inseriti da tastiera e li scrive in output in ordine crescente utilizzando in totale soltanto 3 confronti (con operatore <= ) tra i numeri stessi all'interno di istruzioni if-else annidate. No variabili supplementari (solo 3 variabili per i 3 numeri).
- Scrivere un programma che prende in input dei valori interi positivi ( l'immissione termina quando l'utente inserisce il valore 0) e restituisce in output quanti tra quelli inseriti sono > 100, quanti sono >50 e <= 100 e quanti sono <=50. Il programma dovrà utilizzare soltanto 4 variabili e istruzioni if-else annidate e dovrà ignorare gli input negativi segnalandolo all'utente.
- Scrivere un programma che chiede all'utente di inserire un numero intero x e poi scrive in output quanti sono i divisori di x (escluso 1 e x stesso). Se non ci sono divisori non banali scrive sullo schermo che x è un numero primo.
- Scrivere un programma per risolvere il seguente quesito: Esiste un numero formato da 8 cifre che moltiplicato per un altro numero dà come risultato un numero di 9 cifre uguali?
- Laboratorio 4 del 24 marzo : Esercizi assegnati (Codice lab04_x):
- Scrivere un programma che legge da tastiera un numero intero x (positivo) e stampa sullo schermo un quadrato (pieno) di lato x costituito da simboli "*" nelle posizioni sopra la diagonale e simboli "o" sotto la diagonale. (Utilizzare istruzioni for e non utilizzare istruzioni if)
- Scrivere un programma (Utilizzare istruzioni for e non utilizzare istruzioni if) che chiede all’utente di inserire un intero x , 3 ≤ x ≤ 30 , e disegna un rombo di lato x come nel seguente esempio: (esempio per x=4 e c=o)
o ooo ooooo ooooooo ooooo ooo o- Scrivere un programma che stampa tutti i numeri interi tra 1 e 300 in righe contenenti 15 numeri ciascuna. I numeri devono essere ben incolonnati. Inoltre, se il numero termina per 7 oppure è divibile per 7 NON deve essere stampato ed nel suo posto deve essere scritto BUM.
- Scrivere un programma che calcola quanti sono i triangoli rettangoli con lati interi ≤ 500.
Opzionale : produrre in input tutte le terne pitagoriche trovate.
- Laboratorio 3 del 19 marzo : Esercizi assegnati (Codice lab03_x):
In tutti gli esercizi seguenti usare istruzione while.
- Scrivere un programma che richiede l'inserimento di 10 numeri interi e alla fine scrive sullo schermo il valore massimo e il secondo più grande che sono stati inseriti. Usare un solo ciclo while .
- Scrivere un programma che legge da tastiera una sequenza di numeri interi positivi. L'immissione termina quando l'utente inserisce il valore 0. In output viene riportato il numero di volte che nella sequenza compaiono due numeri consecutivi uguali. Esempio: nella sequenza 5 6 6 5 3 3 4 compaiono due volte due numeri consecitivi uguali; nella sequenza 3 3 3 4 2 2 compaiono tre volte due numeri consecutivi uguali.
- Scrivere un programma che legge un valore di tipo double, uno di tipo char e poi ancora uno di tipo double e infine fa in modo che: se il carattere letto è '+' allora stampa la somma dei due valori numerici; se il carattere è '*' allora stampa il prodotto dei due valori numerici; se è un altro carattere allora stampa un messaggio di errore.
(Utilizzare l'istruzione if..else)
ATTENZIONE a svuotare il buffer dopo l'immissione dell'int.- Numeri di Fibonacci. I numeri di Fibonacci, f1, f2, ... fn sono definiti ricorsivamente come segue:
f1=1
f2=1
...
fn = fn-1 +fn-2
Scrivere un programma che prende in input un numero positivo N e scrive in output l'N-esimo numero di Fibonacci. (ATTENZIONE! Testare solo per numeri piccoli)
- Laboratorio 2 del 17 marzo : Esercizi assegnati (Codice lab02_x):
In tutti gli esercizi seguenti usare istruzione while.
- Scrivere un programma che richiede all'utente un numero intero x e poi scrive sullo schermo una linea composta da x asterischi.
- Scrivere un programma che richiede all'utente di inserire 5 numeri interi e poi scrive sullo schermo la somma e la media.
- Scrivere un programma che richiede l'inserimento di 10 numeri interi e alla fine scrive sullo schermo quanti numeri pari sono stati inseriti.
- Scrivere un programma che richiede l'inserimento di 10 numeri interi e alla fine scrive sullo schermo il valore massimo che e' stato inserito.
- Scrivere un programma che richiede l'inserimento di una serie di numeri interi positivi; l'inserimento termina quando l'utente inserisce 0 o un valore negativo. Al termine dell'inserimento, sullo schermo viene scritta la somma e la media dei numeri inseriti.
- Scrivere un programma che richiede all'utente di inserire 10 numeri interi compresi tra 1 e 100 (estremi inclusi), ne calcola la somma e la scrive sullo schermo.
Attenzione: ogni volta che l'utente inserisce un valore errato (fuori dall'intervallo previsto) il programma dovra' segnalare l'errore e richiedere un altro numero... il ciclo di immissione termina SOLO quando sono stati immessi 10 numeri VALIDI.
- Laboratorio 1 del 3 marzo : Esercizi assegnati Codice lab01_x):
- Scrivere un programma che, utilizzando degli asterischi, disegna sullo schermo un quadrato (pieno) di lato 8 e poi sotto un triangolo rettangolo (pieno) di altezza 8.
- Scrivere un programma che legge da tastiera 5 numeri interi e scrive sullo schermo la loro somma.
- Scrivere un programma che legge da tastiera 5 numeri interi e scrive sullo schermo la loro somma e la loro media. Il programma dovra' utilizzare solo 2 variabili .
- Scrivere un programma che chiede all'utente di inserire da tastiera un numero intero di 5 cifre e lo riscrive "in verticale" cioe' mettendo un accapo dopo ogni cifra. (Sugg. usare l'operatore % che calcola il resto della divisione intera.)