Homeworks

REGOLE GENERALI:

0) Gli homework devono essere sottomessi entro il termine stabilito per essere ritenuti validi. Per l'orario della consegna fa fede quello del mail server.

1) Seguire esattamente le specifiche dell'input e dell'output.

2) Non includere getchar() o scanf() alla fine del codice dell'esercizio (utilizzatelo per provare il funzionamento ma non includete le istruzioni di attesa alla fine del file nella versione inviata).

3) Leggere l'input con scanf semplici. Es: scanf("%d",&n) per leggere un intero n, non inserire stampe del tipo printf("Inserisci il valore\n");

4) Per ogni esercizio (Homework) inviare un unico file contenente i sorgenti (.c). Controllare bene l'estensione dei file inviati, essa deve essere (.c) e non (.cc o altro). Non copiare dagli altri, sarà effettuato un controllo di differenze e se la percentuale di differenze sarà bassa il compito verrà rifiutato. Verranno rifiutati sia i compiti di chi copia che di chi lascia copiare.

5) Vanno inviati SOLO i sorgenti di codice e NON i file compilati (.out, .exe).

6) Il nome da dare ai file è: NomeCognome.NumeEsercizio.c . Quindi nel mio caso: RobertoPetroccia.1.c per il primo esercizio, RobertoPetroccia.2.c per il secondo, RobertoPetroccia.3.c per il terzo e così via.

7) Per inviare i sorgenti C:

7.1) E' necessario essere iscritti al sito twiki.di.uniroma1.it (si può fare dal link: http://twiki.di.uniroma1.it/twiki/view/TWiki/TWikiRegistration) .

7.2) collegarsi al sito http://twiki.di.uniroma1.it/~prog1-eo/

7.3) compilare il form facendo l'upload delle soluzioni prodotte e cliccare su "spedisci la tua soluzione!"

7.4) riceverete una e-mail di conferma a cui non bisogna inviare reply

8) Se le soluzioni vengono inviate più di una volta, ogni nuovo invio sovrascrive i precedenti. Verrà quindi considerato l'ultima versione da voi inviata.

9) Potete usare la seguente pagina per fare domande: PaginaDomande

A.A. 2008/09:

E' disponibile il primo Homework per l'A.A. 08/09.

Potete scaricare il testo del privo homework cliccando su Homework1.pdf

A.A. 2006/07:

Homework 1 (assegnato il 19 ottobre, consegna entro il 26 ottobre ore 10.30)

ESERCIZIO 1:

Scrivere un programma che calcoli la somma dei primi "n" numeri pari e dei primi "n" dispari, prendendo "n" in input. Effettuare all'interno del programma il calcolo tre volte: a) la prima volta usando due for b) la seconda volta usando due while c) la terza volta usando un unico for od un'unico while

INPUT: intero "n" OUTPUT: 6 interi (con un carattere di "\n" alla fine) es: dato in input n=3 l'output sarà 129129129\n, cioè la somma dei primi 3 numeri pari è 12 (2+4+6) e la somma dei primi 3 numeri dispari è 9 (1+3+5), ripetuto tre volte con le procedure descritte ai punti a),b),c).

ESERCIZIO 2:

Dato un intero reale positivo "a" in input, e la sequenza di numeri reali:

X0 = 1, X1=1/2*(X0+a/X0),...,Xi+1=1/2*(Xi+a/Xi) per i=0,1,2,...

si dimostra matematicamente che per valori grandi di i, la sequenza approssima la radice quadrata di "a" (deriva dal metodo di Newton-Raphson).

Scrivete un programma che legga "a" in input ed "n" numero di iterazioni e utilizzi questo metodo per il calcolo approssimato della radice quadrata. Non va, ovviamente, utilizzata la funzione sqrt della libreria standard. A ogni esecuzione del ciclo stampare il numero di iterazione, ed i valori di X1 (che converge alla radice quadrata di "a"). Utilizzare l'istruzione while.

INPUT: float "a" ed intero "n" OUTPUT: sequenza di coppie (iterazione):(valore di X1)\n dove (iterazione) è un intero e (valore di X1) è un float es: dato a=4 ed n=3 l'output sarà: 1:1\n 2:2.5\n 3:2.05\n

Homework 2 (assegnato il 26 ottobre, consegna entro il 2 novembre ore 10.30)

ESERCIZIO 3:

Scrivere un programma che legga da tastiera due interi x ed y, e che contenga due funzioni i cui prototipi sono:

int MCD1(int a, int b); e

int MCD2(int a, int b);

La prima funzione deve stampare il massimo comun divisore di a e b calcolandolo nel modo ovvio (scorrendo una serie di valori). La seconda funzione deve stampare anch'essa il massimo comun divisore utilizzando la formula (di Euclide) seguente:

sia x>=y. Se y=0 MCD(x,y)=x, altrimenti MCD(x,y)=MCD(y, x%y) dove % è l'operatore resto.

INPUT: intero "x" ed intero "y" OUTPUT: 2 interi (con un carattere di "\n" alla fine)

es: dato in input x=6 e y=15 l'output sarà 33\n, cioè il MCD di 6 e 15, ripetuto due volte, ciascuno stampato da una funzione.

ESERCIZIO 4: Scrivere un programma che prenda in input 4 valori reali, che rappresentano le coordinate di due punti nel piano cartesiano, e stampi la distanza tra i due punti. Il programma dovrebbe contenere una funzione che prende come parametri 4 double e restituisce un double.

INPUT: 4 double x1, y1, x2 ed y2. OUTPUT: un double, che rappresenta la distanza tra P1 (x1,y1) e P2(x2,y2)

es: dati x1=2.5, y1=4.5, x2=5.5, y2=0.5 l'output sarà 5.000000

Homework 3 (assegnato il 16 Novembre, consegna entro il 23 novembre ore 10.30)

ESERCIZIO 5:

Scrivere un programma che prenda in input due numeri interi positivi n ed m rappresentanti le lunghezze di due array A e B, e successivamente legga in input tutti gli elementi degli array A e B. Le lunghezze n ed m devono essere minori di 50. Il programma deve stampare tutti gli elementi presenti in B, ma non in A.

INPUT: due interi n ed m emtrambi minori di 50. Gli elementi degli array A e B rispettivamente di lunghezza n ed m. OUTPUT: gli elementi di B non presenti in A.

es: dati in input n=4 ed m=5 con A[0]=5 A[1]=3 A[2]=2 A[3]=0 e B[0]=0 B[1]=10 B[2]=3 B[3]=11 B[4]=9, l'output sara': 10 11 9

ESERCIZIO 6:

Scrivere un programma che prenda input un intero positivo n rappresentante la lunghezza di un array A, e successivamente legga in input tutti gli elementi dell'array A. La lunghezza n deve essere minore di 50. Il programma, usando il solo array A, deve invertire l’ordine degli elementi ed al termine dell’elaborazione stampare l’array A.

INPUT: un intero n minore di 50. Gli elementi dell'array A di lunghezza n. OUTPUT: gli elementi di A invertiti nell'ordine.

es: dati in input n=4 e A[0]=5 A[1]=3 A[2]=2 A[3]=0, l'output sarà: 0 2 3 5.

Homework 4 (assegnato il 23 Novembre, consegna entro il 30 novembre ore 10.30)

ESERCIZIO 7:

Scrivere un programma che includa una funzione ricorsiva tale che, assegnato il numero dei dischi del gioco, fornisca una soluzione al problema della torre di Hanoi.

La torre di Hanoi è un gioco apparso in Europa nell’Ottocento, con una documentazione promozionale (probabilmente apocrifa), che rappresentava il gioco come il lavoro compiuto nel tempio di Brahma. Alla creazione del mondo ai sacerdoti del tempio era stata data una piattaforma su cui erano fissati tre supporti di diamante: sul primo supporto erano infilati 64 dischi d’oro, ognuno leggermente più piccolo di quello su cui era posato. Ai sacerdoti era assegnato il compito di muovere tutti i dischi dal primo supporto al terzo, con il vincolo di muovere un solo disco alla volta e senza sovrapporre dischi più grandi a dischi più piccoli. Quando i sacerdoti avessero terminato il loro compito, sarebbe arrivata la fine del mondo.

  • Torre di Hanoi:
    torre.jpg

Il punto di partenza è riuscire a risolvere il problema con pochi dischi: è fin troppo ovvia la soluzione minima con uno o due dischi (ovviamente se c'è una soluzione minima ce ne sono infinite altre), e certamente non crea problemi la soluzione con tre dischi...Ovviamente va trovata una soluzione ricorsiva. La rappresentazione delle mosse avra' la seguente codifica:

1) i pioli si chiameranno 0, 1 e 2, da sinistra a destra (anche se nella figura si chiamano A B C noi useremo le lettere per i dischi ed i numeri per i pioli); 2) i dischi si chiameranno A, B, C... dall'alto in basso; 3) una mossa sarà indicata dalla lettera del disco mosso seguita dal numero del piolo su cui viene posto (ad esempio la prima mossa è A1); 4) una soluzione del gioco è rappresentata da una stringa di una certa lunghezza, composta da una concatenazione di mosse separate da trattini (ad esempio una soluzione del problema a due dischi è A1-B2-A2) che, se eseguite, spostano correttamente una torre di Hanoi.

Assumeremo sempre di partire dal piolo 0.

INPUT: un intero n rappresentante il numero di dischi (in generale il test con n<10 va bene) OUTPUT: stampare una sequenza di caratteri (o una stringa), composta da una concatenazione di mosse separate da trattini (ad esempio una soluzione del problema a due dischi è A1-B2-A2) che, se eseguite, spostano correttamente una torre di Hanoi.

es: dato in input n=3, l'output sarà: A1-B2-A2-C1-A0-B1-A1.

Homework 5 (assegnato il 07 Dicembre, consegna entro il 14 Dicembre ore 10.30)

ESERCIZIO 8:

Scrivere un programma che permetta l'inserimento di una lista di interi ordinata (si assume che i dati in input sia inseriti in maniera ordinata) mediante l'impiego di puntatori e allocazione dinamica della memoria. L'inserimento terminera' quando viene dato in input il valore sentinella 9999.

Successivamente il programma dovra' leggere in input un elemento intero e stampare la lista con l'elemento in piu' ancora ordinata (inserimento ordinato dell'elemento nella lista inserita).

INPUT: un lista di interi ordinati, e un intero da inserire ordinatamente nella lista. OUTPUT: stampa della lista con l'elemento in piu' ancora ordinata.

es: data la lista 1,2,6,8 e l'intero 5, l'output sarà 1,2,5,6,8.

Topic attachments
I AttachmentSorted ascending History Action Size Date Who Comment
JPEGjpg torre.jpg r1 manage 41.2 K 2006-11-23 - 15:37 AlessioMalizia torre hanoi
Edit | Attach | Watch | Print version | History: r20 < r19 < r18 < r17 < r16 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r20 - 2008-10-11 - RobertoPetroccia






 
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-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback