Sei sulla pagina 1di 16

Gabriele D'Amico

4^D Informatica

27/10/2010

RELAZIONE 4 - INDICE
TESTO...........................................................................PAG 1 ANALISI GENERALE.........................................................PAG 2, 3 TABELLA DATI.................................................................PAG 4 DIAGRAMMA PROGRAMMA PRINCIPALE..............................PAG 4 SVILUPPO SOTTOPROGRAMMA "carica"..............................PAG 5, 6 SVILUPPO SOTTOPROGRAMMA "menu"............................. PAG 7 SVILUPPO SOTTOPROGRAMMA "aggiungi"..........................PAG 8, 9 SVILUPPO SOTTOPROGRAMMA "elimina"............................PAG 10, 11 SVILUPPO SOTTOPROGRAMMA "positivo"............................PAG 12, 13 SVILUPPO SOTTOPROGRAMMA "visualizza".........................PAG 14, 15

1 - TESTO
Si scriva un programma che dopo aver memorizzato una successione di numeri interi, la cui lunghezza precisata in input, permetta all'utente le seguenti operazioni: 1. Visualizzare la successione di numeri interi. 2. Visualizzare il numero di elementi positivi all'interno della successione. 3. Aggiungere un elemento in coda alla successione. 4. Eliminare l'ultimo elemento della successione. 5. Uscita dal programma.

Si richiede: Stesura dell'algoritmo metodologia Top-Down. che risolve il problema applicando la

Documentazione del progetto. Codifica in linguaggio C.

2 - ANALISI GENERALE
Il testo richiede la stesura di un programma che permetta la gestione di un vettore dinamico (dunque verr utilizzata la memoria dinamica) di cui la dimensione specificata dall'utente in input. All'interno del vettore verr memorizzata una successione di numero interi inseriti in input dall'utente. Dopo aver opportunamente memorizzato la successione di numeri, l'utente avr a disposizione 4 opzioni che potr selezionare tramite un apposito men di scelta (Switch Case). Inoltre ci sar una quinta opzione, ovvero l'uscita dal programma. Dunque l'utente dovr inserire un valore compreso tra 1 e 5 per poter selezionare una delle opzione, altrimenti comparir un messaggio che segnaler l'errore, in modo tale da poter reinserire un nuovo valore valido. Per la realizzazione del programma verr utilizzata una struttura contenente al suo interno la dimensione del vettore e il puntatore a partire dalla quale memorizzato il vettore stesso. Inoltre verr utilizzata la modalit Top-Down. Dunque il programma verr scomposto in sottoprogrammi che verranno richiamati opportunamente dal programma principale. Per la gestione del vettore si utilizzer la funzione "calloc" e la funzione "realloc". La prima funzione servir per allocare in memoria dinamica (Heap Segment) il vettore, la seconda funzione servir per reallocare il vettore stesso. La funzione "calloc" (clear allocation) alloca vettori dinamici. Questo il suo prototipo:
void * calloc (int ,int );

Per poter operare ha bisogno di due parametri: il numero di componenti del vettore, e la dimensione del singolo elemento espressa in byte. Inoltre la funzione restituisce un puntatore generico, che dovremo trasformare, con l'operazione di casting, in un puntatore di nostro interesse. Dunque il puntatore che restituisce questa funzione corrisponde al puntatore a partire dalla quale memorizzato il vettore. Se non c' spazio sufficiente, la funzione restituisce NULL (costante predefinita che corrisponde a 0).

3
La funzione "realloc" (reallocation) realloca spazio in memoria. Questo il suo prototipo:
void * realloc (void * ,int );

Per poter operare ha bisogno di due parametri: il puntatore precedentemente utilizzato nella funzione "calloc", e la nuova dimensione da allocare espressa in byte. La funzione restituisce un nuovo puntatore a partire dalla quale memorizzato il vettore. Anche in questo caso dovremo utilizzare l'operatore "cast" per trasformare il tipo di puntatore. Anche la funzione "realloc" restituisce NULL se non c' spazio sufficiente. Il casting l'azione che consente di trasformare la rappresentazione di un dato dal suo tipo originale ad un altro. Il linguaggio di programmazione per la codifica dell'algoritmo il linguaggio C. Dunque bene precisare i meccanismi di trasmissione dei parametri dall'ambiente globale ai singoli sottoprogrammi: dato che si utilizza il linguaggio C, tutte le variabili sono trasmesse ai sottoprogrammi per valore, ad eccezione dei vettori, delle matrici e delle stringhe, trasmesse ai sottoprogrammi per riferimento o indirizzo. In fase di codifica verranno utilizzate le seguenti librerie: stdio.h stdlib.h

I sottoprogrammi avranno i seguenti nomi (sono indicati i prototipi con i relativi parametri formali):
struct ele void void struct ele struct ele

carica visualizza positivo aggiungi elimina

(void); (struct ele); (struct ele); (struct ele); (struct ele);

4
- TABELLA DATI
Variabili globali

Nome v scel p dim

Tipo struct ele Intero Puntatore ad intero Intero

Funzione Variabile che ci permette di accedere ai campi della struttura Variabile di scelta Puntatore dalla quale memorizzato il vettore Dimensione del vettore dinamico

Vincoli 0< scel < 6 dim > 0

- DIAGRAMMA PROGRAMMA PRINCIPALE

5 - SVILUPPO SOTTOPROGRAMMA "carica"


- ANALISI SOTTOPROGRAMMA "carica"

In questo sottoprogramma verranno caricati gli elementi della successione, dunque verr caricato il vettore dinamico. Verr inoltre letta la grandezza della successione, che deve essere maggiore di 0. Successivamente viene richiama la funziona "calloc", che restituisce il puntatore. Se il valore del puntatore diverso da NULL, allora si avvia un ciclo for che ci permette il caricamento degli elementi della successione. Se il valore del puntatore uguale a NULL, allora comparir un messaggio e la dimensione del vettore diventer 0. Dopo l'if then else verr restituito "a". E' un sottoprogramma funzionale. Non ha parametri. Prototipo:

struct ele carica (void);

- TABELLA DATI SOTTOPROGRAMMA "carica"

Variabili locali

Nome i a

Tipo Intero Struct ele

Funzione Indice ciclo for Variabile che ci permette di accedere ai campi della struttura

Vincoli -

6
- DIAGRAMMA SOTTOPROGRAMMA "carica"

7 - SVILUPPO SOTTOPROGRAMMA "menu"


- ANALISI SOTTOPROGRAMMA "menu"

In questo sottoprogramma verr letta in input la variabile di scelta ("scel") che permetter di selezione l'opzione desiderata. Il valore della variabile "scel" dovr essere un numero compreso tra 1 e 5, estremi inclusi, altrimenti comparir un messaggio che segnaler l'errore, in modo tale da poter reinserire un nuovo valore valido. Il seguente sottoprogramma di tipo funzionale. Non ha parametri. La funzione restituisce il valore di "scel". Prototipo:
int menu (void);

- TABELLA DATI SOTTOPROGRAMMA "menu"


Variabili locali

Nome scel

Tipo Intero

Funzione Variabile di scelta

Vincoli 1 scel 6

- DIAGRAMMA SOTTOPROGRAMMA "menu"

8 - SVILUPPO SOTTOPROGRAMMA "aggiungi"


- ANALISI SOTTOPROGRAMMA "aggiungi"

In questo sottoprogramma sar possibile aggiungere un elemento in coda al vettore. Verr dunque utilizzata la funzione "realloc" per reallocare il vettore stesso. Verr utilizzato un puntatore di appoggio, ovvero il puntatore che restituisce la funzione "realloc". Dopo aver richiamato quest'ultima funzione verr effettuato un controllo: se il valore del puntatore restituito uguale a NULL, ci vorr dire che non c' spazio disponibile; altrimenti il puntatore utilizzato precedentemente diventa il puntatore di appoggio, successivamente verr letto il nuovo elemento in input, e infine verr incrementato di un'unit la dimensione del vettore. Dopo l'if then else verr restituito "v". E' un sottoprogramma funzionale. Ha un parametro di input/output. Prototipo:
struct ele aggiungi (struct ele v);

- TABELLA DATI SOTTOPROGRAMMA "aggiungi"

Variabili locali

Nome a

Tipo Puntatore ad intero

Funzione Puntatore di appoggio

Vincoli -

9 - DIAGRAMMA SOTTOPROGRAMMA "aggiungi"

10 - SVILUPPO SOTTOPROGRAMMA "elimina"


- ANALISI SOTTOPROGRAMMA "elimina"

In questo sottoprogramma verr eliminato l'ultimo elemento del vettore. Verr utilizzata la funzione "realloc" e un puntatore di appoggio (ovvero il puntatore che restituisce la funzione "realloc"). La funzione "realloc" reallocher il vettore con dimensione decrementata di un'unit. Dopo la chiamata alla funzione verr effettuato un doppio controllo: se il valore del puntatore diverso da NULL oppure la dimensione del vettore uguale a 1, allora il puntatore utilizzato precedentemente diventa il puntatore di appoggio e la dimensione viene decrementato di un'unit; altrimenti comparir un messaggio il quale ci avvisa che non ci sono elementi da eliminare. Infine, il sottoprogramma restituisce "v". Il seguente sottoprogramma di tipo funzionale. Ha un parametro di input/output.

Prototipo:

struct ele elimina (struct ele v);

- TABELLA DATI SOTTOPROGRAMMA "elimina"


Variabili locali

Nome a

Tipo Puntatore ad intero

Funzione Puntatore di appoggio

Vincoli -

11 - DIAGRAMMA SOTTOPROGRAMMA "elimina"

12 - SVILUPPO SOTTOPROGRAMMA "positivo"


- ANALISI SOTTOPROGRAMMA "positivo"

In questo sottoprogramma verr calcolato il numero di elementi positivi della sequenza. Verr dunque utilizzato un contatore. Verr immediatamente eseguito un controllo: se la dimensione uguale o minore di 0 allora comparir un messaggio il quale ci avviser che non ci sono elementi, e non verr eseguita alcuna operazione; altrimenti verr inizializzato il contatore a 0, tramite un ciclo for verranno controllati tutti gli elementi del vettore, e nel caso ci fosse un elemento positivo, il contatore sar incrementato. Al termine del ciclo for sar dato in output il numero di elementi positivi. E' un sottoprogramma procedurale. Ha un parametro di input. Prototipo:

void positivo (struct ele v)

- TABELLA DATI SOTTOPROGRAMMA "positivo"


Variabili locali

Nome i cont

Tipo Intero Intero

Funzione Indice ciclo for Contatore, numero di elementi positivi

Vincoli -

13 - DIAGRAMMA SOTTOPROGRAMMA "positivo"

14 - SVILUPPO SOTTOPROGRAMMA "visualizza"


- ANALISI SOTTOPROGRAMMA "visualizza"

In questo sottoprogramma verranno visualizzati tutti gli elementi del vettore. Verr immediatamente eseguito un controllo: se la dimensione minore o uguale a 0 allora comparir un messaggio il quale ci avviser che non ci sono elementi da visualizzare, e non verr eseguita alcuna operazione; altrimenti con un ciclo for verranno scritti in output gli elementi della successione.

E' un sottoprogramma procedurale. Ha un parametro di input. Prototipo:


void visualizza (struct ele v);

- TABELLA DATI SOTTOPROGRAMMA "visualizza"


Variabili locali

Nome i

Tipo Intero

Funzione Indice ciclo for

Vincoli -

15 - DIAGRAMMA SOTTOPROGRAMMA "visualizza"