Problema con codice "Formula di McLaurin"

di GIacomo24 il
5 risposte

Ciao, sono un nuovo iscritto. Non riesco a capire il perché dell'errore “error: expected ';', ',' or ')' before numeric constant” quando lascio ‘ORDER’ nell'argomento della funzione exp mentre se cambio il nome della variabile ma non la inizializzo il codice viene eseguito. Inoltre al momento dell'esecuzione, dopo aver inserito il valore di 'x' il codice si blocca (Immagino ci sia un errore nella dichiarazione delle funzioni). Il codice è il seguente:

#include <stdio.h>
#define ORDER 15
unsigned potenza(unsigned, unsigned);
unsigned fattoriale(unsigned);
float exp(unsigned x, unsigned ORDER) {
   float somma=0.0;
   unsigned n;
   for (n=0;n<ORDER;n++) {
   somma+= (float) potenza(x,n)/fattoriale(n);
   }
   return somma;
}
unsigned potenza (unsigned x, unsigned n) {
   int i;
   unsigned prodotto=1;
   for (i=0; i<n; i++) {
       prodotto=prodotto*x;
   }
   return prodotto;
}
unsigned fattoriale (unsigned x) {
   unsigned prodotto=1;
   unsigned n;
   while (n>1) {
       prodotto=prodotto*n;
       n--;
   }
   return prodotto;
}
int main() {
   float x, risultato;
   printf ("Inserisci il valore di x dell'equazione e^x:\n");
   scanf  ("%f", &x);
   risultato=exp(x,ORDER);
   printf ("Il risultato di e^(%f) e': %f", x, risultato);
   return 0;
}

Grazie in anticipo.

5 Risposte

  • #define ORDER 15
    float exp(unsigned x, unsigned ORDER) {

    .

    dopo che il PREPROCESSORE ha fatto il suo lavoro, diventa

    float exp(unsigned x, unsigned 15) {

    e questo NON E' sintatticamente valido.

  • 02/02/2023 - migliorabile ha scritto:


    #define ORDER 15
    float exp(unsigned x, unsigned ORDER) {

    .

    dopo che il PREPROCESSORE ha fatto il suo lavoro, diventa

    float exp(unsigned x, unsigned 15) {

    e questo NON E' sintatticamente valido.

    Grazie mille. Cambiando comunque il nome della variabile nella funzione, però, il codice non prosegue dopo l'acquisizione del valore di x, ma non riesco a trovare l'errore nel codice.

  • Che valore inserisci per x?

    Perchè in

    risultato=exp(x,ORDER);

    x è un float se la funzione si attende un unsigned? Controlla cosa non va …

    Hai fatto un po' di debugging? Magari inserendo qualche printf qui e lì per capire come procedono i calcoli?

  • Ho individuato almeno un paio di errori nel tuo codice.
    Oltre a quello che ti hanno già segnalato, relativo all'uso improprio come variabile della costante ORDER, la funzione fattoriale prevede il parametro x, ma non ne fai uso dentro la funzione.

    Inoltre sconsiglio di usare per le funzioni nomi già utilizzati dalle librerie di linguaggio, come exp che per lo standard C90 è definita come

    double exp (double x);

    potrebbe mandare in conflitto il compilatore, specie se stai utilizzando come IDE il Dev-C++.

  • Grazie mille a tutti. Effettivamente c'erano un po' di errori. Farò più attenzione  ; )

Devi accedere o registrarti per scrivere nel forum
5 risposte