Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    codice errato

    ..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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per il passaggio devi scrivere

    x = inner_product(a, b, 5);

    Per il ciclo, forse volevi scrivere

    codice:
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    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!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    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 per conoscere queste e altre norme da rispettare per le discussioni future.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da RedSky90
    E così funziona!
    Sì ... se "devi" usare i puntatori va bene, ma funzionava comunque...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.