INFORMATICA 1 ESERCITAZIONI Corso di Laurea in Fisica a.a.
Transcript
INFORMATICA 1 ESERCITAZIONI Corso di Laurea in Fisica a.a.
Il linguaggio C Esercizi vari Esercizio I Si vuole scrivere un programma che: I I I I legga il grado di un polinomio P a coefficienti interi legga i coefficienti di P calcoli il valore di P(x), con x acquisito in input Il primo problema è scegliere la struttura dati opportuna per rappresentare un polinomio generico: candidato naturale è la lista di coefficienti. struct coefficiente { int valore; struct coefficiente *next; } typedef struct coefficiente Coefficiente; typedef Coefficiente *Polinomio; I Seguiamo un approccio top-down prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 69 Il linguaggio C Esercizi vari main() { int n = -1; int coeff; int i, x; Polinomio poli = NULL; do { printf("Inserire il grado (> 0) di un polinomio: scanf("%d", &n); } while (n<=0); "); for(i=n; i>=0; i--) { printf("Inserire il coefficiente del termine di grado %d: scanf("%d", &coeff); InserisciInTesta(&poli, coeff); } ", i); /* Calcolo del polinomio */ printf("Inserire il punto sul quale calcolare P(x): "); scanf("%d", &x); printf("Valore di P(%d): %d\n", x, CalcoloPolinomio(poli, x)); } prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 70 Il linguaggio C I Esercizi vari Definiamo le varie funzioni/procedure utilizzate InserisciInTesta(Polinomio *, int) già vista! I Osserviamo che, per costruzione, i coefficienti sono in ordine crescente di grado (prima il termine noto, poi il coefficiente di grado 1, ecc...) int CalcoloPolinomio(Polinomio P, int x) { int risultato=0; int grado = 0, coefficiente; while (P != NULL) { coefficiente = P->info; risultato = risultato + coefficiente * potenza(x, grado); P = P->next; grado = grado + 1; } return risultato; } prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 71 Il linguaggio C Esercizi vari Esercizi proposti Nel seguito si suppone definito il tipo typedef enum {false, true} boolean 1. Scrivere una funzione che verifichi che, in un array di interi vet di dimensione dim, non vi siano elementi nulli in posizione pari. 2. Scrivere una funzione con prototipo int occMax (int *vet, int dim) che conta il numero di occorrenze dell’elemento massimo nell’array di interi vet di dimensione dim, possibilmente utilizzando al più un ciclo. 3. Scrivere una procedura che, dato un array di caratteri che contiene solo lettere alfabetiche, li ridispone nell’array medesimo in modo che tutte le lettere maiuscole occorrano prima di tutte le lettere minuscole. prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 72 Il linguaggio C Esercizi vari 4. Scrivere una funzione a valori booleani che verifichi la seguente proprietà di un vettore di interi: ogni elemento nella metà di destra del vettore è maggiore di ogni elemento nella metà sinistra del vettore. Attenzione: non si possono utilizzare vetori di supporto, né modificare l’array dato. 5. Definire una funzione con prototipo boolean foo(int *a, int n) che restituisce true se ogni elemento pari dell’array a, di lunghezza n, è immediatamente seguito, nell’array stesso, da un elemento dispari; restituisce false altrimenti. Fornire sia una versione iterativa che una versione ricorsiva. 6. Definire una funzione ricorsiva con prototipo int foo (int n) che calcola il valore 2k , dove k ‘e il numero di occorrenze della cifra 1 nella rappresentazione decimale di n. Si assume che il valore del parametro n sia un intero non negativo. Ad esempio, la chiamata foo(32121) deve restituire 22 = 4, mentre la chiamata foo(42628) deve restituire 20 = 1. prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 73 Il linguaggio C Esercizi vari 7. Definire una funzione ricorsiva con prototipo boolean sumPari(int n) che restituisce true se la somma delle cifre nella rappresentazione di n in base 10 è pari; restituisce false altrimenti. prof. P. Mancarella – Dip.to Informatica INFORMATICA 1 a.a. 07/08 - esercitazioni – pag. 74