Problema programma calcolo fattoriale

di il
3 risposte

Problema programma calcolo fattoriale

Ciao a tutti, ho qualche problema con un programma che riesco a compilare, ma non funziona come richiesto. Il testo dell'esercizio recita:

Dato un numero N > 0 fornito da linea di comando, si calcoli il più piccolo numero M tale che M! > N. Si definisca nel programma una funzione che calcoli il fattoriale di un numero e la funzione che svolge la verifica richiesta utilizzando la funzione fattoriale.

Il mio codice è questo:
#include <stdio.h>
#include <stdlib.h>

int control(int);
int fact(int);

int main(int argc, char *argv[]) {

	int N = atoi(argv[1]);
	
	if(N <= 0) {
		puts("Inserire un valore N > 0");
		return 1;
	}
	
	int M = control(N);
	
	printf("Il piu' piccolo numero M tale che M! > %i e' %i\n", N, M); 

	return 0;
}

int control(int N) {

	int Ma;
	for(Ma = 1; fact(Ma) <= N; Ma++);
	
	Ma++;

	return Ma;
}

int fact(int Ma) {

	int a;
	
	for(a = 1; Ma > 1; Ma--)
		a = Ma * a;
	
	return a;
}
Credo che il problema non sia nelle singole funzioni, ma come queste interagiscono tra loro. Però non riesco a farlo funzionare: l'output è sempre 5 e da un certo valore di ingresso in poi è 6. Qualcuno ha idea di come aiutarmi per favore?

3 Risposte

  • Re: Problema programma calcolo fattoriale

    Lasciami dire che hai un modo piuttosto contorto di utilizzare il for() ottenendo così un codice che è davvero difficile da capire!
    Ti suggerisco di inserire delle printf() all'interno dei cicli per vedere come cambiano le variabili (ad es.: 'a' all'interno del for della funzione fact() ed 'Ma' all'interno della control()).
  • Re: Problema programma calcolo fattoriale

    Ho riscritto in C la funzione control()
    #define MAX 100
    
    int control(int N) 
    {
       int Ma;
       for(Ma = 1; Ma < MAX; Ma++)
       {
    	   if( fact(Ma) > N )
    		   return Ma;
       }
       return -1;
    }
    
    e questa da i risultati corretti.
    Ci sarebbe un modo più furbo per implementare la control(), senza richiamare la fact(), ovvero facendo il calcolo del fattoriale progressivamente al crescere di Ma...
  • Re: Problema programma calcolo fattoriale

    Ti ringrazio molto!
Devi accedere o registrarti per scrivere nel forum
3 risposte