Tags:
create new tag
view all tags

Homework 1

La consegna del primo homework è fissata per il 15 aprile 2007. Per inviare il vostro compito, riempite l'apposito modulo. Potete sottomettere il compito attraverso il modulo quante volte volete prima della scadenza. Consegnate tutti gli esercizi in un unico file zip (o .tar.gz) contenente 4 file (uno per ogni esercizio, più un file .h per le dichiarazioni):

  • esercizio1.c
  • esercizio2.c
  • esercizio3.c
  • homework1.h

Ciascun file contiene la funzione da implementare, eventuali sottoprocedure (es. caricamento della lista) e la funzione main. Non inserite altri file nello zip.

Esercizio 1 (ordinamento di una lista)

Scrivere una funzione che effettua l'ordinamento di una lista di interi. Il prototipo della funzione è il seguente:

list *ordina(list *l);

La struttura dati per la lista è la seguente:

typedef struct list
{
   int el;
   struct list *next;
} list;

Esercizio 2 (lista palindroma)

Una lista è palindroma quando gli elementi della lista appaiono nello stesso ordine sia se si legge la lista dal primo all'ultimo elemento, sia se la si legge dall'ultimo al primo. Scrivere una funzione ricorsiva che determina se una lista è palindroma (restituendo 1 in tal caso, 0 altrimenti). Non utilizzare le pile. Il prototipo della funzione è il seguente:

int palindroma(list *l1);

Esercizio 3 (stringa bipalindroma)

Una stringa di lunghezza n è bipalindroma se è palindroma e se la sottostringa dalla posizione 0 alla posizione n/2 e la sottostringa dalla posizione n/2+1 alla posizione n-1 sono anch'esse palindrome. Ad esempio, “abbaabba” è bipalindroma, mentre “anna” non lo è. Scrivere una funzione che determina se una stringa è palindroma (restituendo 1 in tal caso, 0 altrimenti). Il prototipo della funzione è il seguente:

int bipalindroma(char *s);

Ulteriori Istruzioni

Per i primi due esercizi, scrivere anche la funzione main che carichi le liste da file. Il nome del file viene passato al main come primo parametro (in altre parole, si trova in argv[1]). Ad esempio per chiamare il file eseguibile ottenuto dalla compilazione di esercizio1.c potremmo eseguire:

./esercizio1 mio_file.txt

Il file in input alla funzione main ha il seguente formato: su ogni riga viene specificato un valore intero. Ad esempio, il seguente file:

1
5
4
7

codifica la lista [ 1, 5, 4, 7 ]. Supponendo che il file da leggere in input sia

<file_in_input>
il main - al termine dell'esecuzione della funzione sulla lista - scrive sul file
<file_in_input>.out
il risultato (crea, cioè, un file con lo stesso nome di quello in input ed estensione aggiuntiva .out). Il risultato del primo esercizio viene scritto con lo stesso formato del file in input (il primo elemento della lista è sulla prima riga, il secondo è sulla seconda, ecc.). I risultati del secondo e del terzo esercizio vengono invece stampati a video.

Per il terzo esercizio, invece, scrivere la funzione main che carica da file stringhe di testo (una su ogni riga), applica a ciascuna di esse la funzione bipalindroma e stampa a video il risultato. Ad esempio, dato il seguente file:

abbaabba
abraabra
anna

il vostro programma emette tre soli caratteri (uno a fianco all'altro):

100

-- RobertoNavigli - 06 Apr 2007

Edit | Attach | Watch | Print version | History: r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r3 - 2007-04-10 - RobertoNavigli






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback