PDA

Visualizza la versione completa : [C] Programma si blocca in chiamata a funzione con puntatori


RedSky90
08-02-2012, 14:18
..Sto studiando per l'esame di programmazione in linguaggio c.
Praticamente il programma non mi da errori durante la compilazione, ma si blocca nel momento in cui provo ad eseguirlo. Non riesco a capire qual'è il problema.

#include <stdio.h>
double inner_product(const double *a, const double *b, int n);

int main(void)
{
double a[5] = {1.5, 2, 2.3, 5, 7};
double b[5] = {2, 3.4, 7, 0.3, 5};
double x;

x = inner_product(&a[], &b[], 5);

printf("Il risultato e': %lf ", x);

return 0;
}

double inner_product(const double *a, const double *b, int n)
{
double sum = 0;

for(a = &a[0]; a < &a[n]; a++)
for(b = &b[0]; b < &b[n]: b++)
sum += (*a)*(*b);

return sum;
}


L'errore potrebbe stare nella scrittura degli argomenti della chiamata a funziona? Non sono proprio sicura che per richiamare i puntatori a vettore a,b bisogna scrivere &a[], &b[]... però non saprei che modifica apportare.

Spero davvero che qualcuno mi aiuti a sciogliere questo dilemma.
Grazie mille in anticipo.

oregon
08-02-2012, 14:30
Per il passaggio devi scrivere

x = inner_product(a, b, 5);

Per il ciclo, forse volevi scrivere



double inner_product(const double *a, const double *b, int n)
{
int i, j;
double sum = 0;

for(i=0; i<n; i++)
for(j=0; j<n; j++)
sum += a[i]*b[j];

return sum;
}

oppure ... ?

Sicuramente non come hai scritto ...

RedSky90
08-02-2012, 15:42
Eh..no..nella traccia dell'esercizio c'era scritto proprio esplicitamente di utilizzare l'artimetica dei puntatori e non l'indicizzazione.
Grazie mille per avermi fatto notare l'errore nella chiamata a funzione.
Ho cambiato anche il ciclo, introducendo altri due puntatori p e q:

double inner_product(const double *a, const double *b, int n)
{
double sum = 0;
const double *p, *q;

for(p=a; p<a+n; p++)
for(q=b; q<b+n; q++)
sum += (*p)*(*q);

return sum;
}

E così funziona! :)

alka
08-02-2012, 15:58
Originariamente inviato da RedSky90
codice errato

Questo titolo non è corretto, poiché manca il linguaggio ed è davvero poco significativo: ho provveduto io a correggerlo, così puoi prendere spunto.

Inoltre, il codice sorgente va formattato usando il tag [CODE].

Leggi il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) per conoscere queste e altre norme da rispettare per le discussioni future.

oregon
08-02-2012, 16:01
Originariamente inviato da RedSky90
E così funziona! :)

Sì ... se "devi" usare i puntatori va bene, ma funzionava comunque...

Loading