View Full Version : Somma array
MetalMassacre
25-11-2002, 09:31
Ciao a tutti, ho un nuovo quesito da risolvere....
devo fare la somma incrociata degli elementi contenuti in due array di interi distinti...ma devo usare assssolutamente i puntatori....ma tanto per cambiare c'e qualcosa che non torna..:mad:
Avete idea di cosa possa aver sbagliato?
#include <stdlib.h>
#include <stdio.h>
#define DIM 5
int main()
{int a[DIM];
int b[DIM];
int c[DIM];
int *p1,*p2,*p3;
p3=&c[0];
printf ("Digita i %d numeri del primo array\n",DIM);
for (p1=&a[0]; p1<=&a[DIM-1]; p1++)
scanf ("%d", p1);
printf ("Digita i %d numeri del secondo array\n",DIM);
for (p2=&b[0]; p2<=&b[DIM-1]; p2++)
scanf ("%d", p2);
for (p1=&a[0]; p1<=&a[DIM-1]; p1++,p2++,p3++)
{p3=*p1+*p2;
printf ("%d ",*p3);}
system("PAUSE");
return 0;
}
Che strano... Con Dev-C++ non funziona...mentre con VC++ funziona perfettamente... Mah...
PS: manca l'asterisco davanti a p3 quando fai la somma...
E invece l'errore c'era...
Devi reinizializzare p1 e p2 all'inizio dei rispettivi vettori...
#include <stdlib.h>
#include <stdio.h>
#define DIM 5
int main()
{int a[DIM];
int b[DIM];
int c[DIM];
int *p1,*p2,*p3;
p3=c;
printf ("Digita i %d numeri del primo array\n",DIM);
for (p1=a; p1<=&a[DIM-1]; p1++)
scanf ("%d", p1);
printf ("Digita i %d numeri del secondo array\n",DIM);
for (p2=b; p2<=&b[DIM-1]; p2++)
scanf ("%d", p2);
for (p1=a, p2=b; p1<=&a[DIM-1]; p1++,p2++,p3++) /*gurda qui*/
{*p3=*p1+*p2;
printf ("%d ",*p3);}
system("PAUSE");
return 0;
}
Ora però non mi spiego come potesse funzionare in VC++...
Che bello ;)
Ti spiego perchè funzionava...
Il vettore a veniva allocato dopo di b...quindi &b[5] == &a[0]...
Io immettevo gli stessi numeri in entrambi i vettori (1 2 3 4 5)...
Finita l'immissione p2 mi puntava a a[0]...
Così facevo la somma delle stesse locazioni in memoria ed avendo immesso gli stessi numeri in entrambi i vettori la somma era quella che sarebbe dovuta essere :)
MetalMassacre
25-11-2002, 11:18
Originariamente inviato da cionci
[B]Che bello ;)
Ti spiego perchè funzionava...
Il vettore a veniva allocato dopo di b...quindi &b[5] == &a[0]...
Io immettevo gli stessi numeri in entrambi i vettori (1 2 3 4 5)...
Finita l'immissione p2 mi puntava a a[0]...
Così facevo la somma delle stesse locazioni in memoria ed avendo immesso gli stessi numeri in entrambi i vettori la somma era quella che sarebbe dovuta essere :)
Ah! anche a me dava sto problema prima di postare...poi l'ho modificato e cmq l'ho postato sbagliato....un'altra cosa la somma doveva essere incrociata nel senso : c[0]=a[0]+b[DIM-1] c[1]=a[1]+b[DIM-1-1] e così via.....ma ho risolto ...dovrebbe essere ok cosi...
#include <stdlib.h>
#include <stdio.h>
#define DIM 5
int main()
{int a[DIM];
int b[DIM];
int c[DIM];
int *p1,*p2,*p3;
p3=&c[0];
printf ("Digita i %d numeri del primo array\n\n",DIM);
for (p1=&a[0]; p1<=&a[DIM-1]; p1++)
scanf ("%d", p1);
printf ("\nDigita i %d numeri del secondo array\n\n",DIM);
for (p2=&b[0]; p2<=&b[DIM-1]; p2++)
scanf ("%d", p2);
printf ("\nLa somma incrociata dei numeri inseriti corrisponde a:\n\n");
for (p1=a, p2=&b[DIM-1]; p1<=&a[DIM-1]; p1++,p2--,p3++)
{*p3=*p1+*p2;
printf ("%d ",*p3);}
printf ("\n\n");
system("PAUSE");
return 0;
}
MetalMassacre
25-11-2002, 11:25
Originariamente inviato da cionci
[B]E invece l'errore c'era...
Devi reinizializzare p1 e p2 all'inizio dei rispettivi vettori...
#include <stdlib.h>
#include <stdio.h>
#define DIM 5
int main()
{int a[DIM];
int b[DIM];
int c[DIM];
int *p1,*p2,*p3;
p3=c;
printf ("Digita i %d numeri del primo array\n",DIM);
for (p1=a; p1<=&a[DIM-1]; p1++)
scanf ("%d", p1);
printf ("Digita i %d numeri del secondo array\n",DIM);
for (p2=b; p2<=&b[DIM-1]; p2++)
scanf ("%d", p2);
for (p1=a, p2=b; p1<=&a[DIM-1]; p1++,p2++,p3++) /*gurda qui*/
{*p3=*p1+*p2;
printf ("%d ",*p3);}
system("PAUSE");
return 0;
}
Ora però non mi spiego come potesse funzionare in VC++...
dimmmi se ho capito bene....
allora si riinizializzano entrambi p1=a, p2=&b[DIM-1]; perche nei rispettivi cicli for precedenti p1 era diventato=&a[DIM-1] (condizione di termine del ciclo); e p2 era diventato =&b[DIM-1]; ??? ho capito bene?
se cosi allora non mi servirebbe riinizializzare p2 dato che parto dall'ultimo elemento dell'array b...adesso provo....
e invece serve...mi stampa cazz@te se non riinizializzo anche p2...ma perche? in cosa è sbagliato il mio ragionamento?:confused:
Originariamente inviato da MetalMassacre
[B]
dimmmi se ho capito bene....
allora si riinizializzano entrambi p1=a, p2=&b[DIM-1]; perche nei rispettivi cicli for precedenti p1 era diventato=&a[DIM-1] (condizione di termine del ciclo); e p2 era diventato =&b[DIM-1]; ??? ho capito bene?
Hai capito bene... Però p1 era diventato &a[DIM]....e p2 era &b[DIM]... Perchè dal for ci escono quando i puntatori sono maggiori dell'ultima cella dell'array...quindi quando p1 > &a[DIM-1]...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.