---++ Homework 2 Usate liberamente DomandeHomeworkDue per chiarimenti vari. ---- ---+++ Strutture dati Sia data la struttura dati seguente da usare nei 4 esercizi che seguono: <pre> struct nodo { int valore; struct nodo * next; }; </pre> ---- ---+++ Esercizio 1 Implementare __ricorsivamente__ la funzione C che ha il prototipo: <pre> struct nodo * sommaBinaria(struct nodo * LX, struct nodo * LY, int resto); </pre> 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__ <pre> 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) </pre> ---- ---+++ Esercizio 2 Si implementi __ricorsivamente__ la funzione C che ha prototipo: <pre> struct nodo * selezionaValori( int min, int max, struct nodo * L); </pre> * 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:__ <pre> L = 1 -> 2 -> 3 -> 7 -> 2 -> -2 -> 9 min = 2 max = 5 Risultato = 2 -> 3 -> 2 </pre> ---- ---+++ Esercizio 3 Si implementi __ricorsivamente__ la funzione C che ha il prototipo: <pre> void inserisciMenoUno(int N, int i, struct nodo ** L); </pre> * 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:__ <pre> *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 </pre> ---- ---+++ Esercizio 4 Si modifichi la funzione dell'esercizio 2 per usare puntatori di puntatori: <pre> struct nodo * selezionaValori2( int min, int max, struct nodo ** L); </pre> 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:__ <pre> L = 1 -> 2 -> 3 -> 7 -> 2 -> -2 -> 9 min = 2 max = 5 Risultato = 2 -> 3 -> 2 L = 1 -> 7 -> -2 -> 9 </pre> ---+++ Consegna Scadenza della [[consegna dei compiti]]: *19 Aprile*. -- Users.AndreaSterbini - 30 Mar 2006 <!-- * Set ALLOWTOPICCHANGE = Users.DocentiGroup -->
This topic: Es_prog2
>
WebHome
>
HomeworkDue
Topic revision: r4 - 2006-04-05 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback