Corso di Laurea in Ingegneria Elettronica - Università di Roma "La Sapienza"

Corso di Fondamenti di Informatica - A.A. 2001/2002

Quarta Esercitazione Autoguidata

Obiettivi dell'esercitazione:

ESERCIZIO 1

Scrivete un programma per il calcolo del baricentro di un poligono.

Il programma deve utilizzare una funzione che:

  1. riceve come parametro il numero n dei vertici del poligono;
  2. legge le coordinate (x,y) di ciascun vertice (n coppie di reali);
  3. calcola le coordinate del baricentro e le restituisce alla funzione chiamante (in modo opportuno attraverso parametri per indirizzo).

La funzione main:
  1. legge da tastiera il numero di vertici del poligono;
  2. attiva la funzione precedente passandole tale numero come parametro;
  3. stampa le coordinate del baricentro.

ESERCIZIO 2

Scrivete la funzione ricorsiva potenza che riceve come parametri due valori interi, base ed esponente, e restituisce il valore della base elevata all'esponente.

Utilizzate la funzione in un programma che legge i due valori e stampa la potenza.

Dopo aver compilato ed eseguito il programma, avviate l'esecuzione passo-passo, immettendo, ad esempio, i valori 4 e 3 rispettivamente per la base e per l'esponente (eventualmente ispezionate le variabili di interesse).

Durante l'esecuzione passo-passo, visualizzate la pila delle attivazioni tramite il comando Stack del menù Debug: nella finestra di debugging verrà mostrata la pila delle attivazioni nello stato corrente del programma che consente di seguire le chiamate delle funzioni. Le informazioni contenute nella pila sono aggiornate ogni volta che viene eseguita una nuova istruzione nell'esecuzione passo passo. Ad ogni invocazione della funzione potenza viene aggiunto un nuovo record alla pila che contiene

ESERCIZIO 3 (opzionale)

Nella cartella fondeln, create la cartella driveint. Copiate il file driveint.c dalla cartella condivisa alla cartella driveint appena creata ed aprite il file all'interno di LCC-Win32. Il file contiene un programma che implementa un menù per verificare il risultato dell'esecuzione di alcune funzioni su interi.

Nel programma mancano le definizioni di alcune funzioni: si richiede di completarlo. In particolare, le funzioni da aggiungere devono implementare le operazioni aritmetiche di somma, prodotto ed esponenziazione tra interi nonnegativi, senza utilizzare gli operatori del C "+" e "-" sugli interi, ma utilizzando solo l'istruzione di assegnazione, il confronto tra due variabili di tipo intero e gli operatori di incremento e decremento.

Le funzioni vanno realizzate in modo ricorsivo, utilizzando le seguenti definizioni induttive:

somma prodotto esponenziazione
somma(x,y) = x
se y = 0
prod(x,y) = 0
se y = 0
esponente(x,y) = 1
se y = 0
somma(x,y) = 1 + (somma(x, y-1))
se y > 0
prod(x,y) = somma(x, prod(x, y-1))
se y > 0
esponente(x,y) = prod(x, esponente(x, y-1))
se y > 0