Esercizi proposti - Corsi a Distanza
Transcript
Esercizi proposti - Corsi a Distanza
Programmazione in C Problem solving elementare su dati scalari Problem solving elementare su dati scalari Esercizi proposti 1 Esercizio: “Biglietti aerei” Si vuole realizzare un tipo struct, utilizzato per informazioni su biglietti per voli aerei, avente i seguenti campi: • nome: stringa di lunghezza inferiore a 30 caratteri rappresentante il nome del passeggero • prezzo: sotto-struttura di 3 campi (prezzo, tasse, prezzoTotale) indicante il costo del biglietto • partenza: aeroporto di partenza (stringa di 3 caratteri) • arrivo: aeroporto di arrivo (stringa di 3 caratteri) • orarioAndata, orarioRitorno: 2 sotto-strutture contenenti data e ora di partenza del volo di andata a del volo di ritorno. Con tale tipo si vogliono realizzare liste dinamiche. La struct deve quindi essere realizzata come struttura ricorsiva, con puntatore a un dato dello stesso tipo. Si definiscano in C il tipo struct, utilizzando due diversi schemi: (a) una struct a un solo livello, contenente tutti i campi, puntatore ricorsivo compreso; (b) una struct a due livelli, nella quale a primo livello si accede a un puntatore ricorsivo e ad una sotto-struttura contenente il resto dei dati (altre sotto-strutture comprese). 2 Esercizio: “Inizializzazioni” Si dichiari in C un vettore di 100 numeri reali (float), di nome dati. Si dichiarino successivamente 3 variabili puntatore, di nome p0, p1, p2, da inizializzare (direttamente nella dichiarazione), con i valori dei puntatori alla prima, all’ultima e alla casella di indice 50 nel vettore. 3 Esercizio: “Funzione leggiInt” Si realizzi una funzione di nome leggiInt, che acquisisca da tastiera (standard input) un valore intero scritto in base 5. La funzione riceve come parametro “by reference” (passaggio “by value” di puntatore) una variabile intera a cui assegnare il dato acquisito. Se, ad esempio, la funzione leggesse da tastiera il numero 241 (tre caratteri ‘2’, ‘4’ e ‘1’), dovrebbe ritornare il valore intero 71 (2*52 + 4*51 + 1*50). 4 Esercizio: “Visualizzazione di asterischi” Si scriva un programma che esegua le seguenti operazioni: • legga una sequenza di interi positivi da tastiera sino all’introduzione di un numero negativo o nullo che termina l’acquisizione di numeri e quindi l’esecuzione del programma • per ogni intero visualizzi tanti asterischi quanto è indicato dal numero. Esempio Se l’utente introduce i valori 3, 4, 12 e -1 il programma visualizza le seguenti righe: ©2006 Politecnico di Torino 1 Programmazione in C Problem solving elementare su dati scalari *** **** ************ Si tenga presente, inoltre, che sul terminale video le operazioni di input e output si alterneranno, producendo un risultato del tipo: 3 *** 4 **** 12 ************ 5 Esercizio: “Modifica caratteri stringa” Si scriva una funzione che, data una stringa, ne modifichi il contenuto in modo tale che il primo carattere sia convertito in maiuscolo, mentre tutti gli altri in minuscolo. I caratteri non alfabetici non vanno cambiati. 6 Esercizio: “Differenza fra stringhe” Si scriva una funzione in grado di creare (e ritornare) una stringa data dalla differenza di due stringhe s0 ne s1, ricevute come parametri. Ogni carattere della prima stringa (s0) va eliminato dalla stringa risultato se compare nella seconda stringa (s1). La stringa risultato generata va allocata dinamicamente. 7 Esercizio: “Funzione leggiNomi” Si scriva una funzione leggiNomi, in grado di acquisire da file un elenco di nomi, uno per riga, contenenti eventuali spazi, ritornando un vettore (dinamico) di stringhe allocate dinamicamente, di ognuna di lunghezza pari al nome corrispondente. La prima riga del file contiene il numero di nomi (n) mentre le successive n righe contengono i nomi, uno per riga. 8 Esercizio: “Duplicazione stringa” Si ridefinisca la struct dell’esercizio 1, utilizzando per il campo nome una stringa dinamica. Si scriva poi una funzione in grado di copiare il contenuto di una struttura in un’altra, duplicando la stringa nome. La struttura destinazione viene ricevuta “by reference”, mentre la sorgente viene ricevuta “by value”. 9 Esercizio: “Duplicazione stringa – versione 2” Utilizzando la struct definita nell’esercizio 7, si scriva una funzione in grado di ritornare (il puntatore a) un duplicato di una struct ricevuta come parametro. La struttura da copiare viene ricevuta “by value”. ©2006 Politecnico di Torino 2 Programmazione in C Problem solving elementare su dati scalari 10 Esercizio: “Duplicazione stringa – versione 3” Si ripeta l’esercizio 9, supponendo che la struttura da copiare venga ricevuta “by reference”. 11 Esercizio: “Cerca elemento” Sia data una lista di struct quali quelle utilizzate negli esercizi 7,8,9. Si scriva una funzione che, ricevuti come parametri il puntatore al primo elemento della lista e un intero i, trovi l’i-esimo elemento della lista (se esiste) e ne ritorni il puntatore. 12 Esercizio: “Lista circolare” Sia data una lista di struct quali quelle utilizzate negli esercizi 7,8,9. Si scriva una funzione che, ricevuto come parametro il puntatore al primo elemento della lista, la trasformi in una lista circolare. Si tratta cioè di fare in modo che l’ultimo elemento in lista punti, come successore, al primo. La funzione ritorna il puntatore al primo elemento. ©2006 Politecnico di Torino 3