---+ Programmazione 1 (P-Z) a.a. 2007-08 ---++ Homework 4 ---+++ Termine di consegna 10 Dicembre 2007, Ore 23:59 *E' molto importante che prima di inviare le soluzioni leggiate le [[nomiFileSoluzioniPZ0708][Indicazioni di consegna]].* *Esercizio 1* <div align="justify"><blockquote>Si consideri il seguente tipo: <verbatim> typedef struct Factor { unsigned long f; long m; struct Factor* next; } Factor, *FactorList; </verbatim> Scrivere una funzione con prototipo: <verbatim> FactorList MultDiv (FactorList N, FactorList M); </verbatim> che prende in input due liste *N* e *M* di elementi di tipo *Factor* tali che: * La lista *N* e' ordinata in senso crescente rispetto al campo *f*. * In *N* non ci sono due elementi con lo stesso valore del campo *f*. * In *N* non ci sono elementi con campo *m* uguale a *0*. La funzione modifica la lista *N* come segue: Per ogni elemento *x* di *M*: * Se esiste un elemento *y* in N tale che *y.f = x.f*, allora la funzione pone *y.m = y.m + x.m*. Se dopo questa operazione, risulta *y.m=0*, allora l'elemento *y* viene eliminato dalla lista *N*. * Se un tale elemento *y* non esiste in *N*, allora la funzione inserisce un nuovo elemento *z* in N, tale che *z.f = x.f* e *z.m = x.m*, mantenendo l'ordinamento della lista *N*. La funzione *MultDiv* ritorna il puntatore al primo elemento della lista *N* cosi' modificata. La lista *M* non deve essere modificata. La memoria non piu' usata deve essere rilasciata. __Esempio__ Se: *N = {2,1}->{7,3}->{11,-2}->{19,2}* e *M = {13,2}->{2,-1}->{11,3}*, allora la funzione modifica la lista *N* cosi': *N = {7,3}->{11,1}->{13,2}->{19,2}*. </blockquote></div> *Esercizio 2* <div align="justify"><blockquote>Scrivere un programma che prende in input un intero *n* e poi *n* triple di interi (una per linea) con formato *(X Y) Z*. Per ciascuna tripla il programma deve determinare se il coefficiente binomiale *C(X,Y)* e' divisibile o meno per *Z*. Si ricorda che *C(X,Y) = X!/[Y!(X-Y)!]*. __Esempio di Input/Output__ *Input:* <verbatim> 3 (5 2) 2 (13 7) 17 (100 80) 592122 </verbatim> *Output:* <verbatim> (5 2) 2 SI (13 7) 17 NO (100 80) 592122 SI </verbatim> I numeri *X*, *Y* appartengono all'intervallo [1,10'000], mentre *Z* appartiene all'intervallo [2,2^32]. Quindi potreste avere a che fare con numeri molto molto grandi, come nel seguente esempio di output: <verbatim> (5753 2892) 10272743 SI (5753 2892) 1263547389 SI (5753 2892) 441727949 NO </verbatim> * *Hint:* Se ci pensate un po', potete usare la funzione dell'esercizio 1 come funzione di supporto. </blockquote></div> <br /> <br /> -- Users.JulindaStefa - 28 Nov 2007
This topic: Programmazione1
>
WebHome
>
Prog1PZ
>
HomeworksPZ0708
>
Homework4PZ0708
Topic revision: r3 - 2007-12-28 - JulindaStefa
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