Desafio - Faзa sua prуpria funзгo (parte 2) -
dudaefj - 22.12.2013
E aew galera =)
Hoje conversando com DartakousLien, ele me mostrou
este tуpico, do arakuta, que achei muito legal =)
Vi tambйm que todos os desafios dele foram resolvidos e ninguйm deu continuidade ao assunto, tive vontade de reviver o tуpico, mas jб faz + de 1 mкs =\
Bom, entгo resolvi criar um outro tуpico como continuaзгo para aqueles que conseguiram resolver aquele =)
Agora й um desafio um pouco menos simples, se conseguirem resolver eu edito e coloco outro, й uma boa forma de treinar o cйrebro e o raciocнnio lуgico =)
Vamos lб, jб vou passar 2 logo de cara, quero ver quem consegue rsrs
primeiro: Criar a funзгo Float:Potencia(Float:numero, Float:expoente) que deve retornar o valor do numero elevado ao expoente (obviamente)
Lembrando que o expoente й FLOAT
Exemplo:
PHP код:
printf("2 elevado a 3,14 й: %f", Potencia(2.0, 3.14));
deve retornar
Quote:
2 elevado a 3,14 й: 8.81524092
|
(ps.: obviamente nгo vale usar floatpower....)
Segundo: Apesar de ser segundo, esse й mais fбcil que o primeiro, porйm й mais difнcil de entender e explicar (vou me esforзar aqui rsrs...).
Criar 1 funзгo que calcula a бrea do grбfico entre uma outra funзгo e o eixo X em um intervalo dado.
Exemplo:
PHP код:
stock Float:OutraFuncao(Float:x)
{
return x;
}
(pra quem nгo percebeu, essa й a funзгo y = x;
a funзгo que deve ser criada й a funзгo
PHP код:
stock CalculaArea(Float:min, Float:max)
{
// funзгo aqui
}
printf("A бrea do grбfico entre 1.0 e 5.0 й %f", CalculaArea(1.0, 5.0));
No caso desse exemplo fica fбcil porque a OutraFuncao й a simples reta Y = X... Mas a CalculaArea() deve ser feita para qualquer valor da OutraFuncao(), e sim, pode ser uma aproximaзгo.
Por enquanto sу, quem tiver alguma sugestгo de desafio passa que tambйm quero saber!!
(obs.: desafios rбpidos, menos de 100 linhas, por favor nй...)
vlw
Re: Desafio - Faзa sua prуpria funзгo (parte 2) -
dPlaYer_ - 22.12.2013
pawn Код:
public Teste(playerid)
{
return Kick(playerid);
}
Sou noob sу sei fazer isso :3
Re: Desafio - Faзa sua prуpria funзгo (parte 2) -
ZaturN - 22.12.2013
Cara vocк sу pode estar me tirando nйh? Eu nгo sei nem 25% e ainda quer que eu tente este desafio... Tф fora.
Porque nгo passa isto:
pawn Код:
if(strcmp(cmdtext, "/nada", true) == 0) {
SendClientMessage(playerid, Vermelho, "[ERRO] Vocк nгo sabe nada, estude mais."):
return 1;
}
Re: Desafio - Faзa sua prуpria funзгo (parte 2) -
dudaefj - 22.12.2013
Quote:
Originally Posted by dPlaYer_
pawn Код:
public Teste(playerid) { return Kick(playerid); }
Sou noob sу sei fazer isso :3
|
aushuashsa
poxa, й assim que comeзa =D
Sу nгo pode fazer
PHP код:
public OnGameModeInit()
{
OnGameModeExit();
}
public OnGameModeExit()
{
OnGameModeInit();
}
=D
Re: Desafio - Faзa sua prуpria funзгo (parte 2) -
Juniiro3 - 22.12.2013
pawn Код:
Float:Potencia(Float:numero, Float:expoente)
{
new result;
for (new i; i < expoente; ++i)
{
numero *= numero;
}
return result;
}
Nгo testei! E acho que nгo funcionara com decimais, mas jб й um comeзo.
Re: Desafio - Faзa sua prуpria funзгo (parte 2) -
dudaefj - 22.12.2013
Quote:
Originally Posted by Juniiro3
pawn Код:
Float:Potencia(Float:numero, Float:expoente) { new result;
for (new i; i < expoente; ++i) { numero *= numero; }
return result; }
Nгo testei! E acho que nгo funcionara com decimais, mas jб й um comeзo.
|
rsrsrs
й um comeзo!
porйm de fato, nгo funciona com float +(
ah, e cuidado.. usa floatmul()
eu nгo sei pq, mas jб vi muito bug loco em usar a soma, subtraзгo, multiplicaзгo e divisгo convencionais com float, й raro, nгo sei explicar, mas jб vi os nъmeros assumindo valores bem esquisitos, e sу corrigia quando eu usava a funзгo de operaзгo com float
@Edit
ah e cuidado tb q vc declaro a funзгo Potencia como float, porйm o retorno dela й um inteiro convencional, que no caso nгo recebe nenhum valor, vai sempre retornar zero, mas isso acho que foi erro de digitaзгo rsrs
@Edit2
Caso alguйm se interesse, fiz uma soluзгo para o primeiro...
A aproximaзгo fico relativamente boa (erra na quinta casa decimal), porйm a otimizaзгo fico horrнvel !!
Fiz atй um benchmark simples, resultado lamentбvel rsrs
PHP код:
#include <a_samp>
#define PRECISAO 15
#define EULER 2.718281828459045
stock Fatorial(n)
{
if(n > 0)
return n*Fatorial(n-1);
else
return 1;
}
stock Float:PotenciaInteira(Float:x, y)
{
if(y > 0)
return x*PotenciaInteira(x,y-1);
else
return 1.0;
}
stock Float:Exponencial(Float:x)
{
new Float:total;
for(new i; i < PRECISAO; i++)
total = floatadd(total,floatdiv(PotenciaInteira(x,i),float(Fatorial(i))));
return total;
}
stock Float:Potencia(Float:x, Float:y)
{
return Exponencial(floatmul(y,floatlog(x, EULER)));
}
main()
{
printf("Metodo 01: 2 elevado a 3,14 eh: %f", floatpower(2, 3.14));
printf("Metodo 02: 2 elevado a 3,14 eh: %f", Potencia(2, 3.14));
printf("Iniciando Benchmark... 1.000.000 iteracoes");
new agora = GetTickCount();
for(new i; i < 1000000; i++)
floatpower(2, 3.14);
printf("Funcao Nativa - tempo = %d", GetTickCount()-agora);
agora = GetTickCount();
for(new i; i < 1000000; i++)
Potencia(2, 3.14);
printf("Funcao Criada - tempo = %d", GetTickCount()-agora);
}
Resultado do lamentбvel benchmark:
Quote:
[22/12/13 02:40:03] Funcao Nativa - tempo = 100
[22/12/13 02:40:22] Funcao Criada - tempo = 19248
|