Calcolo Fattoriale

di il
27 risposte

Calcolo Fattoriale

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

  • Re: Calcolo Fattoriale

    Sostituisci

    Risultato_Fattoriale=&ValFattoriale;//Risultato_Fattoriale

    Con

    *Risultato_Fattoriale = 1;

    ValFattoriale è inutile, anzi dannoso… perché?

  • Re: Calcolo Fattoriale

    Prova a riscrivere la funzione in modo che sia

    int Fattoriale(int InputFattoriale);

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

  • Re: Calcolo Fattoriale

    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)

    .

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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 .

  • Re: Calcolo Fattoriale

    Devo usare un tipo di dati double?

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

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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);
    }
  • Re: Calcolo 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.

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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

  • Re: Calcolo Fattoriale

    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