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