topolona (Normal User)
Newbie
Messaggi: 1
Iscritto: 16/07/2008
|
Ho provato a implementare la funzione per l'addizione per poi usarla iterativamente per la moltiplicazione
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #include<time.h> int getlength(char *list) { int i=0; while(list[i]!='\0') i++; return i; } int getlength2(int *list) { int i=0; while(list[i]!=-1) i++; return i; } int *loadlist(char *list) { int n=getlength(list),i; int *num=(int *)malloc((n+1)*sizeof(int)); char tmp; for(i=0; i<n; i++) { tmp=list[i]; num[n-1-i]=atoi(&tmp); } num[n]=-1; return num; } void print(int *res, int i) { if(res[i]!=-1) { print(res,i+1); if (i!=0) printf("%d",res[i]); else printf("%d\n",res[i]); } } int max(int x, int y) { if(x>=y) return x; else return y; } int *add(int *num1, int *num2) { int n=max(getlength2(num1),getlength2(num2))+100000; int *res=(int *)malloc((n+10000)*sizeof(int)); int tmp,rest=0,i=0; while(num1[i]!=-1 && num2[i]!=-1) { tmp=(num1[i]+num2[i]+rest); res[i]=tmp%10; rest=tmp/10; i++; } if(num1[i]!=-1) { while(num1[i]!=-1) { tmp=(num1[i]+rest); res[i]=tmp%10; rest=tmp/10; i++; } } else if (num2[i]!=-1) { while(num2[i]!=-1) { tmp=(num2[i]+rest); res[i]=tmp%10; rest=tmp/10; i++; } } if(rest!=0) res[i++]=rest; res[i]=-1; return res; } int *mult(int *num1, int *num2) { int n=max(getlength2(num1),getlength2(num2))+100000; int *res=(int *)malloc((n+1000000)*sizeof(int)); int i = 0; for(i = 0; i < *num2; i++) { res = add(res, num1); } return res; } int main(int argc, const char *argv[]) { clock_t start, end; int *num1, *num2, *res; if(argc!=3) { printf("Usage: add <integer 1> <integer 2>\n"); return 1; } start=clock(); num1=loadlist((char *)argv[1]); num2=loadlist((char *)argv[2]); res=add(num1,num2); res=mult(num1,num2); end=clock(); printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC); print(res,0); return 0; }
|
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Ciao Misciu87 (michelle-87[at]libero.it) ... hai cambiato nick?
Prima di tutto vorrei capire ... saluti tutti e poi cambi nick e ti ripresenti con la solita richiesta di scrittura di codice senza alcun impegno ...
vedi:
http://forum.html.it/forum/showthread.php?s=&threadid=1253763
vedi :
http://www.hwupgrade.it/forum/showthread.php?p=23224925
Ma quale facolta' segui? Come fai a studiare se non ci metti un minimo di impegno? Come fai a dare esami se non hai la minima idea di quello che devi scrivere?
Senza offesa ... ovviamente ... ma e' veramente strana la tua situazione ...
Ultima modifica effettuata da gantonio il 16/07/2008 alle 19:22 |
|
Misciu87 (Normal User)
Pro
Messaggi: 68
Iscritto: 01/07/2008
|
scusa ma se un bel pezzo di codice me lo danno già cosi cosa lo devo cambiare? io devo solo aggiungerci dei pezzi ma seguire quello schema li..lo capisci che non ti sto chiedendo di scrivere il codice ma solo di darmi qualche dritta?!
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Postato originariamente da Misciu87:
scusa ma se un bel pezzo di codice me lo danno già cosi cosa lo devo cambiare? |
Ma cosa vuoi dire con questa frase? Cosa c'entra con quello che ti ho detto nell'ultimo post?
io devo solo aggiungerci dei pezzi ma seguire quello schema li.. |
Aggiungerci dei pezzi? Devi realizzare il progetto che ti ha dato il professore da fare sulla moltiplicazione (unibo.it) prendendo come "esempio" quello sviluppato in classe per l'addizione ...
Come "esempio" ... cio' vuol dire che prendi quel codice e CI RAGIONI SOPRA, eliminando e modificando quello che serve ... e TE LO HANNO DETTO IN TUTTI I FORUM ...
lo capisci che non ti sto chiedendo di scrivere il codice ma solo di darmi qualche dritta?! |
Ti hanno dato TUTTI delle dritte ma sembra che tu NON CAPISCA nessun suggerimento e non sappia di cosa si sta parlando ... e quindi l'UNICO modo per arrivare a soluzione (COME IN ALTRI CASI per l'assembly) e' SCRIVERE TUTTO il codice ... e in tutti i forum ti hanno detto che questo non lo otterrai mai ... PERCHE' te lo hanno detto tutti ?
|
|
Misciu87 (Normal User)
Pro
Messaggi: 68
Iscritto: 01/07/2008
|
Questa funzione se vedi l'ho fatta io però..non capisco perche non vuoi aiutarmi non ti ho chiesto di fare un progetto dall'inizio alla fine..
Codice sorgente - presumibilmente C++ |
int *mult(int *num1, int *num2) { int n=max(getlength2(num1),getlength2(num2))+100000; int *res=(int *)malloc((n+1000000)*sizeof(int)); int i = 0; for(i = 0; i < *num2; i++) { res = add(res, num1); } return res; }
|
|
|
Misciu87 (Normal User)
Pro
Messaggi: 68
Iscritto: 01/07/2008
|
[quote ti ripresenti con la solita richiesta di scrittura di codice senza alcun impegno ...
Io non ho richiesto nessuna scrittura di codice a nessuno..
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Ma chi ti ha detto che non ti vuole aiutare?
Lo abbiamo fatto in tanti ... per esempio, perche' hai scritto in quel modo le prime due righe?
A cosa serve il valore 100000 che hai inserito?
Ultima modifica effettuata da gantonio il 16/07/2008 alle 23:17 |
|
Misciu87 (Normal User)
Pro
Messaggi: 68
Iscritto: 01/07/2008
|
per l'allocazione di memoria
|
|
Misciu87 (Normal User)
Pro
Messaggi: 68
Iscritto: 01/07/2008
|
in quello dell'addizione c'era n+1 ma non basta per la moltiplicazione
|
|