Tags:
create new tag
view all tags

Homework 2

Usate liberamente DomandeHomeworkDue per chiarimenti vari.

Strutture dati

Sia data la struttura dati seguente da usare nei 4 esercizi che seguono:
struct nodo {
    int valore;
    struct nodo * next;
};

Esercizio 1

Implementare ricorsivamente la funzione C che ha il prototipo:

   struct nodo * sommaBinaria(struct nodo * LX, struct nodo * LY, int resto);
e che:
  • riceve in ingresso 2 liste di nodi LX e LY (di lunghezze anche diverse)
  • LX e LY contengono i valori dei bit di due numeri binari (un bit per ogni nodo)
  • i bit sono nell'ordine DAL MENO SIGNIFICATIVO al pi¨ significativo
e che costruisce e dÓ come risultato:
  • una lista di nodi contenente i bit del numero binario ottenuto sommando LX ed LY (sempre in ordine dal bit meno significativo al pi¨ significativo).
NOTA le due liste LX ed LY non debbono essere modificate.

Esempio

resto     = 0
LX        = 1 -> 1 -> 0 -> 0 -> 1
LY        = 1 -> 0 -> 1 -> 1
risultato = 0 -> 0 -> 0 -> 0 -> 0 -> 1

Infatti

X     = 19 (ovvero  10011 in binario)
Y     = 13 (ovvero   1101 in binario)
somma = 32 (ovvero 100000 in binario)


Esercizio 2

Si implementi ricorsivamente la funzione C che ha prototipo:

    struct nodo * selezionaValori( int min, int max, struct nodo * L);
  • che riceve come argomenti
    • una lista L di nodi contenenti valori interi
    • una coppia di interi min e max
  • seleziona dalla lista L tutti gli elementi il cui valore Ŕ compreso tra min e max (inclusi)
  • torna come risultato la lista degli elementi selezionati
  • gli elementi devono rimanere nell'ordine che avevano originariamente

NOTA la lista L pu˛ essere modificata.

Esempio:

 L = 1 -> 2 -> 3 -> 7 -> 2 -> -2 -> 9
 min = 2
 max = 5
 Risultato =  2 -> 3 -> 2


Esercizio 3

Si implementi ricorsivamente la funzione C che ha il prototipo:
    void inserisciMenoUno(int N, int i, struct nodo ** L);
  • che riceve come argomenti:
    • un puntatore ad un puntatore ad una lista L contenente valori interi non negativi (notate il doppio puntatore)
    • un intero N positivo (ogni quanti nodi inserire il valore -1)
    • un intero i non negativo (che conta a quale nodo siamo arrivati)
  • e che modifica la lista L inserendo un nodo contenente il valore -1 prima di ciascun nodo la cui posizione (iniziando da 0 per il primo nodo) Ŕ divisibile per N

NOTA la lista L deve essere modificata.

Esempio:

 *L = 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10
 N = 3
 Risultato:
 *L = -1 -> 0 -> 1 -> 2 -> -1 -> 3 -> 4 -> 5 -> -1 -> 6 -> 7 -> 8 -> -1 -> 9 -> 10


Esercizio 4

Si modifichi la funzione dell'esercizio 2 per usare puntatori di puntatori:

    struct nodo * selezionaValori2( int min, int max, struct nodo ** L);
la funzione, oltre a tornare la lista di elementi selezionati deve modificare la lista L in modo che contenga tutti gli altri elementi (nell'ordine originale)

NOTA la lista L deve essere modificata.

Esempio:

 L   = 1 -> 2 -> 3 -> 7 -> 2 -> -2 -> 9
 min = 2
 max = 5
 Risultato = 2 -> 3 -> 2
 L         = 1 -> 7 -> -2 -> 9

Consegna

Scadenza della consegna dei compiti: 19 Aprile.

-- AndreaSterbini - 30 Mar 2006

Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r4 - 2006-04-05 - AndreaSterbini






 
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