i = n + 2 ( i )

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

i = n + 2 ( i )

Mensagem por F. Nizzio em Qui 23 Set 2010, 14:39

Bem, eu estou aqui para dizer sobre essa Formula Infinita que pensei:
i = n + 2 ( i )

Ela é sim, de certa forma, infinita, já que ela ficaria eternamente fazendo n + 2 ( i )

n = 2

i = 2 + 2 (i)
i = 4 [2 + 2 (i)]
i = 16 [2 + 2 (i)]

Em outras palavras...

i = n + 2 {n + 2 {n + 2 {n + 2 { n + 2 {n + 2 ....

Sem fechar as chaves mesmo, já que não tem fim Razz

Aí quando tentei programar o resultado em C++, para ver o que acontecia, digitei isso:

Código:
#include<iostream>
#include<stdio.h>

int main()
{
    int n,i;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);
    {
        int i=n+2*i;
        printf("%d",i);
    }
}

Mas tipo, ele deu um valor bem nav...

Resultou nisso:

programa escreveu: Digite um valor para n:

>> 5

-33832955

Alguem pode me explicar o porque desse numero negativo, sendo que não há nenhum número que possa o fazer nessa conta?

F. Nizzio

Número de Mensagens : 758
Idade : 21
Data de inscrição : 19/07/2008
Reputação : -6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por vinians em Qui 23 Set 2010, 15:09

E ae amigão blz?
O valor negativo é devido ao fato de você não ter inicializado o valor de i.
Mesmo voce atribuindo a variavel no momento da declaração da mesma, a fómula faz referência ao valor anterior da variável. Veja um exemplo mais simples:
Código:

int i = 5 + i; //O mesmo erro aqui
Aqui também o valor de i é indefinido.

Pra resolver o seu problema voce tem que atribuir um valor inicial a I.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Janx em Qui 23 Set 2010, 16:18

i = n+2*i

Essa formula não da um valor infinito. Pelomenos, não só de usar uma vez!
A lógica fica assim:

Digamos que os valores iniciais são:
i = 0;
n = 1;

Executamos o código uma vez:
i = 1+(2*0)
i = 1

Outra:
i = 1+(2*1);
i = 3;

depois:
i = 1+(2*3);
i = 7;

Usar o i na formula, significa pegar o valor atual dele, antes de dar esse novo valor!


E como o vinians disse, você não setou um valor inicial para as variaveis i e n!
Assim o valor será aleatório e gerará resultados absurdos!

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Denis Lemos em Qui 23 Set 2010, 17:01

No create:
Código:
i=1
n=2
No step:
Código:

i=n+(2*i)
No draw:
Código:

draw_text(50,50,"i="  +string(i) )

Se fizer isso, o número vai aumento de 4 em 4 infinitamente á cada STEP, mas no GM em 5 segundos aparece a menssagem de erro no draw da variável "i", fazem o teste para vocês verem, acho que o GM não suporta numeros gigantescos, acho não... agora tenho certeza !

Denis Lemos

Número de Mensagens : 938
Idade : 27
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por vinians em Qui 23 Set 2010, 17:40

Denis Lemos escreveu:No create:
Código:
i=1
n=2
No step:
Código:

i=n+(2*i)
No draw:
Código:

draw_text(50,50,"i="  +string(i) )

Se fizer isso, o número vai aumento de 4 em 4 infinitamente á cada STEP, mas no GM em 5 segundos aparece a menssagem de erro no draw da variável "i", fazem o teste para vocês verem, acho que o GM não suporta numeros gigantescos, acho não... agora tenho certeza !
Amigo, isso não é o GM. Qualquer linguagem tem um limite. E a fórmula apenas redefine uma variável progressivamente em função dela mesma. Seja em C, Basic, GM, C# sempre vai haver um limite. O GM provavelmente usa a variavel do tipo Extended (19 digitos significativos, expoentes -4932 a +4932) pois é feito em Delphi.
No caso da pergunta do nosso amigo, era porque não estava inicializando a variavel, ai já é outra coisa.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por F. Nizzio em Qui 23 Set 2010, 17:48

Denis, eu fiz em C++, não no game maker Happy

Janx, nessa formula o n + 2 ( i ) é sim feito infinitamente. o i está igualado a n + 2 ( i ), ou seja, esse i entre aspas EDIT parenteses recomeça tudo de novo. O i é a formula inteira, não é uma incognita a ser substituida normalmente.

No final da formula i, eu coloquei um multiplicador pelo proprio i, o que reinicia a conta aumentando o valor anterior. Deu para entender? Acho que não, não consigo explicar de um jeito muito claro XD

Vinians, então eu devo, lá em cima, escrever:
Código:
i = n + 2
E só lá em baixo multiplicar?


Última edição por F. Nizzio em Qui 23 Set 2010, 18:20, editado 1 vez(es)

F. Nizzio

Número de Mensagens : 758
Idade : 21
Data de inscrição : 19/07/2008
Reputação : -6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por vinians em Qui 23 Set 2010, 18:04

F. Nizzio escreveu:Vinians, eu fiz em C++, não no game maker Happy
Sim eu sei, a resposta sobre o GM foi pro Denis Lemos.

Vinians, então eu devo, lá em cima, escrever:
Código:
i = n + 2
E só lá em baixo multiplicar?
Sim, voce tem que inicializar a variavel assim:

Código:

#include<iostream>
#include<stdio.h>

int main()
{
    int n,i, j;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);
    i = n + 2; //primeira vez
    // Loop com 10 iteracoes
    for (j = 0; j < 10; j++)
    {
        i=n+2*i;
        printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
    }
}
Além disso voce esta definindo a variavel i no inicio do programa "int i, n" e depois na propria formula.
Teste o exemplo que te mandei pra ver.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por F. Nizzio em Qui 23 Set 2010, 18:23

vinians escreveu:
F. Nizzio escreveu:Vinians, eu fiz em C++, não no game maker Happy
Sim eu sei, a resposta sobre o GM foi pro Denis Lemos.

Vinians, então eu devo, lá em cima, escrever:
Código:
i = n + 2
E só lá em baixo multiplicar?
Sim, voce tem que inicializar a variavel assim:

Código:

#include<iostream>
#include<stdio.h>

int main()
{
    int n,i, j;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);
    i = n + 2; //primeira vez
    // Loop com 10 iteracoes
    for (j = 0; j < 10; j++)
    {
        i=n+2*i;
        printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
    }
}
Além disso voce esta definindo a variavel i no inicio do programa "int i, n" e depois na propria formula.
Teste o exemplo que te mandei pra ver.

Ok, vou testar.

Aquela primeira parte aonde disse "Vinians, fiz em C++, não no Game Maker" era pra ser pro Denis também, escrevi Vinians sem querer. Já editei lá.

Vou testar e já edito.

F. Nizzio

Número de Mensagens : 758
Idade : 21
Data de inscrição : 19/07/2008
Reputação : -6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Janx em Qui 23 Set 2010, 19:37

Não, só por você por o "i" ali ele não pega a formula ali outra vez!
Ele apenas multiplica pelo valor de "i"!

i não representa uma função, apenas um valor. Se você fizesse essa coisa de infinito o projeto iria travar!
Se quer um infinito mesmo é assim (Deve dar algum erro):

Código:
int n;

int I()
{return n+2*I();}

int main()
{
    int i = 0;
    n = 0;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);

    i = I();//n+2*i; //Trava aqui e não mostra valor algum
    printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
}

Você está entendendo errado o funcionamento. i representa um numero, quando você usa essa formula nele, ele fica com um numero X, depois quando ele é chamado novamente, é passado esse numero X, que então é alterado para um outro Y!

Um exemplo mais simples:
i = 1+i;

Da forma que você está pensando, i seria adicionado 1 eternamente!
Mas funciona assim:
i = 0; //Iniciando em 0
i = 1+i --> i = 0, então: i = 1+0 = 1
novo valor de i: 1
mais uma vez:
i = 1+i --> i = 1, então: i = 1+1 = 2
novo valor de i: 2!
Assim por diante!

O primeiro i (i = 1+i) é onde vai ser guardado o valor que resultar na conta, enquanto o segundo é apenas uma variavel.

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por vinians em Qui 23 Set 2010, 20:25

Janx escreveu:Não, só por você por o "i" ali ele não pega a formula ali outra vez!
Ele apenas multiplica pelo valor de "i"!

i não representa uma função, apenas um valor. Se você fizesse essa coisa de infinito o projeto iria travar!
Se quer um infinito mesmo é assim (Deve dar algum erro):

Código:
int n;

int I()
{return n+2*I();}

int main()
{
    int i = 0;
    n = 0;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);

    i = I();//n+2*i; //Trava aqui e não mostra valor algum
    printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
}

Você está entendendo errado o funcionamento. i representa um numero, quando você usa essa formula nele, ele fica com um numero X, depois quando ele é chamado novamente, é passado esse numero X, que então é alterado para um outro Y!

Um exemplo mais simples:
i = 1+i;

Da forma que você está pensando, i seria adicionado 1 eternamente!
Mas funciona assim:
i = 0; //Iniciando em 0
i = 1+i --> i = 0, então: i = 1+0 = 1
novo valor de i: 1
mais uma vez:
i = 1+i --> i = 1, então: i = 1+1 = 2
novo valor de i: 2!
Assim por diante!

O primeiro i (i = 1+i) é onde vai ser guardado o valor que resultar na conta, enquanto o segundo é apenas uma variavel.
Exatamente Janx, provavelmente uma solução recursiva seria muito interessante nesse caso. Mais toda função recursiva tem que ter uma condição de saida para esvaziamento da pilha e retorno dos calculos.

No exemplo que coloquei apenas tirei o bug da não inicialização da variavel. Geralmente nunca podemos usar uma fórmula que faça referência a uma variavel em sua propria inicialização, pois o avaliador de expressões vai pegar o valor anterior ou atual da variavel, que no caso, será indefindo.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Fuzenrad em Qui 23 Set 2010, 20:42

Só complementando:

var=var+1 é uma função de atribuição, onde você não quer reiniciar a variável, utilizando seu valor original para adicionar, multiplicar, dividir, etc.

Inclusive é mais usual estruturalmente, usar códigos como:
var+=1;
var/=4;
var*=2;
var^=2;
E assim por diante.


Última edição por Fuzenrad em Qui 23 Set 2010, 21:15, editado 1 vez(es)

Fuzenrad

Ranking : Nota A
Número de Mensagens : 1026
Idade : 26
Data de inscrição : 04/07/2010
Notas recebidas : A-A-A-A-B
Reputação : 41
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Kabeção em Qui 23 Set 2010, 21:08

Janx escreveu:i não representa uma função, apenas um valor. Se você fizesse essa coisa de infinito o projeto iria travar!
Se quer um infinito mesmo é assim (Deve dar algum erro):

Código:
int n;

int I()
{return n+2*I();}

int main()
{
    int i = 0;
    n = 0;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);

    i = I();//n+2*i; //Trava aqui e não mostra valor algum
    printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
}
Chamar a função dentro da própria função não é logicamente impossível?
Não seria nem questão de loop, é algo totalmente ilógico.
Como vou chamar a função dinovo se ela nem sequer terminou de ser executada?
Como ela pode retornar um valor para a conta se o valor nem sequer foi calculado?
Só de pensar nisso da um nó nos neurônios. bounce

No GM fazer isso retornaria um erro agora de C++ nunca tentei...

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por vinians em Qui 23 Set 2010, 21:12

Kabeção escreveu:
Janx escreveu:i não representa uma função, apenas um valor. Se você fizesse essa coisa de infinito o projeto iria travar!
Se quer um infinito mesmo é assim (Deve dar algum erro):

Código:
int n;

int I()
{return n+2*I();}

int main()
{
    int i = 0;
    n = 0;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);

    i = I();//n+2*i; //Trava aqui e não mostra valor algum
    printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
}
Chamar a função dentro da própria função não é logicamente impossível?
Não seria nem questão de loop, é algo totalmente ilógico.
Como vou chamar a função dinovo se ela nem sequer terminou de ser executada?
Como ela pode retornar um valor para a conta se o valor nem sequer foi calculado?
Só de pensar nisso da um nó nos neurônios. bounce

No GM fazer isso retornaria um erro agora de C++ nunca tentei...
'
É possivel sim amigão, inclusive isso se chama recursividade e é uma tecnica muito utilizada por exemplo em calculo de fatorial, pesquisa de indice (arvores binárias) etc, como eu disse, desde que tenha uma condicao de saida nao tem problema algum veja este exemplo (C/C++ ou Java):
Código:

int fatorial (int n)
{
    if(n==1)
        return n;
    return fatorial(n-1) * n;         
}
Tem muita aplicação, mais tem que ter cuidado com a pilha (heap ou RAM dinamica)

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Kabeção em Qui 23 Set 2010, 21:37

vinians escreveu:
Kabeção escreveu:
Janx escreveu:i não representa uma função, apenas um valor. Se você fizesse essa coisa de infinito o projeto iria travar!
Se quer um infinito mesmo é assim (Deve dar algum erro):

Código:
int n;

int I()
{return n+2*I();}

int main()
{
    int i = 0;
    n = 0;
    printf("Digite um valor para n:\n\n>> ");
    scanf("%d",&n);

    i = I();//n+2*i; //Trava aqui e não mostra valor algum
    printf("%d",i); //agora vai dar um valor coerente pois i foi inicializada
}
Chamar a função dentro da própria função não é logicamente impossível?
Não seria nem questão de loop, é algo totalmente ilógico.
Como vou chamar a função dinovo se ela nem sequer terminou de ser executada?
Como ela pode retornar um valor para a conta se o valor nem sequer foi calculado?
Só de pensar nisso da um nó nos neurônios. bounce

No GM fazer isso retornaria um erro agora de C++ nunca tentei...
'
É possivel sim amigão, inclusive isso se chama recursividade e é uma tecnica muito utilizada por exemplo em calculo de fatorial, pesquisa de indice (arvores binárias) etc, como eu disse, desde que tenha uma condicao de saida nao tem problema algum veja este exemplo (C/C++ ou Java):
Código:

int fatorial (int n)
{
    if(n==1)
        return n;
    return fatorial(n-1) * n;         
}
Tem muita aplicação, mais tem que ter cuidado com a pilha (heap ou RAM dinamica)
Eu olho pra isso é meu cérebro continuar a dar nós. nuu não
Bom, é uma boa hora para dar uma pesquisada sobre isso. xD

Mas mesmo assim o infinito logicamente não existe na programação certo?
Se não houver uma condição para fechar o loop o programa simplesmente travará, ou por atingir o valor máximo de um int ou por consumir toda a memória consigo.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por F. Nizzio em Qui 23 Set 2010, 23:10

BEm... resumindo, se alguem puder me ajudar, eu estou querendo fazer algo assim.

i = n + 2 ( i )

Mas de um jeito que dê certo em C++ (eu sei que fora da programação essa formula é válida)

F. Nizzio

Número de Mensagens : 758
Idade : 21
Data de inscrição : 19/07/2008
Reputação : -6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Janx em Sex 24 Set 2010, 15:23

Você pode tentar da forma que eu mostrei, mas não pode deixar isso infinitamente, pois só iria travar.

Seria algo como por um loop while sem break, dessa forma:

while (1)
{
...
...
...
...
}

O programa iria 'travar' sem um break para finalizar o while.

Tente explicar melhor o que você quer fazer, por enquanto não vejo finalidade alguma nisso..

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Convidad em Dom 26 Set 2010, 12:22

Note que se o valor i = 0 então i será sempre o valor de n. Acho que dentro dessa condição, i não pode ser 0 e n não pode ser (i * -1), então, vai depender muito do que você quer fazer, pois essa fórmula pode gerar sempre o mesmo valor nessas condições. Tente nos dizer o propósito da fórmula, talvez possamos ajudar de outra maneira ou com outra lógica.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: i = n + 2 ( i )

Mensagem por Conteúdo patrocinado Hoje à(s) 15:47


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum