Laboratorio di Informatica I: Programmazione. AA 2002/03.
Esercitazione n. 5
Scopo di questa esercitazione è di familiarizzarsi con operazioni
su allocazione dinamica della memoria, stringhe, arrays, strutture,
union, lettura e scrittura con files.
Al solito, si suggerisce di creare una directory apposita per i files
relativi a questa esercitazione.
- Data le seguenti
dichiarazioni delle stringhe s1 ed s2:
char s1[20]="Pippo";
char s2[30];
verificare ed interpretare il risultato di
sizeof(s1)
sizeof(s2)
strlen(s1)
strlen(s2)
Copiare quindi la stringa s1 su s2 mediante la function di libreria
strcpy. (Utilizzarla come:strcpy(s2,s1); ) Ristampare
il risultato di
strlen(s2)
Infine dichiarare un puntatore a caratteri, pc, allocare
memoria con l' istruzione
pc = (char *)malloc(...);
Dove al posto dei puntini, nella chiamata a malloc, va data la lunghezza
della stringa che vogliamo utilizzare (la possiamo ricavare dai dati ottenuti
fin qui). Infine copiare s1 nell' area riservata a pc e visualizzare la stringa
mediante pc.
- Definire (mediante le istruzioni typedef e struct) un nuovo tipo
dato di nome Complex corrispondente ai numeri complessi dell' algebra. La
struttura corrispondente dovra' avere 2 campi float di nome real e imag. Definire
due function, a valori Complex, che calcolino la somma ed il prodotto di
due numeri di tipo Complex secondo le regole dell' aritmetica dei numeri
complessi (se z1 = (x1,y1) e z2 = (x2,y2) z1+z2 = (x1+x2,y1+y2) e
z1*z2=(x1*x2-y1*y2,x1*y2+x2*y1) )
- Modificare opportunamente il programma usato per ordinare una sequenza
di numeri (Esercitazione n. 4 esercizio n.4 ) in modo da poterlo impiegare
sotto forma di function per ordinare sequenze di stringhe secondo l' ordine
lessicografico (quello del dizionario).
- Definire un array di 10 variabili di tipo struttura formata da due campi
alfabetici per nome e cognome di persona. Leggere le 10 variabili da
standard input ,(es. scanf("%s%s",&persona[i].nome,&persona[i].cognome);
Quindi usare la function di cui all' esercizio precedente, per ordinare l'
array sulla base dei nomi o dei cognomi. Scrivere i dati cosi' ordinati su
standard output. Infine usare il meccanismo delle ridirezioni Unix per leggere
da un file contenente nomi e cognomi e scrivere gli elenchi ordinati su files.
- Utilizzare una union contenente un campo int ed uno float per verificare
il contenuto di bits di una variabile float secondo lo schema
dell' esercitazione n.3, es.n.7.
- Definire un tipo dati "punto2D" mediante una struttura contenente due
campi float per le coordinate x e y. Definire un secondo tipo dati "segmento2D"
come struttura i cui due campi sono di tipo "punto2D". Definire infine una
function che torni un float e di argomento "puntatore a segmento2D"
che calcoli la lunghezza del segmento secondo la formula: lunghezza = radice
quadrata della somma delle differenze delle cordinate x e y dei due punti
estremi dei segmenti. Usarla per calcolare la lunghezza del segmento di estremi
(-1,2) e (3,5).