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