Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: {alessandro.saetti,marco.sechi,andrea.bonisoli}@unibs.it) Università degli Studi di Brescia 1 dati dinamiche (1º parte) 1. Scrivere un programma C che acquisisca da tastiera un dato intero n, allochi dinamicamente un vettore di n variabili intere, inizializzi il vettore con dati pseudocasuali compresi tra 1 e 100 ed infine visualizzi i numeri pari nel vettore. 2. Scrivere un programma C che, trattando con strutture dati che aggregano due interi e che rappresentano punti del piano cartesiano, acquisisca da tastiera un punto fintantoché il punto è differente da <0,0>, memorizzando i dati acquisiti in un vettore allocato dinamicamente che si ingrandisce ad ogni nuova acquisizione. Infine, visualizzi i punti nel primo quadrante del piano cartesiano. 2
Esercizio 1 Scrivere un programma C che acquisisca da tastiera un dato intero n, allochi dinamicamente un vettore di n variabili intere, inizializzi il vettore con dati pseudo-casuali compresi tra 1 e 100 ed infine visualizzi i numeri pari nel vettore. 3 Esercizio 2 Scrivere un programma C che, trattando con strutture dati che aggregano due interi e che rappresentano punti del piano cartesiano, acquisisca da tastiera un punto fintantoché il punto è differente da <0,0>, memorizzando i dati acquisiti in un vettore allocato dinamicamente che si ingrandisce ad ogni nuova acquisizione. Infine, visualizzi i punti nel primo quadrante del piano cartesiano. 4
dati dinamiche (2º parte) 3. Scrivere 2 funzioni C che, trattando con strutture dati che aggregono una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolgano i seguenti compiti: Acquisisca da tastiera i dati di un maratoneta, fintantoché il tempo del maratoneta è diverso da 0:0:0, memorizzando i dati acquisiti in un vettore di maratoneti allocato dinamicamente che si ingrandisce ad ogni nuova acquisizione. Produca infine un puntatore all area di memoria allocata e il numero di maratoneti acquisiti. [Suggerimento: MaratonetaPtr inizializzamaratoneti(int *n);] Visualizzi i dati in un dato vettore di n variabili Maratoneta [Suggerimento: void visualizza(maratoneta v[], int n);] Scrivere un programma C che, sfruttando le funzioni precedentemente definite, acquisisca e visualizzi una sequenza di maratoneti. 5 dati dinamiche (2º parte) 4. Scrivere una funzione C che, trattando con strutture dati che aggregono una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolga il seguente compito: dati due tempi, produca 1 se il primo tempo precede il secondo e zero altrimenti. [Suggerimento: int minore(tempo t1, Tempo T2);] precedentemente definita e le funzioni definite per l esercizio 3, acquisisca e visualizzi una sequenza di maratoneti. Visualizzi infine i dati del maratoneta con il miglior tempo. 6
Esercizio 3 Scrivere 2 funzioni C che, trattando con strutture dati che aggregano una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolgano i seguenti compiti: Acquisisca da tastiera i dati di un maratoneta, fintantoché il tempo del maratoneta è diverso da 0:0:0, memorizzando i dati acquisiti in un vettore di maratoneti allocato dinamicamente che si ingrandisce ad ogni nuova acquisizione. Produca infine un puntatore all area di memoria allocata e il numero di maratoneti acquisiti. [Suggerimento: MaratonetaPtr inizializzamaratoneti(int *n);] Visualizzi i dati in un dato vettore di n variabili Maratoneta [Suggerimento: void visualizza(maratoneta v[], int n);] Scrivere un programma C che, sfruttando le funzioni precedentemente definite, acquisisca e visualizzi una sequenza di maratoneti. 7 Esercizio 4 Scrivere una funzione C che, trattando con strutture dati che aggregono una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolga il seguente compito: dati due tempi, produca 1 se il primo tempo precede il secondo e zero altrimenti. [Suggerimento: int minore(tempo t1, Tempo T2);] precedentemente definita e le funzioni definite per l esercizio 3, acquisisca e visualizzi una sequenza di maratoneti. Visualizzi infine i dati del maratoneta con il miglior tempo. 8
dati dinamiche (per casa) 5. Scrivere una funzione C che, trattando con strutture dati che aggregono una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolga il seguente compito: ordini una data sequenza di n maratoneti in base ai loro tempi cronometrici crescenti. [Suggerimento: void ordina(maratoneta v[], int n);] precedentemente definita e le funzioni definite per gli esercizi 3 e 4, acquisisca e visualizzi una sequenza di maratoneti. Visualizzi infine la sequenza di maratoneti ordinati secondo ai loro tempi cronometrici crescenti. 9 dati dinamiche (per casa) 6. Scrivere una funzione C che, trattando con strutture dati che aggregono una stringa e 3 interi e che rappresentano le tempistiche di un maratoneta, svolga il seguente compito: ordini una data sequenza di n maratoneti secondo un dato criterio. [Suggerimento: void ordina(maratoneta v[], int n, int (*confronta)(maratoneta, Maratoneta));] precedentemente definita e le funzioni definite per gli esercizi 3-5, acquisisca e visualizzi una sequenza di maratoneti. Acquisisca infine un numero intero x e, se x è pari a zero, visualizzi la sequenza di maratoneti ordinata secondo tempi cronometrici crescenti; se x è diverso da zero, visualizzi la sequenza ordinata secondo tempi cronometrici descrescenti. 10