Calcolo Fattoriale

di Antonio-Sim il
27 risposte

Buona sera chiedo cortesemente aiuto  per il calcolo del fattoriale di un numero, il risultato lo ottengo nella void ,ma se la richiamo nel main mi fornisce 0 come risultato,Grazie dell'aiuto

/******************************************************************************

                            Online C Compiler.
                Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
void Valore_Fattoriale(int* Risultato_Fattoriale,int ValFattoriale,int InputFattoriale);
void AttesaRisposta();//Prototipo defaultnzione
void main(void)
{
    //Dichiarazioni variabili

    char Risposta;
   //Puntatore che tiene conto del risultato del ValoreFattoriale
   int Result;

    //Risultato_Fattoriale=&Fattoriale;
   // printf("Il Risultato è: %d",*Risultato_Fattoriale );
    int ValoreFattoriale;//Variabile di input che contiene il Valore da calcolare
     int Fattoriale=1;//Inizializzo il valore per il calcolo del fattoriale
    do
    {

        printf("Inserisci il valore del Fattoriale da calcolare");
           scanf(" %d", &ValoreFattoriale);

           Valore_Fattoriale (&Result, Fattoriale,ValoreFattoriale);

           //Funzione a cui passa un valore per riferimento Result e mi fornisce il risultato
           //Fattoriale=1
           //E con Valore Fattoriale,il valore da calcolare
    printf("IL valore Fattoriale è: %d \n",Result);

       AttesaRisposta();//Richiamo La void
        scanf (" %c", &Risposta);
        getchar();
    }while(Risposta =='y'|| Risposta =='Y'); //Routine per conitunuare il programma o Terminarlo


}
//Scrivo la Void Attesa Rispsosta che mi stampa il menu
void AttesaRisposta()
{
    printf("Voui Continuare:?\n"
           "Si)Y: or y:\n:"
           "No)N: or n: \n ");
}
//Scrittura void
void Valore_Fattoriale(int* Risultato_Fattoriale,int ValFattoriale,int InputFattoriale)
{
 Risultato_Fattoriale=&ValFattoriale;//Risultato_Fattoriale Prende il valore 1,poichè ValFattoriale=1

    for(int i=1;i<=InputFattoriale;i++)
    {
        //*Risultato_Fattoriale  *=   i;//Forma Compatta
        *Risultato_Fattoriale =*Risultato_Fattoriale  * i;//Scrittura equivalente a Sopra
        //Con questa scrittura restituisco il valore contentuo nella varaibile puntata
        printf("Risultato Parziale: %d \n",*Risultato_Fattoriale);


    }
    printf("Il risultato Finale e': %d \n",*Risultato_Fattoriale);
}

27 Risposte

  • Sostituisci

    Risultato_Fattoriale=&ValFattoriale;//Risultato_Fattoriale

    Con

    *Risultato_Fattoriale = 1;

    ValFattoriale è inutile, anzi dannoso… perché?

  • Prova a riscrivere la funzione in modo che sia

    int Fattoriale(int InputFattoriale);

    P.S. @Antonio… dovresti rispondere alle altre discussioni che apri…

  • ATTENTO che

    1. con un intero a 32 bit 
      1. NON PUOI CALCOLARE il fattoriale di 13
      2. il fattoriale di numeri maggiori di 33 sono TUTTI 0 (ZERO)
    2. con un numero intero a 64 bit 
      1. NON PUOI CALCOLARE il fattoriale di 21
      2. il fattoriale di numeri maggiori di 65 sono TUTTI 0 (ZERO)

    .

  • 28/05/2024 - oregon ha scritto:


    Prova a riscrivere la funzione in modo che sia

    int Fattoriale(int InputFattoriale);

    P.S. @Antonio… dovresti rispondere alle altre discussioni che apri…

    GRAZIE,scusami se non ho risposto a qualche discussione, vorrei usarla cosi per imparare a gestire i puntatori

  • Ciao Weistrass ho provato come dici tu ,ma non può funzionare perchè ad un puntatore puoi passare un indirizzo di una variabile ,ma non un valore.

    Ho modificato il codice cosi nella void Valore_Fattoriale

        int ValFattoriale=1;
    Risultato_Fattoriale=&ValFattoriale;//Risultato_Fattoriale Prende il valore 1,poichè ValFattoriale=1

    ma non funziona .

  • Devo usare un tipo di dati double?

    Se si lo specificatore di formato nella scanf o nella printf e' %g oppure %G.Grazie

  • Se vuoi usare i puntatori ti basta

    void Fattoriale(int *risultato);

    ti basta. Pensaci.

    P.S. per ora fallo con un int, poi lo farai con un double

  • 28/05/2024 - oregon ha scritto:


    Se vuoi usare i puntatori ti basta

    void Fattoriale(int *risultato);

    ti basta. Pensaci.

    P.S. per ora fallo con un int, poi lo farai con un double

    Ho provato ma permane l'errore:

       /******************************************************************************
    
                                Online C Compiler.
                    Code, Compile, Run and Debug C program online.
    Write your code in this editor and press "Run" button to compile and execute it.
    
    *******************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    void Valore_Fattoriale(int *Risultato_Fattoriale);
    void AttesaRisposta();//Prototipo defaultnzione
    void main(void)
    {
        //Dichiarazioni variabili
    
        char Risposta;
       //Puntatore che tiene conto del risultato del ValoreFattoriale
       int Result=0;
    
        //Risultato_Fattoriale=&Fattoriale;
       // printf("Il Risultato è: %d",*Risultato_Fattoriale );
       
        do
        {
    
           
    
               Valore_Fattoriale (&Result);
    
               //Funzione a cui passa un valore per riferimento Result e mi fornisce il risultato
               //Fattoriale=1
               //E con Valore Fattoriale,il valore da calcolare
        printf("IL valore Fattoriale è: %d \n",Result);
    
           AttesaRisposta();//Richiamo La void
            scanf (" %c", &Risposta);
            getchar();
        }while(Risposta =='y'|| Risposta =='Y'); //Routine per conitunuare il programma o Terminarlo
    
    
    }
    //Scrivo la Void Attesa Rispsosta che mi stampa il menu
    void AttesaRisposta()
    {
        printf("Voui Continuare:?\n"
               "Si)Y: or y:\n:"
               "No)N: or n: \n ");
    }
    //Scrittura void
    void Valore_Fattoriale(int *Risultato_Fattoriale)
    {
     int ValoreFattoriale;//Variabile di input che contiene il Valore da calcolare
         int Fattoriale=1;//Inizializzo il valore per il calcolo del fattoriale
     printf("Inserisci il valore del Fattoriale da calcolare");
               scanf(" %d", &ValoreFattoriale);
    Risultato_Fattoriale=&Fattoriale;
        for(int i=1;i<=ValoreFattoriale;i++)
        {
            //*Risultato_Fattoriale  *=   i;//Forma Compatta
            *Risultato_Fattoriale =*Risultato_Fattoriale  * i;//Scrittura equivalente a Sopra
            //Con questa scrittura restituisco il valore contentuo nella varaibile puntata
            printf("Risultato Parziale: %d \n",*Risultato_Fattoriale);
    
    
        }
        printf("Il risultato Finale e': %d \n",*Risultato_Fattoriale);
    }
  • La richiesta del valore da calcolare lo devi fare fuori dalla funzione, nel main. E lo passi per puntatore alla funzione che fa il calcolo. Quando torni al main fai la printf del risultato.

  • 28/05/2024 - Antonio-Sim ha scritto:


    Ciao Weistrass ho provato come dici tu ,ma non può funzionare perchè ad un puntatore puoi passare un indirizzo di una variabile ,ma non un valore.

    Ho modificato il codice cosi nella void Valore_Fattoriale

        int ValFattoriale=1;
    Risultato_Fattoriale=&ValFattoriale;//Risultato_Fattoriale Prende il valore 1,poichè ValFattoriale=1

    ma non funziona .

    Ma secondo te do suggerimenti a caso?

    https://onlinegdb.com/smQimJUh5

  • 29/05/2024 - Weierstrass ha scritto:

    Grazie del prezioso consiglio e suggerimento. La tua scrittura è corretta ,non capisco perchè non funzionava.

    Non capisco però con questa scrittura :

      int Fattoriale=1;

    Risultato_Fattoriale=&Fattoriale;

    inserita nella void fattoriale, non ottengo il risultato nel main quando richiamo la funzione,me lo puoi spiegare cortesemente.Grazie

    https://onlinegdb.com/cea7q3OmV

  • 28/05/2024 - oregon ha scritto:


    La richiesta del valore da calcolare lo devi fare fuori dalla funzione, nel main. E lo passi per puntatore alla funzione che fa il calcolo. Quando torni al main fai la printf del risultato.

    Sinceramente non ho capito come scriverla con un solo argomento

  • 29/05/2024 - Antonio-Sim ha scritto:


    29/05/2024 - Weierstrass ha scritto:

    Grazie del prezioso consiglio e suggerimento. La tua scrittura è corretta ,non capisco perchè non funzionava.

    Non capisco però con questa scrittura :

      int Fattoriale=1;

    Risultato_Fattoriale=&Fattoriale;

    inserita nella void fattoriale, non ottengo il risultato nel main quando richiamo la funzione,me lo puoi spiegare cortesemente.Grazie

    https://onlinegdb.com/cea7q3OmV

    Perché il puntatore l'hai reindirizzato su una variabile locale, quindi non fai nulla sulla variabile nel main. Il tuo codice è equivalente a questo

    https://onlinegdb.com/W_z0WSCVQ

  • 29/05/2024 - Antonio-Sim ha scritto:


    Sinceramente non ho capito come scriverla con un solo argomento

    Ma almeno ci provi? Chi vuole imparare a programmare deve tentare di ragionare e scrivere del codice.

    Altrimenti… 

Devi accedere o registrarti per scrivere nel forum
27 risposte