Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Calcolo fattoriale in C\C++

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] Calcolo fattoriale in C\C++

Messaggioda Foto Utentesilence1992 » 26 gen 2014, 20:46

Ciao a tutti,
ho un problema con il seguente codice...
Quando compilo non segnala alcun errore ...
Però se inserisco n=0 mi da come risultato 2 e non il messaggio "Errore......"
Secondo voi cosa c'è che non va?
Codice: Seleziona tutto
//calcolo fattoriale di n con funzioni

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

double fattor(int);
int leggi_int();
void stampa(int,double);

main()
{
   int n;
   double fatt;
   
   n=leggi_int();
   fatt=fattor(n);
   
   stampa(n,fatt);
   
   return 0;
}

int leggi_int()
{
   int n;
   cout<<"Inserire un intero:"<<endl<<"n=";
   cin>>n;
   while(n<=0){
      cout<<"Errore!Il numero inserito e' negativo...Inserire di nuovo un intero:";
      cout<<"n=";
      cin>>n;
   }
   return n;
}

double fattor(int n)
{
   double f=1;
   int i=1;
   while(i<=n)
   {
      f=f*i;
      i++;
   }
   return f;
}

void stampa(int n,double f)
{
   cout<<endl;
   cout<<"Il fattoriale di "<<n<<"e':"<<f<<endl;
   return;
}

Avatar utente
Foto Utentesilence1992
11 4
New entry
New entry
 
Messaggi: 53
Iscritto il: 17 giu 2012, 21:10

0
voti

[2] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteCandy » 26 gen 2014, 21:13

Bisogna vedere come "cin" restituisce n. Io non le conosco, non le ho mai usate, ma forse, ci sono problemi tra i formati.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[3] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteCandy » 26 gen 2014, 21:17

Intendo dire che probabilmente "cin" restituisce un carattere, od una stringa e, dovendolo depositare in un intero, magari il compilatore fa la conversione ASCII. Tu scrivi 0, e ti ritrovi 48.
Prova a fare meglio le conversioni che desideri tra i formati.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[4] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteIsidoroKZ » 27 gen 2014, 9:42

silence1992 ha scritto:.
Però se inserisco n=0 mi da come risultato 2 e non il messaggio "Errore......"


Il fattoriale di zero esiste ed e` definito. 0!=1, vedi ad esempio qui
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
121,2k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 21059
Iscritto il: 17 ott 2009, 0:00

2
voti

[5] Re: Calcolo fattoriale in C\C++

Messaggioda Foto Utentecarloc » 27 gen 2014, 9:52

... e poi questa è la classica cosa da fare ricorsiva ;-)
Codice: Seleziona tutto
int fatt(int n)
{
if (n==0) return 1;
else return n*fatt(n-1);
}

.. o comunque con i tipi che preferisci...
Se ti serve il valore di beta: hai sbagliato il progetto!
Avatar utente
Foto Utentecarloc
33,8k 6 11 13
G.Master EY
G.Master EY
 
Messaggi: 2153
Iscritto il: 7 set 2010, 19:23

2
voti

[6] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteDirtyDeeds » 27 gen 2014, 10:35

Candy ha scritto:Intendo dire che probabilmente "cin" restituisce un carattere, od una stringa e, dovendolo depositare in un intero, magari il compilatore fa la conversione ASCII. Tu scrivi 0, e ti ritrovi 48.


No, non funziona così. Non viene fatta nessuna conversione ASCII.

silence1992 ha scritto:Però se inserisco n=0 mi da come risultato 2 e non il messaggio "Errore......"


A me funziona correttamente. Però la funzione che calcola il fattoriale nun se po' guarda' ;-) E anche sul resto ci sarebbero alcune cose da mettere a posto.

carloc ha scritto:... e poi questa è la classica cosa da fare ricorsiva


Meglio evitare la ricorsività in questo caso ;-)
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

5
voti

[7] Re: Calcolo fattoriale in C\C++

Messaggioda Foto Utentecarloc » 27 gen 2014, 10:37

DirtyDeeds ha scritto:...
Meglio evitare la ricorsività in questo caso ;-)


Paura di saturare lo stack? :D
Se ti serve il valore di beta: hai sbagliato il progetto!
Avatar utente
Foto Utentecarloc
33,8k 6 11 13
G.Master EY
G.Master EY
 
Messaggi: 2153
Iscritto il: 7 set 2010, 19:23

3
voti

[8] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteDirtyDeeds » 27 gen 2014, 10:41

Non solo: è anche molto più lenta. Con un ciclo for si fa molto prima.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

3
voti

[9] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteTardoFreak » 27 gen 2014, 11:12

Codice: Seleziona tutto
int fatt1(int n)
{
  int result = 1;
  int i;
  if (n) for(i=1; i<=n; result *= i++);
  return result;
}

int fatt2(int n)
{
  int result = 1;
  for(;n;) result *= n--;
  return result;
}


Edit: la seconda versione è meglio scriverla in questo modo, è più pulito (ma è solo un dettaglio).
Codice: Seleziona tutto
int fatt2(int n)
{
  int result = 1;
  for(;n;n--) result *= n;
  return result;
}
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

3
voti

[10] Re: Calcolo fattoriale in C\C++

Messaggioda Foto UtenteDirtyDeeds » 27 gen 2014, 11:51

TardoFreak ha scritto:Edit: la seconda versione è meglio scriverla in questo modo, è più pulito (ma è solo un dettaglio).


O ancora più compatto:

Codice: Seleziona tutto
int fatt3(int n)
{
    int result = 1;
    for(; n; result *= n--)
        ;
    return result;
}
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti