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


This topic: Es_prog2 > WebHome > HomeworkDue
Topic revision: r4 - 2006-04-05 - AndreaSterbini
 
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