PDA

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;
}

cionci
25-11-2002, 10:28
Che strano... Con Dev-C++ non funziona...mentre con VC++ funziona perfettamente... Mah...

PS: manca l'asterisco davanti a p3 quando fai la somma...

cionci
25-11-2002, 10:34
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++...

cionci
25-11-2002, 10:40
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:

cionci
25-11-2002, 11:35
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]...