Questa pagina contiene una lista di esercizi di preparazione per l'esame di Informatica (CIV) per Ingegneria Civile. La lista verra' integrata successivamente con nuovi esercizi, quindi si consiglia di controllare questa pagina periodicamente. Verrano inoltre pubblicate alcune soluzioni complete o sotto forma di traccia. Gli studenti sono invitati a scrivermi una mail per segnalare eventuali errori, imprecisioni, o commenti utili per migliorare l'elenco degli esercizi. Gli esercizi hanno un numero di stelline * pari al gradi di difficolta', da 1 a 3. La mia mail e' malago CHIOCCIOLA di PUNTO unimi UNALTROPUNTO it. Potete inoltre scrivermi per fissare un appuntamento per ricevimento studenti presso il DEI nella sede di Rimembranze di Lambrate.
History
2012-12-03 pubblicazione prima versione del documento
2012-12-04 pubblicazione seconda versione del documento
2012-12-21 nuovi links
Links
Pagina personale del Dott. Andrea Romanoni, con materiale didattico relativo alla seconda parte del corso
Consigli per l'esame
** A1) Scrivere una funzione per determinare se un numero intero e' primo o meno, e stamparne i fattori primi. Se il numero inserito non e' positivo, chiedere nuovamente l'inserimento all'utente. Per esempio, dato 10 come input, il programma deve stampare:
10 non e' primo, la scomposizione in fattori primi e' 1x2x5=10
* A2) Scrivere una funzione per il calcolo del fattoriale di un numero intero positivo mediante successive moltiplicazioni. Il fattoriale di n e' uguale a
n x (n-1) x (n-2) x ... x 1Il fattoriale di 0 e' uguale ad 1 per definizione. Utilizzare tale funzione per il calcolo del coefficiente binomiale C(n,k) con 0<=k<=n, mediante la formula
C(n,k) = n! / (k! (n-k)!)Si veda qui per ulteriori dettagli relativi al coefficiente binomiale.
* A3) Scrivere un programma che dati a,b e c, fornisca le soluzioni dell'equazione di secondo grado
a x^2 + b x + c = 0
* A4) Calcolare il m.c.m. e il M.C.D di due numeri interi forniti in input al programma da parte dell'utente. Verificare che i numeri inseriti non siano negativi e in caso lo fossero, chiedere all'utente di inserirli nuovamente.
* A5) Scrivere un programma che generi i primi k (dove k e' fornito dall'utente) numeri di Fibonacci. Il primo e il secondo numero della serie sono per definizione 0 e 1. Dal terzo in poi la regola e' che il numero n-esimo e' calcolato come la somma dei numeri in posizione (n-1) e (n-2)
F_n = F_(n-1) + F_(n-2)
*/** A6) Scrivere un programma che dato un intero non negativo ne fornisca la rappresentazione in formato binario, e viceversa. Rappresentare i numero binari come array di interi (0/1)
** B1) Scrivere una funzione che date tre stringhe a,b e c, cerchi sostituisca in a le occorrenze di b con c. Esempio
sostituisci("occhio per occhio","occhio","dente");deve modificare la prima stringa in "dente per dente".
** B2) Scrivere un programma che richieda una sequenza di numeri interi all'utente fino a quanto l'utente non intende inserire più numeri
Suggerimento: dopo l'inserimento di ogni numero chiedere all'utente se vuole inserire un altro numero. I numero saranno salvati in un array.
1) verificare se la sequenza inserita e' crescente, decrescente, non crescente, non decrescente, costante o se non e' nessuno di questi casi
2) Stampare la sequenza dei numeri inseriti in ordine crescente
3) Stampare una nuova sequenza dove i numeri presenti più volte sono stati eliminati dalla sequenza originaria
Suggerimento: per i punti 2) e 3) implementare una funzione che crei un
nuovo array partendo da quello originale, secondo le indicazioni date,
e poi stamparlo dopo aver implementato la funzione
stampaArray(int a[], int length);
* B3) Scrivere un programma che consenta all'utente di inserire una sequenza di numeri fino a quando l'utente non vuole inserirne altri
Suggerimento: dopo ciascun numero inserito chiedere all'utente se
vuole inserire un altro. Chiedere all'utente un numero j e cancellare dall'array il numero in posizione j-esima.
* B5) Scrivere un programma che consenta all'utente di inserire due diverse sequenze di numeri di lunghezza arbitraria (suggerimento: dopo ciascun numero inserito chiedere all'utente se vuole inserire un altro). Creare e stampare un array con i numeri che sono presenti in entrambe le sequenze.
** B6) Scrivere una funzione che data una parola in input, calcoli
il numero di cifre (0-9), di vocali e di consonanti presenti nella
parola.
Suggerimento: per semplificare i programma, non utilizzare un "if"
oppure un "case" di uno switch per ogni cifra, ma piuttosto castare ciascun char ad int e
consultare la tabella ASCII
per capire per che range di valori, una volta effettuato il cast, si ottengono dei numeri, delle consonanti, etc etc.
L'identificazione delle vocali rispetto alle consonanti va cmq fatta mediante if oppure switch.
* B6) Scrivere una funzione che dica se una parola e' palindroma, ovvero se e' uguale a se stessa anche se letta al contrario. Esempio: la parola OTTO e' palindroma, cosi' come AVEVA, RADAR, INGEGNI, OSSESSO, etc etc.
*/** B7) Scrivere una funzione che data una parola, la codifichi in un nuovo alfabeto, ottenuto traslando l'alfabeto corrente di un predeterminato numero di lettere. Ad esempio, data una traslazione di 2 posizioni avremo le seguenti sostituzioni:
A->C, B->D, C->E, ..., Z->B.La parola CIAO diventa quindi EKCQ. Se le traslazioni fossero state 4, avremmo avuto
A->E, B->F, C->G, ..., Z->Dcosi' che CIAO sarebbe diventa GMES. La funzione deve prendere come input la parola da codificare e un parametro che identifica di quanto traslare l'alfabeto. Scrivere una funzione analoga per la decodifica della parola.
* C1) Definire un tipo tData, costituito da giorno, mese e anno (interi) e implementare le seguenti funzioni per:
1) la stampa nel formato 02/12/2012
2) la verificare se la data e' valida (ad esempio il mese e' incluso tra 1 e 12). La funzione deve ritornare 1 se la data e' corretta, 0
altrimenti
3) per indicare quale data viene prima tra due date fornite come parametri (valore di ritorno -1 se la prima viene prima della seconda, 0 se le
date sono uguali, +1 se la seconda data viene prima)
4) date due date, calcolare il numero di giorni che intercorrono tra la prima e la seconda
**/*** (lungo) C2) Scrivere un programma per l'inserimento di punti nel piano cartesiano. I punti vengono rappresentati in memoria come un array di variabili di tipo tPunto.
Il programma deve visualizzare a video il seguente menu', da cui
l'utente puo' scegliere cosa fare. Il programma termina quando l'utente
seleziona la voce "Esci" premendo l'opportuno tasto. Scrivere una
funzione dal prototipo
1) Stampa il numero di punti inseriti fino a questo momento e le rispettive coordinate x e y
2) Inserisci un nuovo punto
3) Calcola la distanza tra l'i-esimo e il j-esimo punto inserito. Gli
interi i e j vengono chiesti all'utente e devono essere validi, ovvero
interi positivi inferiori al numero di punto inseriti, altrimenti
visualizzare un messaggio di errore
4) Calcolare la lunghezza della spezzata identificata dalla sequenza
dei punti inseriti fino a questo momento
5) Identificare le coordinate del piu' piccolo rettangolo (con lati
paralleli gli assi x e y) che contenga tutti i punti inseriti fino a
questo momento
6) Date le coordinate del centro di una circonferenza e un raggio, stampare le coordinate del punti inseriti fino a questo momento che sono contenuti nel cerchio.
Suggerimento: date le coordinate (a,b) per il centro della
circonferenza di raggio r, verificare per ogni punto di coordinate
(x,y) se (x-a)^2+(y-b)^2 <=r^27) Calcolare le coordinate di un nuovo punto che sia baricentro dei punti dati. Suggerimento: ciascuna coordinata sara' la media delle coordinate dei punti inseriti. Calcolare inoltre le coordinate del punto inserito più vicino al baricentro identificato precedentemente.
**/*** (lungo) C3) Scrivere un programma per la gestione delle matricole iscritte al Politecnico. Ciascuna persona viene rappresentata mediate una
struttura
dati
tStudente che contiene: nome, cognome, data di nascita, data di iscrizione al politecnico, matricola. Le date devono essere rappresentate mediante
strutture dati ad hoc chiamata tData. Per ciascuno studente inoltre e' possibile registrare i voti degli esami. La struttura dati della matricola
deve quindi contenere un array di variabili di tipo tRegistrazione, dove ogni variabile contiene il nome dell'esame, il voto registrato (da 18 a
30), una indicazione se e' stato assegnata la lode, la data di registrazione del voto e i crediti dell'esame. Gli studenti vengono salvati in un
array
di tStudente
Il programma deve visualizzare a video il seguente menu', da cui l'utente puo' scegliere cosa fare. Il programma termina quando l'utente seleziona
la voce "Esci" premendo l'opportuno tasto. Scrivere una funzione dal prototipo "char menu()" che si occupi di stampare il menu e ritornare il tasto premuto dall'utente.
Implementare per ciascuna voce del menu una o piu' opportune funzione. Il menu deve avere le seguenti voci:
1) Stampa il numero e l'elenco di studenti (con nome, cognome, matricola, data nascita, data iscrizione) inseriti fino a questo momento
2) Inserisci un nuovo studente nell'archivio
3) Registra un voto di uno studente inserito, specificando la matricola, data registrazione esame, voto, lode si/no, numero crediti dell'esame
4) Stampa l'elenco dei voti di uno studente, specificando la sua matricola e la media dei voti pesate sui crediti
5) Dato un numero, stampa l'elenco degli studenti che hanno quel nome (senza elenco esami)
6) Dato una media e un numero minimo di esami, stampa l'elenco degli studenti (senza elenco esami) con media superiore a quella indicata e numero
di esami superati superiore a quello inserito
7) Esci dal programma
Suggerimento: implementare e verificare il funzionamento di un punto alla volta del programma.
Elenco playlist2) Crea nuova playlist, specificando il nome della playlist (questa diventa la playlist corrente)
1. Jazz < playlist corrente
2. Rock
3. Liscio