Oppure

Loading
16/07/08 15:29
topolona
Ho provato a implementare la funzione per l'addizione per poi usarla iterativamente per la moltiplicazione
#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int getlength(char *list) 
{
	int i=0;
	while(list[i]!='Ho provato a implementare la funzione per l'addizione per poi usarla iterativamente per la moltiplicazione

#include <stdio.h>
#include <stdlib.h>
#include<time.h>

int getlength(char *list) 
{
	int i=0;
	while(list[i]!='{parsed_message}') 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;
}
') 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; }
aaa
16/07/08 17:05
gantonio
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:

forum.html.it/forum/…

vedi :

hwupgrade.it/forum/…

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 16/07/08 17:22
aaa
16/07/08 17:53
Misciu87
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?!
aaa
16/07/08 18:11
gantonio
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 ?

aaa
16/07/08 21:13
Misciu87
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..
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; 
} 
aaa
16/07/08 21:17
Misciu87
[quote ti ripresenti con la solita richiesta di scrittura di codice senza alcun impegno ...


Io non ho richiesto nessuna scrittura di codice a nessuno..
aaa
16/07/08 21:17
gantonio
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 16/07/08 21:17
aaa
16/07/08 21:18
Misciu87
per l'allocazione di memoria
aaa