--
MarioBove - 09 Dec 2004
Ma che hanno fatto!??!?!?!
Hanno messo per il 4° esercizio un miscuglio tra il MCD e il vecchio esercizio?!?!?!?
E la data di consegna è uguale a quella del 3°????
Oddio non ci stò capendo più nulla!
manco io ci sto capendo---+ nulla!!!!!!
--
AlbertoLaRocca - 09 Dec 2004
La pagina deve ancora essere completata; avranno fatto copia-incolla con la pagina vecchia.
PS: prof. scusi se oggi non lo consegno dopo mezz'ora, ma ho da fare ^_^
lo consegnerò stasera.
Bravo Larocca
eh si, ma che mancanza per quest'area non vedere la tua consegna dopo mezz'ora

LOL
-- Comment added by
RiccardoProietti on 09 Dec 2004
Anche qui il testo non è che sia chiarissimo...
-- Comment added by
AndreaCosentino on 09 Dec 2004
Ma se
AlbertoLaRocca lei non consegna, come faccio io a correggere???
Mica li so risolvere gli esercizi...
A parte gli scherzi, invito tutti a controllare il testo e segnalare eventuali oscurità e imprecisioni.
grazie. In cambio prometto di tenere d'occhio questa pagina un po' di piu' la prossima settimana.
-- Comment added by
IvanoSalvo on 09 Dec 2004
Senza titolo?
il numero 97261064 non è divisibile per 21252 come fa ad essere il mcd?
-- Comment added by
FabioDeNigris on 09 Dec 2004
Senza titolo?
Ma nn è più semplice dire che si divide il primo numero per il secondo, se il primo numero è esattamente divisibile, il MCD è il divisore, altrimenti il MCD è il resto della divisione stessa... o no?
-- Comment added by
AndreaCosentino on 09 Dec 2004
Senza titolo?
Non è possibile, mi correggo da solo, perchè con i numeri troppo alti non funzionerebbe come algoritmo...
-- Comment added by
AndreaCosentino on 09 Dec 2004
Senza titolo?
cmq come già detto da
FabioDeNigris il secondo numero non è divisibile per 21252... Forse non abbiamo capito noi?
-- Comment added by
AndreaCosentino on 09 Dec 2004
+++ MCD +++
Sul testo c è scritto:
MCD(n,n) = n
MCD(m,n) = MCD(m-n,n) se m<n
MCD(m,n) = MCD(m,n-m) se n<m
Ma non dovrebbe essere: ??
MCD(n,n) = n
MCD(m,n) = MCD(m,n-m) se m<n
MCD(m,n) = MCD(m-n,n) se n<m
(secondo il Salvo)Prendo come esempio m=24 n=36
MCD(24,36)= MCD(-12,36) dato che m=24 < n=36
"...MCD di due numeri interi strettamente positivi", -12 è negativo
(secondo me)Prendo sempre come esempio m=24 n=36
MCD(24,36)= MCD(24,12) dato che m=24 < n=36
MCD(24,12)= MCD(12,12)=12 dato che n=12 < m=24
forse mi sbaglio?
-- Comment added by
CristianCarbone on 09 Dec 2004
xCristianCarbone
Io pensavo come dicevi tu... Però me stanno a venì i dubbi con il testo...
-- Comment added by
AndreaCosentino on 09 Dec 2004
Senza titolo?
Bhe ora aspettiamo un altra settimana per leggere cosa dice il Salvo.
-- Comment added by
CristianCarbone on 09 Dec 2004
Senza titolo?
cmq per quanto riguarda l'esempio i numeri più vicini a quello indicato divisibili per 21252 sono, 97249152 e 97227900... E' meglio correggere...
-- Comment added by
AndreaCosentino on 09 Dec 2004
Oddio... o_o
ho dovuto controllare le see diffs per essere sicuro che quel post fosse veramente di Salvo... e mica solo per la parte dove mi prende in giro!!!
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
+++ MCD +++
In effetti mi sono reso ke facendo alcune prove a mano non tornano molto i conti con la definizione di MCD data dall'esercizio. E dovrebbe essere il contrario...mi staro' sbagliando????????????????????????????????
-- Comment added by
DavidBenedetti on 09 Dec 2004
re: attenzione
sarebbe grave, però dal momento che gli homeworks compilano e funzionano, suppongo che a lui il testo arrivi giusto. o forse non funziona solo la pagina di consegna del terzo homework? a me sembra che il testo dell'e-mail coincida con quello che ho inviato.
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
risolto
il problema l'ho risolto anche se è strano!
se io quando mettevo un controllo del tipo:(n<m)in questo modo quando l'email mi mandava la conferma cancellava <m) e scriveva cosa cera sotto il prog!!!!
per risolvere il probl ho scritto cosi:(n < m)
e nn mi ha dato nessun prob.
non chiedetemi il perchè!
perchè non lo sò!
-- Comment added by
MauroMoretti on 09 Dec 2004
Dubbi
ma cosa si intende per lista di cifre decimali? dev'essere una lista linkata, cioè una lista dove ogni elemento è associato al puntatore del precdente e a quello del successivo? oppure basta un array? realizzare sto coso con una lista mi sembra un po' assurdo; e poi vedo sul forum che ci sono delle cose non molto chiare nel testo dell'esercizio: sono state chiarite?
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
invito
Ragazzi visto che i problemi da risolvere cominciano ad essere un attimino piu' impegnativi che ne direste di evitare discussioni fuori tema???
-- Comment added by
StefanoConte on 09 Dec 2004
ah ah ah
Ahahahahahahahahahahahahah
Oh Mio Dio Ivano Salvo è un grande! :)
Scusate il messaggio che non c'entra prometto che sarà il primo e l'ultimo in questa sezione, mi ha fatto sbellicare il post di Salvo! :)
Ciao !
-- Comment added by
MarioBove on 09 Dec 2004
ah ah ah
bisogna ammettere che quell'uomo ha un certo senso dell'umorismo
cmq
StefanoConte, fino al tuo di post OT non ce ne stava quasi nessuno...
piuttosto, sta cosa delle liste di cifre decimali? che devo fare? liste linkate? mi sembra strano... non vanno bene gli array?
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
array o lista? (vada per l'array :D)
infatti si do ragione a alberto, nn facciamo prima a fare un bel array lungo n e poi dire tutto l'array rapressenta il numero? allocare 2 array è sicuramente molto---+ conveniente che allocare liste collegate...
-- Comment added by Users.Claudio on 09 Dec 2004
Senza titolo?
http://www.dimi.uniud.it/~ciaffagl/Teaching/IV.pdf
ecco dove si trova la spiegazione di Euclide! Ma si è sbagliato il prof, nella prima pagina ha scritto che era una teoria sul mcm, poi nella pagina del compito però ha scritto bene!
-- Comment added by
AlessioDezi on 09 Dec 2004
array o lista?
anche perché non credo che Salvo voglia che allochiamo un singolo blocco dinamico per ogni nodo della lista, altrimenti la memoria verrà
mooooolto frammentata; piuttosto allocheremo un unico blocco dinamico che possa tenere tutti i nodi, ma così a questo punto è la stessa cosa che allocare un array, solo che occupa esattamente (anzi, identicamente come dice Nebbia :)) il triplo dello spazio, se non addirittura 9 volte tanto! (a seconda delle implementazioni)
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
NULL
esiste il simbolo NULL nell'ANSI C? se non esiste, con cosa lo posso sostituire? va bene il semplice zero? altrimenti una definizione del genere?
#define NULL ((void)0)
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
realloc
1 altra cosa: la realloc nell'ANSI C lascia invariato il contenuto del precedente blocco di memoria? se sì, anche quando deve effettuare uno spostamento del blocco? lo ricopia tutto così com'è nella nuova posizione?
-- Comment added by
AlbertoLaRocca on 09 Dec 2004
errore...
la descrizione:
MCD(n,n) = n
MCD(m,n) = MCD(m-n,n) se m<n
MCD(m,n) = MCD(m,n-m) se n<m
è errata...le condizioni vanno invertite!
-- Comment added by
OmarTardiolo on 09 Dec 2004
Mea Culpa
in effetti nell'esempio mancava un 1 davanti al primo numero. Ora l'esempio dovrebbe essere corretto.
Le condizioni erano ovviamente invertite, come si sono accorti i più.
-- Comment added by
IvanoSalvo on 10 Dec 2004
Array o Liste?
NON usando array di dimensione variabile, il modo corretto di fare l'esercizio e' quello di usare LISTE CONCATENATE.
Tenete conto che non potete sapere a priori quante cifre dovete leggere.
Effettivamente non si tratta del modo migliore per RAPPRESENTARE interi di dimensioni arbitrariamente grandi, ma non è l'efficienza lo scopo dell'esercizio (ne' in tempo ne' in spazio [sprecare un campo puntatore per ogni cifra immagino fara' rabbrividire
AlbertoLaRocca e tutti gli altri VERI programmmatori C]).
Buonanotte e buon week end a tutti.
-- Comment added by
IvanoSalvo on 10 Dec 2004
NULL
Esiste eccome, ma andare a leggere un attimo il manuale, no eh!?!?!?

Non credo che avrai bisogno della realloc!!!
-- Comment added by
StefanoConte on 10 Dec 2004
Array o liste?
ma lol, e io che stavo già facendo un array di char dove ogni char conteneva 2 cifre decimali... con una lista devo impiegare esattamente 18 volte tanto in termini di memoria

però non è importante per l'esercizio! o_o
vabbè va', famo ste liste; prof, ma mi tolga una curiosità: dal momento che voi fate la correzione automatica non controllate il codice di ciascun file, ma allora come fate a sapere se un certo programma una volta compilato non contiene codice malizioso? che succederebbe se qualcuno inserisse nel programma da consegnare una chiamata system dove fa eseguire alla shell comandi pericolosi? non che io abbia intenzione di farlo, se vuole controlli pure i miei homeworks ^_^' ma non lo ritiene pericoloso?
PS,
StefanoConte: facevo prima a chiedere su TWiki che a controllare su un manuale di C, che tra l'altro non ho ^^
e poi la realloc certo che serve: come fai in runtime se il numero di cifre che ti vengono date in input è maggiore di quello che ti aspettavi?
-- Comment added by
AlbertoLaRocca on 10 Dec 2004
Array o liste?
Secondo me fai prima a comprartelo il manuale...

Comunque dovresti sapere che se stai utilizzando una lista concatenata puoi creare tutti gli elementi che vuoi in runtime per ogni input e soprattutto non hai bisogno di preventivare un numero fisso di input, per chi ancora non l'avesse capito, l'uso delle liste serve proprio a questo!!!Per questa operazione hai bisogno soltanto della semplicissima malloc(nel deitel se ne parla al capitolo 12 se non erro!)
-- Comment added by
StefanoConte on 10 Dec 2004
e ancora... -_-'
scusami sai, se sto cercando di non frammentare la memoria in una maniera mostruosa... in teoria già si frammenta chiamando realloc tante volte, figuriamoci facendo come dici tu! che roba, un blocco per ogni cifra, ma siamo matti? lo sai ad esempio che nel runtime di Visual C---++ ogni blocco dinamico ha 20 bytes di intestazione? sommati agli 8 per i due puntatori che associ ad ogni nodo e al byte contenente la cifra (sempre che non usi int anziché char!) farebbero in tutto 29 byte! per una cosa che si poteva memorizzare in 4 bit (Massini insegna)! eh non lo so, a sto punto famo che ogni cifra è contenuta in un blocco da un kilobyte e tanti saluti! tanto dici vabbè, chissene, lo scopo dell'homework non è l'efficienza, quindi...
brrrr... vede prof? rabbrividisco!
rabbrividisco talmente tanto che mi stanno uscendo fuori un sacco di tag "br"! (triste questa...)
oltrettutto farlo con l'array era pure---+ facile... vabbè, poche lagne e famo stu coso va'
-- Comment added by
AlbertoLaRocca on 10 Dec 2004
help..
io non è che ho capito tanto come si fa.. qualcuno può darmi qualche dritta? non ho capito come si calcola stò mcd... sarò scemo..
-- Comment added by
AntonioFelitti on 10 Dec 2004
CONSEGNA?!
non è un pochino troppo presto il 20 x consegnare....
mah...
-- Comment added by
FrancescoCipollone on 10 Dec 2004
Senza titolo?
mettiamo la scadenza alle 23.59.59 del 31 dicembre... ki lo consegna 10 secondi prima ha 10 punti in---+ di base all'esame
p.s. tanto io nn lo finisco nemmeno per il 31 O_o
-- Comment added by
DanieleFaraci on 10 Dec 2004
Senza titolo?
quoto
-- Comment added by
StefanoConte on 10 Dec 2004
Senza titolo?
lol, e l'homework successivo quando si consegna, tra un anno?
-- Comment added by
AlbertoLaRocca on 10 Dec 2004
Collaborazione dinamica!
A parte i discorsi di frammentazione di memoria (giustissimi), penso che il problema (anche se forse lieve) si ponga durante l'elaborazione del MCD tra i due numeri inseriti. Per ovviare a questo ho implementato una "collaborazione" tra stack e array (oddio, sarebbe venuto anche con le code eh!). Nel senso: in fase di caricamento eseguo M ed N push nei 2 stack (uno per ogni numero ovviamente), poi scarico i due stack ottenuti in due array (la grandezza degi stack me la ricavo molto semplicemente) e poi elaboro il tutto sugli array ottenuti. Spero di non aver profanato alcunché!!!
-- Comment added by
DavidBenedetti on 11 Dec 2004
Collaborazione dinamica!
Ma scusa, ho capito male o stai parlando del call stack??? O_o
-- Comment added by
AlbertoLaRocca on 11 Dec 2004
Collaborazione dinamica!
Suppongo (e spero) di aver capito male, dal momento che in ANSI C non puoi usare l'assembly...
-- Comment added by
AlbertoLaRocca on 11 Dec 2004
Collaborazione dinamica!
Nessun uso di call stack o assembly Alberto...te lo assicuro!!! Mi ci sono solo ingegnato un pò! Anche perché i procedimenti che ho utilizzato sarebbero stati molto più laboriosi (e anche dispendiosi) dal punto di vista della memoria (e anche della logica: un pò contorta!) utilizzando solo liste lineari. In poche parole erano un pò caotici! Così, se vogliamo dirla tutta, mi sono solo semplificato la vita!!!
-- Comment added by
DavidBenedetti on 11 Dec 2004
Collaborazione dinamica!
ti sei semplificato la vita creandoti uno stack e senza fare uso di classi/template??? complimenti, ma non so se hai capito bene cos'è una lista... e poi guarda che lo scopo dell'homework è quello di utilizzare le liste linkate, altrimenti puoi fare tutto con un normalissimo array di char (senza andare ad impelagarti con i miscugli di stack e array) e tanti saluti!
-- Comment added by
AlbertoLaRocca on 11 Dec 2004
Collaborazione dinamica!
Certo che lo so cos'è una lista, non preoccuparti...!Ma grazie comunque per i chiarimenti!!!
-- Comment added by
DavidBenedetti on 11 Dec 2004
Collaborazione Dinamica x LaRocca
array di char??? Ma che sei matto??
-- Comment added by
FabrizioBottacchiari on 13 Dec 2004
Senza titolo?
ma se i 2 numeri sono primi cosa deve visualizzare?
-- Comment added by
MassimilianoMenculini on 13 Dec 2004
Collaborazione Dinamica x Bottacchiari
Tutt'altro, era in assoluto la soluzione migliore; perché, tu come avresti fatto?
x Massimiliano: se i due numeri sono primi deve visualizzare 1 (entrambi sono divisibili per uno e per se stessi, quindi l'MCD è 1).
-- Comment added by
AlbertoLaRocca on 13 Dec 2004
Senza titolo?
basta seguire l'algoritmo. Ad esempio m=13 n=7 , risulterà MCD(1,1)=1
-- Comment added by
CristianCarbone on 13 Dec 2004
Senza titolo?
La prima cifra del nostro numero, può essere uno zero? o lo zero può essere inserito solo nelle cifre seguenti?
ESEMPIO: potremmo avere in input del genere 0->1->2->3 ?
-- Comment added by
CristianCarbone on 13 Dec 2004
Studenti Canale A - D
Mi scuso se sfrutto questo forum per un'altra materia, chiunque del canale A -D è in cerca degli Esami precedenti di calcolo differenziale, può trovarli sulla mia home page di twiki, cliccando sul mio nome, buono studio
-- Comment added by
FabrizioBottacchiari on 14 Dec 2004
Osservazione
l'idea di usare divisione e resto della divisione intera (proposta da Cosentino mi sembra) effettivamente funziona, solo che in quel caso dovete implementarvi queste operazioni sui numeri rappresentati come vi ho chiesto... il che mi sembra obiettivamente piu' difficile.
Se ci pensate, con l'algortitmo che vi ho dato io si fa (con qualche passo in piu', of course) la stessa cosa.
-- Comment added by
IvanoSalvo on 14 Dec 2004
Efficienza del programma
come vi ho detto non preoccupatevi dell'efficienza della rappresentazione. Il modo migliore sarebbe... vabbe' troppo lungo da spiegare...
-- Comment added by
IvanoSalvo on 14 Dec 2004
Zero come prima cifra
gli zeri a sinistra, come immagino sappiate non sono cifre significative. Quindi.... se volete, considerate questo caso non considerando eventuali sequenze iniziali di zeri.
-- Comment added by
IvanoSalvo on 14 Dec 2004
Domanda stupida
Quando ho inserito tutti i numeri nella lista concatenata.. i numeri che vado ad utilizzare nel calcolo dell'MCD, le devo considerare come degli interi inseriti da tastiera? perchè l'algoritmo funziona sulle sequenze di cifre delle liste concatenate, per cui io il numero derivante dalla lista da qualche parte lo dovrò mettere, altrimenti su cosa opero?
-- Comment added by
AndreaCosentino on 14 Dec 2004
Re: Efficienza del programma
il metodo migliore dal punto di vista dell'ottimizzazione della memoria sarebbe di codificare non in BCD (come stiamo---+ o - facendo) ma normalmente in binario allocando spazio a sufficienza chiamando malloc (una sola volta però! senza fare realloc 3000 volte); l'unica cosa a cui stare attenti è che in questo modo le operazioni andrebbero fatte operando in esadecimale (una cifra ogni nibble) e quindi i prestiti delle sottrazioni dovrebbero essere uguali a 16 anziché 10. Per il resto tutto normale.
-- Comment added by
AlbertoLaRocca on 14 Dec 2004
Re: Domanda stupida
Io nel mio programma non ho allocato nessun'altra lista oltre alle due in ingresso, perché di fatto le uniche operazioni che devi fare sono le progressive sottrazioni sui due numeri in ingresso, quindi io non faccio altro che sottrarre progressivamente i due numeri fra di loro, senza fare uso di terze parti.
-- Comment added by
AlbertoLaRocca on 14 Dec 2004
Senza titolo?
infatti non è necessario allocare una terza lista..cmq una funzione x togliere gli zeri all'inizio del numero è indispensabile altrimenti poi le sottrazioni non funzionano in certi casi particolari...cmq credevo fosse più difficile l'homework all'inizio ma poi con un paio di giorni me la sono cavata e alla fine l'ho risolto tutto...buona fortuna a tutti...
CHEERS!
-- Comment added by
OmarTardiolo on 14 Dec 2004
Senza titolo?
Compilando il programma su Linux e mandandolo in run mi sono accorta che non mi visualizza tutte le printf che chiedo. Es.se scrivo printf("pippo"); e printf("pluto"); mi visualizza solo pippo...e cosi' via, le visualizza tutte tranne l'ultima. Da cosa puo' dipendere? Eseguendo lo stesso su Cygwin in windows, non ho nessun tipo di problema. Inoltre sempre da Linux in run ho avuto problemi con una funzione ricorsiva tornante un valore...(su Cygwin funzionava benissimo...) e ho dovuto rendere void tale funzione che altrimenti veniva letteralmente ignorata . Suggerimenti???
-- Comment added by
NormaGiovinazzi on 15 Dec 2004
Senza titolo?
sicura che il codice che hai eseguito su cygwin fosse
esattamente lo stesso che hai eseguito su linux? non l'hai riscritto?
-- Comment added by
AlbertoLaRocca on 15 Dec 2004
Aiuto
Come faccio a fare la sottrazione fra 2 liste collegate che rappresentano i nostri numeri!!!!! ho trovato un sacco di prob. datemi qualche consiglio (anke porzioni di codice nn fanno schifo lollllllllll)
-- Comment added by Claudio on 15 Dec 2004
Fatto
Anche se dopo estenuanti lol giorni di prove... CE L'HO FATTA!!! Alla facciaccia vostra!!!!
-- Comment added by
StefanoConte on 15 Dec 2004
scherzavo...
cioè il progr l'ho fatto,ma nn alla faccia vostra!!! ehehehehehehe uhauhauahauhauh ahahahahahahahaah
Seeeeeeeeeeeee
se vi serve una mano...sto qua!!!
-- Comment added by
StefanoConte on 15 Dec 2004
scherzavo...
A me servirebbe qualche output (magari con molte cifre) per testare il programma, possibilmente giusti eheh
-- Comment added by
CristianCarbone on 15 Dec 2004
Senza titolo?
a me a me serve una mano!!! come fai a fare la sottrazione fra 2 liste di interi cavolo!!!!!!!!!!!!!!come se fa!??!!?!?!?!
-- Comment added by Claudio on 15 Dec 2004
scherzavo
dando in input questi numeri:
3239018414
1705173374
il risultato è : 254
-- Comment added by
StefanoConte on 15 Dec 2004
X Claudio
io uso una funzione che, avendo queste fue liste:
m->5->9->9->9->0->NULL
n->8->7->0->NULL
Fa il reverse:
m->0->9->9->9->5->NULL
n->0->7->8->NULL
e finchè n!=NULL sottraggo a l'elemento di m l'elemento di n , quindi m diventerà :
m->0->2->1->9->5->NULL
faccio il reverse della lista m e torna:
m->5->9->1->2->0->NULL
Spero di essere stato chiaro...
-- Comment added by
CristianCarbone on 15 Dec 2004
zero
ma nel caso in cui uno dei due numeri immessi dall'utante è zero l'output del programma quale sarà?e se sono entrambi zero?esempi
mcd(0,12)=???
mcd(0,0)=???
-- Comment added by
StefanoConte on 15 Dec 2004
zero
"...Esiste un antichissimo modo per determinare il Massimo Comun Divisore (MCD) di due numeri interi strettamente positivi..." 0 non è positivo, quindi non credo che ci mettera' lo 0 come input, per sicurezza però ho mandato una e-mail al Salvo, speriamo che mi risponde eheh
-- Comment added by
CristianCarbone on 15 Dec 2004
ma il grande sottoscritto non si batte! eheh!
lo sai quanto ci ho messo io a fare il programma (alla faccia tua lol

)? nemmeno un'ora! e se vuoi sapere una cosa, a me ha funzionato alla prima botta asd

semplicemente l'ho scritto e l'ho fatto partire
-- Comment added by
AlbertoLaRocca on 15 Dec 2004
Attenzione prego
se lo desiderate, nella mia pagina personale qui su TWiki ho messo in attachment un piccolo programmetto fatto da me per scomporre un numero in fattori primi; funziona solo su Windows però; vi potrà aiutare a trovare i fattori primi e quindi l'MCD di due numeri. chi lo vuole se lo scarica, chi non lo vuole non se lo scarica, io l'ho messo e sta la'.
-- Comment added by
AlbertoLaRocca on 15 Dec 2004
Attenzione prego
per chi ha Linux, o per chi non si fida di me, ho messo sempre in attachment anche il sorgente del programma pronto da compilare. scusate se fa schifo, ma l'ho fatto alle medie!!!
-- Comment added by
AlbertoLaRocca on 15 Dec 2004
il tuo output è sbagliato.
-- Comment added by
AlbertoLaRocca on 16 Dec 2004
O_o
ma il grande sottoscritto non si batte! eheh!
lo sai quanto ci ho messo io a fare il programma (alla faccia tua lol big grin )? nemmeno un'ora! e se vuoi sapere una cosa, a me ha funzionato alla prima botta asd big grin semplicemente l'ho scritto e l'ho fatto partire big grin
tu si che sei un figo la rocca
-- Comment added by
ClaudioCorti on 16 Dec 2004
Controlla il tuo di programma allora!!!
-- Comment added by
StefanoConte on 16 Dec 2004
secondo me ho ragione io
-- Comment added by
StefanoConte on 16 Dec 2004
si cristian sei stato chiaro, ma: 1)se invece di avere la liste (reversate)
m->0->9->9->9->5->NULL
n->0->7->8->NULL
avessi le liste
m->1->2->3->9->5->NULL
n->0->7->8->NULL
ti troveresti alla fine con la lista m
1->
-5->
-5->9->5 ovvero il numero 59-5-51 che nn è che abbia molto senso!Forse mi sbaglio io?!?!
2) se fai 1000-99 con quel metodo nn coinvolgi nella differenza i primi 2 num di 1000 faresti
1000 -
99 =
10XX
che ha ancor meno senso di prima, xk togliendo a 1000 un numeri arrivi a un numero---+ grande di mille!
Sei sicuro che ti funzioni il prgramma? o non ho capito io ? Altre proposte su come fare la sottrazione?
-- Comment added by Claudio on 16 Dec 2004
Sottrazione tra due interi?
come vuoi che si faccia? si fa esattamente come ti ha insegnato la maestra alle elementari: procedendo da destra verso sinistra fai la prima cifra meno la seconda; se la seconda è più grande della prima, allora usa il prestito togliendolo da quella successiva; se alla fine arrivi all'ultima cifra (quella più a sinistra di tutte) e hai bisogno di un prestito ma non c'è più nessuna cifra che te lo da (per favore, cosa state pensando!?!), allora vuol dire che il secondo numero era più grande del primo, e la sottrazione non si può fare.
-- Comment added by
AlbertoLaRocca on 16 Dec 2004
Sottrazione tra due interi?
Esatto, proprio che ha detto
AlbertoLaRocca, io nella funzione sottrazione ho fatto un ciclio while che finchè la cifra seguente è 0 , con un puntatore ausiliare va al prossimo nodo, e leva un unità dal suo elemento. Scusa se non te l ho detto nel precedente post, ma come dice
AlbertoLaRocca te lo insegna la maestra alle elementari.
Cmq l'output di
StefanoConte è giusto, il MCD è 254
-- Comment added by
CristianCarbone on 16 Dec 2004
hmmmm...
stavolta sono stato un po' troppo azzardato ^^'
ho usato il programma della scomposizione per vedere i fattori primi dei due numeri, solo che i due numeri erano troppo lunghi per un int e il programma andava in overflow mostrandomi i fattori primi di un'altra cosa.
evvabeeeeene: scuuuuusami stefanocooooonte...
-- Comment added by
AlbertoLaRocca on 16 Dec 2004
hmmmm...
scuse accettate, lo sapevo benissimo che il mio output era corretto, è il tuo programmino delle medie che non funzia tanto bene!!!
-- Comment added by
StefanoConte on 16 Dec 2004
Senza titolo?
Scusa e perchè hai usato il programmino delle medie e non quello che hai già fatto (impiegandoci meno di 1 ora) per testare i numeri che ha dato stefanoconte? :D
No così giusto per capire ;)
Poi una domanda.....
Dobbiamo valutare il caso in cui l'utente inserisca già dal primo numero un numero maggiore di 9 o minore di 0 e quindi imporre la lista come 0 oppure deve per forza inserire almeno 1 numero e quindi fare un ciclo finchè questo non sia >0 e <9 ? (intendo sempre il primo elemento della lista poi dal 2° si uscirà come dal testo dell'esercizio...)
ciao!
-- Comment added by
MarioBove on 16 Dec 2004
caso zero
ho chiesto al Salvo: mi ha detto che il programma deve terminare sia se l'utente chiede di calcolare il MCD tra due zeri(MCD(0,0)) oppure tra un numero e zero (MCD(x,0)).
X
MarioBove per sicurezza un controllino sull'esistenza della lista io ce l'ho messo. se l'utente immette già dal primo num un numero >9 o <0 il programma si stoppa visto che non ha numeri su cui lavorare!
spero di essere stato chiaro
-- Comment added by
StefanoConte on 16 Dec 2004
output
Mi è venuto un dubbio...se noi abbiamo un input del genere:
5
5
-1
7
7
10
L'output dovra essere stampato in colonna?
1
1
Oppure in linea?
11
-- Comment added by
CristianCarbone on 16 Dec 2004
output
penso in linea.. il testo dice così.. printf("%1d")
-- Comment added by
AlessandroSabellico on 16 Dec 2004
Senza titolo?
Ma voi dopo aver stampato il MCD stampate anche il carattere di newline "\n" ? Non vorrei che risultasse sbagliato...
-- Comment added by
CristianCarbone on 16 Dec 2004
Librerie coda e albero
Qualche anima pia potrebbe che ha trascritto tutte le funzioni sugli alberi e sulle code non è che potrebbe farmele avere in qualche modo? Purtroppo sono stato assente durante quelle lezioni e non ho potuto recuperare appunti. C'è l'indirizzo mail nella mia pagina. Vi ringrazio e mi scuso perché probabilmente sono OT.
-- Comment added by
DanieleBernardi on 17 Dec 2004
Risposte varie
x
MarioBove: ho usato il programma delle medie perché ce l'avevo sottomano; non mi andava di:
1) ripescare l'homework
2) rimettere la getch() al codice del programma dell'homework
3) ricompilare il codice
4) eseguire e vedere il risultato;
ho fatto prima ad avviare quell'affaretto che stava già sul desktop :P
x
CristianCarbone: il newline alla fine io l'ho messo, ma comunque Salvo mi ha detto di persona che il programma di correzione automatica dovrebbe saltare automaticamente i newlines di troppo, poi non so.
x
DanieleBernardi: essì, evviva, allora a questo punto propongo una cosa migliore: tu fai il tuo homework e controlli che funzioni, dopodiché giri su TWiki per tutte le pagine personali degli users e invii il tuo homework a tutti gli indirizzi e-mail che trovi; mi sembra molto meglio, no?
-- Comment added by
AlbertoLaRocca on 17 Dec 2004
Se l'ottimizzazione delle risorse nn è un problema
ragazzi ho finito il prog ma con numeri di centinaia di cifre o ci mette tanto e arriva a impallare il pc lol
Mem: 191368K av, 189744K used, 1624K free, 0K shrd, 2364K buff
Swap: 142592K av, 12K used, 142580K free 54504K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
1460 claudyus 9 0 95352 93M 364 S 10,0 49,8 0:53 404
l'ha detto il prof che l'ottimizzazione nn è un problema vero
-- Comment added by Claudio on 17 Dec 2004
Senza titolo?
A me funziona fino a certe cifre, ma dopo va tutto in palla
-- Comment added by
RobertoVarazzi on 18 Dec 2004
Ho ottimizzato pure io
Bene ho finito anche io

Come vedo non sono il solo che programma ad orari assurdi ihih
Mem: 513708k total, 182500k used, 331208k free, 16k buffers
Swap: 995988k total, 26072k used, 969916k free, 56720k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME---+ COMMAND
16350 root 23 0 1356 368 1196 R 97.1 0.1 1:44.33 mcd-euclide
Il mio ha un'effetto contrario al tuo, cpu a palla, poca memoria (il test l'ho effettuato con 1024-m x 1024-n).
Ciao
-- Comment added by
AntoninoMuratore on 18 Dec 2004
Ehm ho dimenticato gli apici su ottimizzato
-- Comment added by
AntoninoMuratore on 18 Dec 2004
ma beati voi
ke siete tutti geni e riusciti a fare tutti gli hw

io devo ancora capire come iniziare oO''
-- Comment added by
MassimilianoMenculini on 18 Dec 2004
Algoritmo ricorsivo?
Salve, volevo sapere se l'agortimo di euclide va implementato in forma ricorsiva per forza o no?
Un grazie anticipato per la risposta.
-- Comment added by
FabioGiuffre on 18 Dec 2004
Controlli
Volevo sapere,
cosa bisognava fare ESATTAMENTE nel caso in cui si verificassero questi eventi, in modo da evitare di incorrere in problemi con la correzione automatica, allora:
se si richiede di fare il MCD(0,0) , cosa bisogna fare esattamente? si vuole un errore particolare o non si deve stampare nulla?
Stesso caso per MCD(un_numero,0) , cosa bisogna fare?
Un altro caso, se l'utente immette immediatamente due numeri >9 o <0 cosa bisogna fare?
Tutti questi casi non sono descritti nel testo, quindi spero, o che non vengano presi in considerazione durante il test, o che un professore risponda chiarendo ogni dubbio in modo da evitare problemi nella fase di correzione!
Grazie, saluti!
-- Comment added by
MarioBove on 19 Dec 2004
Senza titolo?
Ragazzi io ho fatto così:
Se si inserisce la prima cifra >9 0 <0 (sia nel primo numero che nel secondo) il programma termina.
Se si è inserito (0,x), (x,0) oppure (0,0) il programma termina. è giusto così?
-- Comment added by
RobertoVarazzi on 19 Dec 2004
Senza titolo?
Non si sà i professori non si sono ancora espressi molto bene in merito, per questo ho chiesto delucidazioni...
ciao
-- Comment added by
MarioBove on 19 Dec 2004
Senza titolo?
qualcuno ha provato ad eseguire il programma con i numeri dati nell'esempio da Salvo? il risultato del mio programma è 4 e non 21252.
inoltre ho dei problemi se provo a trovare l 'MCD con i numeri tipo
123456789 e 987654321 perchè mi si impalla il pc visto che la funzione mcd viene richiamata milioni di volte
-- Comment added by
StefanoCipriani on 19 Dec 2004
ZERI
Nel caso della richiesta di calcolo del MCD tra o uno 0 e un numero x oppure tra due 0 si deve considerare anche il caso in cui nella lista ci sia NON solo un unico 0, ma un numero strettamente maggiore di cifre uguali a zero (e solamente quelle ovviamente!)? Se cosi', ditemelo!!!!!
-- Comment added by
DavidBenedetti on 20 Dec 2004
sottrazione
regà!!!!! che metodo dite ke conviene usare per la sottrazione di 2 liste? è 1 bordello!!!! è tutto il pom ke ci provo e mi stò impazzendo!!!! viene troppo complicato!!!
-- Comment added by
StefanoLAVAGNO on 20 Dec 2004
si fa così
fai come avevo fatto io all'inizio, ho messo le cifre nelle liste e poi li ho trasformate in interi e ho lavorato con quelli, purtroppo mi sa che non si può fare! male che va lo consegno cosi
-- Comment added by
AlessioDezi on 20 Dec 2004
Ricorsione
Ragazzi ho una domandina.. implementando la differenza con una funzione ricorsiva
se le liste contengono piu' di 4096 nodi (cifre da 4096 elementi) il programma smette
di funzionare (stack overflow). Ora vorrei chiedere al prof.Salvo o magari se qualcuno ha gia' fatto la domanda, se durante la verifica saranno usati valori con---+ di 4096 elementi? In tal caso mi sa che dovro' lavorarci ancora un pochino
Grazie per la risposta.
-- Comment added by
AntoninoMuratore on 20 Dec 2004
grazie per il consiglio anke io avevo pensato di farlo così!!!però nn sò se magari nel tester ci mete cifre ke sono superiori ad int.!!!! e nella conversione poi potrebbe dare problemi!!!!! e poi penso ke salvo vuole che facciamo tutto con le liste!!! solo ke è 1 casino!!!!
-- Comment added by
StefanoLAVAGNO on 20 Dec 2004
Ricorsione e zeri
Salve,
anche io vorrei sapere se l'algoritmo di euclide va implementato in forma ricorsiva; ci sono infatti dei casi, come MCD(1, 1000000), in cui l'algoritmo di euclide provoca 1000000 di chiamate ricorsive, che provocano errore di memoria; nella forma iterativa invece non ci sono problemi. Se bisogna per forza usare la ricorsione l'importante è che nei test si tenga presente questo aspetto, e quindi non si diano degli input che provocano troppe chiamate ricorsive; comunque aspetto una risposta di conferma da parte del professore, altrimenti lascio la forma iterativa.
E' da notare che il problema delle troppe chiamate ricorsive non dipende dall'eccessiva lunghezza dei numeri, ma può dipendere semplicemente dalla differenza tra i numeri stessi, come nel caso di 1 e 1000000.
Per quanto riguarda gli zeri, nell'esporre l'algoritmo si parla di "due numeri interi strettamente positivi", quindi lo zero non dovrebe essere dato in input, ad ogni modo se uno dei due numeri è zero io restituisco come MCD l'altro numero dato in input, il che è coerente con la definizione di MCD.
-- Comment added by
VascoMarini on 21 Dec 2004
Senza titolo?
Ragazzi ma io ho fatto questa dichiarazione:
struct link_list {
int dato;
struct link_list *next;
};
typedef struct link_list catena;
typedef catena *lista;
MA PERCHè POI DURANTE IL PROGRAMMA SE SCRIVO:
d = malloc(sizeof (catena));
mi scrive un errore così:" invalid conversion from `void*' to `catena*'".
-- Comment added by
MauroMoretti on 21 Dec 2004
Senza titolo?
Per caso stai compilando il file come file c---++? Hai dato estensione cpp al file? In C la conversione avviene automaticamente, se no scrivi escplicitametne il cast:
d = (catena *)malloc(sizeof (catena));
-- Comment added by
VascoMarini on 21 Dec 2004
GRAZIE VASCO
6 UN GRANDE!!!!
-- Comment added by
MauroMoretti on 21 Dec 2004
Help (XCLAUDIO)
ragazzi come posso fare la sottrazione tra le due liste??? ke sistema devo usare?? qualkuno ke ha già terminato il programma e li funziona può darci una pikkola dritta??
XCLAUDIO
hai scritto:
"Fa il reverse:
m->0->9->9->9->5->NULL
n->0->7->8->NULL
e finchè n!=NULL sottraggo a l'elemento di m l'elemento di n , quindi m diventerà :
m->0->2->1->9->5->NULL
faccio il reverse della lista m e torna:
m->5->9->1->2->0->NULL
"
allora la mia domanda è:
come fai a dire ke deve essere n ad essere sottratto ad e enon il contrario?
per caso in base alla lunghezza del numero (ossia essendo n più corto sarà di certo più pikkolo di m...e in tal caso come ti comporti nel caso in cui n ed m hanno lo stesso numero di cifre????)
-- Comment added by
SalvatoreCaputo on 21 Dec 2004
disfatta
niente mi arrendo!cè un errore e sono 3 giorni ke c stò sopra!!!!!
va bè speriamo che vado meglio l'altro!!!!!
ormai dovrei rifà tutto da capo!ma nn ho tempo!!!!
spero ke a voi sia andata meglio!!!!
ciao ragazzi e auguri a tutti|||||
-- Comment added by
MauroMoretti on 22 Dec 2004
abbandono le armi
hai io ci rinuncio, ho scritto 240 righe di codice sembrava funzionasse ma nn va come deve...speriamo per il prox...
-- Comment added by
SalvatoreCaputo on 22 Dec 2004
Senza titolo?
misa' ke sono in ritardo vero? O_o
-- Comment added by
DanieleFaraci on 23 Dec 2004
in ritardo?
no è solo una tua impressione!
-- Comment added by
MauroMoretti on 23 Dec 2004
Senza titolo?
Ma quando escono questi risultati? un altro pò è un mese........
-- Comment added by
MarioBove on 20 Jan 2005
Senza titolo?
"Come sempre a tempo debito"!!! Non essere impaziente, Mario
-- Comment added by
AlbertoLaRocca on 21 Jan 2005
Senza titolo?
Altro che tempo debito qui stà facendo proprio i buffi! :P
I risultati del 5 li daranno al prossimo semestre mi sà
-- Comment added by
MarioBove on 22 Jan 2005
Senza titolo?
Professore, ora passiamo alle minacce: pubblichi quanto prima i risultati degli homeworks!!! Sono armato: ho un crivello di Eratostene e non ho paura di usarlo!!!
-- Comment added by
AlbertoLaRocca on 22 Jan 2005
Senza titolo?
ahahahahah Questa è forte
-- Comment added by
MarioBove on 23 Jan 2005
No such template def TMPL:DEF{PROMPT:before}