[Off] [Desafio] Fatorial
#1

Bom galera, eu sou um amante da matemбtica e estou no primeiro ano do segundo grau.
Eu sei que eu nгo deveria ter aprendido, mas como eu gosto de matemбtica busquei e aprendi a usar a operaзгo "FATORIAL".
Notei tambйm que nгo hб esta funзгo no .pwn
Desafio а vocкs conseguir a funзгo:

pawn Code:
Fatorial(numero)
Eu jб tenho a resposta, quando houver 3 opiniхes, darei a reposta

Boa sorte!
Reply
#2

1є do ensino mйdio e ainda nгo viu fatorial ? O.o

Bacana, lembrando que fatorial seria:

Code:
4! = 1x2x3x4 = 24
n! = 1x2x3..n
Dб pra fazer um bom desafio pedindo pra utilizar recursividade, pois assim nгo chega a ser um 'desafio'.

Mas legal, vou postar uma forma iterativa simples:
pawn Code:
Fatorial(n)
{
    new r = 1;
    for (new i = 2; i <= n; ++i)
        r *= i;
       
    return r;
}
Reply
#3

Caraca, o jeito que eu fiz й muito maior do que isso rs
Reply
#4

Quote:
Originally Posted by Zivo
View Post
Caraca, o jeito que eu fiz й muito maior do que isso rs
Normal, o interessante й vocк analisar o problema e fazer ele, por mais que ele fique grande o importante й ficar funcional, depois tu vai diminuindo os cуdigos e melhorando a lуgica.

No meu caso й que jб tenho a prбtica.



@EDIT:

Utilizando recursividade:
pawn Code:
Fatorial(n)
{
    if (n == 2)
        return 2;
       
    return n * Fatorial(n-1);
}
Eu acho o cуdigo mais bonito quando feito com recursividade, mas, nгo tem vantagens, ele sу perde em questгo de processamento, memуria, velocidade...

Mas o conceito da recursividade й esse, chegar no resultado sem muitos esforзos, como por exemplo se tu for tentar fazer a fуrmula de Fibbonaci com uma funзгo iterativa o cуdigo fica meio grande, maior e diferente do cуdigo feito com recursividade.
Reply
#5

Kkkk vou postar o meu, sу para mostrar o meu "escasso conhecimento" de pawno rs

pawn Code:
stock Fatorial(numero)
{
    new valor;
    valor = 0;
    if(numero == 1 || numero == 0 || numero == -1) goto Resultado;
    if(numero < 0)
    {
        Continuar1:
        if(valor == 0)
        {
            valor = numero * (numero + 1);
        }
        else
        {
            valor = valor * (numero + 1);
        }
        numero++;
        if(numero == -1) goto Resultado;
        goto Continuar1;
    }
    if(numero > 0)
    {
        Continuar2:
        if(valor == 0)
        {
            valor = numero * (numero - 1);
        }
        else
        {
            valor = valor * (numero - 1);
        }
        numero--;
        if(numero == 1) goto Resultado;
        goto Continuar2;
    }
    Resultado:
    return valor;
}
@EDIT

em termo de funcionalidade, o meu estб mais certo pois aceita nъmero negativos, jб o seu nгo Willian
Reply
#6

Quote:
Originally Posted by Zivo
View Post
em termo de funcionalidade, o meu estб mais certo pois aceita nъmero negativos, jб o seu nгo Willian
Fatorial nгo trabalha com nъmeros negativos, entгo nгo tem porque 'aceitar nъmeros negativos'...
Chamamos isso de tratamento de exceзхes.

Mas se for por isso, veja:
pawn Code:
Fatorial(n)
{
    if (n < 1)
        return -1; //entrada invбlida.
   
    new r = 1;
    for (new i = 2; i <= n; ++i)
        r *= i;

    return r;
}
Reply
#7

Fiz com loop invertido, sу pra diferenciar da lуgica do Will...

pawn Code:
Fatorial ( numero )
{
    new
        result = 1;
       
    for ( new i = numero ; i > numero ; --i )
        result *= i;
   
    return result;
}
@EDIT

Vlw Will, esqueci desse detalhe... E nгo, essa dai eu nгo testei como eu fiz com outros desafios, achei tгo fбcil que negligenciei.
Reply
#8

Quote:
Originally Posted by Juniiro3
View Post
Fiz com loop invertido, sу pra diferenciar da lуgica do Will...

pawn Code:
Fatorial ( numero )
{
    new
        result = 1;
       
    for ( new i ; i > numero ; --i )
        result *= i;
   
    return result;
}
tб errado, porque i й igual a zero, o loop vai rodar pra formas negativas, na verdade nem irб rodar, tu testou isso?
Reply
#9

Postei isto no Clube do Hardware a alguns dias, porйm em C++, mas converti pra Pawn e esta ai:
pawn Code:
stock Fatorial(number)
{
     new result = 1;
     for(; number != 1; number--)
          result *= number;
     return result;
}
Reply
#10

Bom galera, obrigado pelas respostas, praticamente todas estava corretas, parabenizo vocкs.
Mas eu gostaria de saber agora, outra coisa.
Quando eu quero somar 5 com 5 eu coloco: 5+5
Quando eu quero multiplicar 2 com 10 eu coloco: 2*10
Eu gostaria de colocar "5!" e aparecer o fatorial de 5.
Exemplo:
pawn Code:
printf("%d", 5!);
// e como resultado 5 * 4 * 3 * 2 * 1 = 120
Entenderam? se nгo for possнvel, desculpem-me
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)