RISOLUZIONE ESERCIZIO

di il
20 risposte

RISOLUZIONE ESERCIZIO

Ciao a tutti

Mi chiamo Luigi e sono nuovo del forum, avrei bisogno di un aiuto per risolvere questo esercizio:

PREDISPORRE UN PROGRAMMA CHE CALCOLI IL FATTORIALE DI TUTTI I NUMERI INTERI MINORI N

il codice che ho scritto è queso:

#include <stdio.h>

main(){

int i,n,fat;
n=1;
for(i=1;n!=0;i++){

printf("Inserisci intero");
scanf("%d",&n);

if(n<n){
fat=n;
fat=fat*(n-1);

printf("Fat di %d e : %d",n,fat);
}
}
}

Quando digito lo 0 il programma termina ed è giusto così, ma non calcola il fattoriale quando inserisco il N minore

come mai? qualcuno mi più aiutare?
grazie

20 Risposte

  • Re: RISOLUZIONE ESERCIZIO

    Ho provato a risolvero da solo aggiungendo una variabile , ora il programma è così

    #include <stdio.h>

    main(){

    int i,n,fat,n2;
    n=1;
    for(i=1;n!=0;i++){

    printf("Inserisci intero");
    scanf("%d",&n);

    if(n<n2){
    fat=n;
    fat=fat*(n-1);

    printf("Fat di %d e : %d",n,fat);
    }
    }
    }

    Ora il programma funziona , mi fa inserire i numeri fino a quando non digito 0 per terminare il programma, mi esegue il fattoriale quando inserisco un numero minore da quello inserito precedentemente, però secondo me il calcolo del fattoriale è sbagliato , esempio come fattoriale di 10 mi da 90

    coe mai? dove sbaglio?
  • Re: RISOLUZIONE ESERCIZIO

    Prima cosa: ci sono dei tag appositi per postare il codice.

    Seconda cosa: cosa è il fattoriale? (partiamo dalle basi)
  • Re: RISOLUZIONE ESERCIZIO

    Ciao LPs, scusa non sapevo che ci sono dei tag apposta dove li trovo?, comunque si per il fattoriale partiamo dalle basi , ad ogni modo sono riuscito a risolvere l'esercizio, ora il codice è così:

    main(){

    int i,n,fat,n2,m;
    n=1;
    for(i=0;n!=0;i++){

    n2=n;
    printf("Inserisci intero\n");
    scanf("%d",&n);


    if(n<n2){

    fat=n;
    for(m=n;m>2;m--)
    {

    fat=fat*(m-1);

    }

    printf("Fat di %d e : %d\n",n,fat);

    }
    }
    }

    Va bene così o si poteva fare di meglio?
  • Re: RISOLUZIONE ESERCIZIO

    Penso che non sia quello che la consegna di chiede.
    Penso che tu debba richiedere un numero e calcolare/stampare tutti i fattoriali di tutti i numeri interi minori di tale numero.

    Quello che fa il tuo programma è calcolare il fattoriale di un numero, solo se esso è minore di una altro numero inserito in precedenza.

    inoltre:
    1) identa il codice
    2) la corretta dichiarazione di main è: int main (void)
    3) usa i tag appositi per postare il codice code e /code fra parentesi quadre
  • Re: RISOLUZIONE ESERCIZIO

    Hai ragione , ho capito male l'esercizio, infatti deve calcolare tutti i numeri interi minore di tale nu mumero, quindi se ho capito bene devo modificare il codice in modo che mi faccia il fattoriale del numero inserito , mi basta eliminare if gisuto?
  • Re: RISOLUZIONE ESERCIZIO

    Gigio80 ha scritto:


    Hai ragione , ho capito male l'esercizio, infatti deve calcolare tutti i numeri interi minore di tale nu mumero, quindi se ho capito bene devo modificare il codice in modo che mi faccia il fattoriale del numero inserito , mi basta eliminare if gisuto?
    Per quello che ho capito io devi calcolare un fattoriale per ogni numero minore del numero inserito, quindi semplicemente eliminare l'if non basta.

    Devi inoltre tenere conto del range che le variabili che stai utilizzando.

    Il massimo numero che puoi rappresentare con un int è: 2,147,483,647

    Quindi il massimo numero di cui puoi calcolare il fattoriale è : 12! = 479001600
  • Re: RISOLUZIONE ESERCIZIO

    Intanto grazie per l'aiuto,
    il testo dell'esercizio e questo: * 1. Predisporre un programma che calcola il valore dei fattoriali di tutte i numeri interi minori uguali a n.
    NOn ho capito bene il discorso del massimo numero che posso calcolare, perchè è 12, ho eliminato if per provare ed ora fa il fattoriale di ogni numero che inserisco e mi fa anche quelli oltre al 12 es ha calcolato il 25!=2076180480 non è giusto?
  • Re: RISOLUZIONE ESERCIZIO

    Il fattoriale di 25 è: 1.551121004×10²5......quindi no, non è giusto. Una variabile, in base al suo tipo, può rappresentare un certo range di valori, non qualunque, come ti ho detto nel post precedente, ma questo discorso esula da quello che l'insegnante ti sta chiedendo, visto il tuo grado di conoscenza attuale. Prendilo come un dato di fatto: al massimo puoi calcolare il fattoriale di 12.

    Se proprio vuoi, utilizzando una variabile di tipo unsigned long long int puoi arrivare a 18.446.744.073.709.551.615 e quindi calcolare il fattoriale di 20 che è 2.432902008×10¹8


    Tornando alla tua consegna, io la interpreto così: se l'utente inserisce 10 l'utput del programma deve essere:
    
    9!=362880
    8!=40320
    7!=5040
    

    è così via fino a 1
  • Re: RISOLUZIONE ESERCIZIO

    Ora mi è più chiaro , quindi devo inserire anche delle variabili con un max e un min di valore da calcolare? o mi basta inserirli dei limiti nel for?
  • Re: RISOLUZIONE ESERCIZIO

    Gigio80 ha scritto:


    Ora mi è più chiaro , quindi devo inserire anche delle variabili con un max e un min di valore da calcolare? o mi basta inserirli dei limiti nel for?
    Puoi risolverlo come vuoi: o chiedi all'utente un valore entro certi limiti ( e li controlli) o , indipendentemente dal numero inserito, calcoli solo i fattoriali dei numeri che riesci a rappresentare.
  • Re: RISOLUZIONE ESERCIZIO

    Ho fatto come mi hai suggerito, ho scritto questo codice
    
    #include <stdio.h>
    
    int main(void){
    	
    	int i,a,fat;
    	
    	printf("Inserisci numero: \n");
    	scanf("%d",&a);
    	printf("il numero inserito per il calcolo del fattoriale e: %d\n\n",a);
    	
    	for(i=a;i>0&&i<=12;i--){
    		
    		fat=fat*(i-1);
    		printf("Il fattoriale del numero %d  e: %d\n",i,fat);
    		
    	}
    	
    	}
    	
    però il calcolo che fa del fattoriale è sbagliato , dove sbaglio?
  • Re: RISOLUZIONE ESERCIZIO

    Non va bene, ma non capisco se non hai le basi di programmazione o di matematica...

    Devi considerare il tuo codice al contrario, ovvero partire dal fattoriale di 1 fino ad arrivare fino al fattoriale di a-1.
    In questa maniera il for resta molto semplice e ogni ciclo calcoli il fattoriale e lo stampi.
    Il fatto di validare il numero inserito lo puoi fare tranquillamente prima del ciclo for: mi inserisci un numero->controllo se è nei limiti accettabili->se no lo limito e informo l'utente.
    Inoltre tutte le tue variabili locali devono essere inizializzate a qualche valore, per esempio fat devi inizializzarla a 1 prima di entrare nel ciclo for.

    Per tagliare la testa al toro, qui di seguito trovi il codice corretto, cerca di capire le modifiche e fammi sapere se è chiaro:
    
    #include <stdio.h>
    
    int main(void)
    {
    
    	int i, a, fat;
    
    	printf("Inserisci numero: \n");
    	scanf("%d", &a);
    	printf("il numero inserito per il calcolo del fattoriale e: %d\n\n", a);
    
    	// Controllo che il numero inserito resti nei limiti accettabili 
    	if (a>13)
    	{
    		printf("Il numero inserito non è calcolabile\n");
    		a=13;
    	}
    
    	// inizializzo la variabile con cui calcolerò il fattoriale
    	fat=1;
    
    	// Ciclo per tutti i numeri minori del numero inserito
    	for (i = 1; i < a; i++)
    	{
    		fat = fat*i;
    
    		printf("Il fattoriale del numero %2d  e: %d\n", i, fat);
    
    	}
    }
    
  • Re: RISOLUZIONE ESERCIZIO

    Grazie mille per l'aiuto , il mio grosso problema è la matematica , infatti il discorso del fattoriale non mi era chiaro , per definizione so il fattoriale di un numero e dato dal prodotto di tutti i numeri reali minori e uguale diversi da 0 es: 5!=5*4*3*2*1->N=N*(N-1) giusto? nel testo del libro avevo come esempio per il calcolo del fattoriale questo codice:
    
    int n,m,fat;
    
    printf("Inserisci N");
    scanf("%d",&n);
    
    fat=n; // fat assume il valore inserito
    
    for(m=n;m>2;m--) //il ciclo inizia dal numero inserito, cintrolla che sia maggiore di 2 e viene eseguito il primo cicli fat=fat*(m-1)
    {
    
    fat=fat*(m-1);
    
    printf("Il fattoriale di %d e: %d",n,fat);
    }
    
    

    E gisuto ?

    Ieggendo il tuo codice ho capito i miei errori :

    n°1 dovevo inserire un codice per il controllo del numero inserito
    n°2 prima del ciclo for dovevo inizializzare la variabile fat=1 perchè sempre per la definizione di sopra deve essere diversa da 0 giusto?
    n°3 il calcolo del fattoriale non è fat=fat*(i-1); ma questo fat = fat*i;

    Però dai tutto sommato ci stavo arrivando o no???

    Ora ho un altro esercizio da fare , predisporre un programma che calcoli il maggiore il minore e la somma dei N inseriti, vediamo cosa combino , posso disturbarti ancora se ho bisogno?
  • Re: RISOLUZIONE ESERCIZIO

    Spero vivamente che il codice del libro sia
    
    	int n, m, fat;
    
    	printf("Inserisci N");
    	scanf("%d", &n);
    
    	fat = n; // fat assume il valore inserito
    
    	for (m = n; m > 2; m--) //il ciclo inizia dal numero inserito, cintrolla che sia maggiore di 2 e viene eseguito il primo cicli fat=fat*(m-1)
    	{
    
    		fat = fat * (m - 1);
    	}
    
    	printf("Il fattoriale di %d e: %d\n", n, fat);
    
    altrimenti meglio se lo butti

    Se hai altri problemi apri un nuovo thread e qualcuno ti darà una mano di sicuro.

    Ciao
Devi accedere o registrarti per scrivere nel forum
20 risposte