Uma ajuda aqui

28 respostas
J

Estou começando agora a programar, já li varias vezes o tutorial da Caelum…ao menos umas 5 vezes ele todo
Estou lendo agora sobre, lógica de programação, sei qeu juntando tudo ate agora só fiz isso:
No tutorial da Caelum tem exercicios, um ate agora dificil é esse: Imprimir os numeros de Fibonacci de 0 a 100, usando somente
duas variaveis. Só queria esclrecer duvidas, eles dizem duas variaveis, tenho a variavel “i” mas so no contador, ou isso não vale?
E tb pq meu código não para quando chega no 1oo? for (i = 0; i < 100; i++)

class teste3 {
    public static void main(String[] args){

int x = 0;
int y = 1;
int i = 0;

for (i = 0; i < 100; i++) {

    if (x <= 0)

    System.out.println("0");
     
      x = x + y;
      y = x - y;
  
    System.out.println(x);
  
       }
   }
}

Agradeço qualquer ajuda pra entender o que está acontecendo neste pequeno código.
PS: isso e dificil mesmo de fazer, ou eu ainda sou muio leigo mesmo em lógica de programação?

28 Respostas

M

não sei como seria este exercicio, mas nao seria isso que vc quer fazer??
coloquei para imprimir o i para vc ver que para no 99

sds

class teste {   
    public static void main(String[] args){   
  
int x = 0;   
int y = 1;   
int i = 0;   
  
for (i = 0; i < 100; i++) {   
  
    if (i <= 0) {
    	 System.out.println(x);   
    	
    } else {
  
   
       
      x = x + y;   
      y = x - y;   
     
    System.out.println(x);
    System.out.println(i);
    } 
       }   
   }   
}
J

Não, queria que ele imprimisse a sequencia do Fibonaci, que seria: 0-1-1-2-3-5-8-13-21-34-55-89.

M

coloca o enunciado do exercicio ai

J

ah, ele tb não parou no 99 com esse exemplo acima, a sequenci dos numeros começa com o zero, ai soma com o “1” e sai o primeiro resultado, 1, como esta acima 0+1=1
acima esta 0-1-1, seguinte 1+1=2, seguinte 2+1=3
ai formamos a sequencia: 0-1-1-2-3-5…

M
public static void main(String[] args) {   
        int x=0;   
        int y=1;   
        int b=1;   
           
        for(int i=0;i<=100;i++){   
            System.out.println(x+",");   
            b=x;   
            x=x+y;   
            y=b;   
               
            if(x>100){   
                break;   
            }   
        }   
    }   
  
}

testa essa

J

ai obrigado o contador parou no 100, deixa eu ver agora se consigo o codigo da maneira certa, qualqeur coisa volto aqui, senão vc me entrega ele pronto rsrsrsr, mas so pode me responder: eles qeurem qeu seja somente duas variaveis, a do contador tb é variavel, será qeu vale, pq ai teria 3, o exercico diz claramente , somente duas variaveis

B

Tenta assim, eu não tive como testar pois estou sem eclipse aqui!

public static void main(String[] args) {     
        
int[] x = new int[100];
x[0] = 0;
x[1] = 1;
for(int i=2;i<=100;i++){     

x[i] = x[i-1] + x[i-2];
System.out.println(x[i]);     
}     
     
}

Dessa maneira se usa apenas duas variaveis.

J

Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda

adriano_si

javaini:
Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda

Cara, parabéns pela atitude de querer aprender, mas realmente tá faltando um pouco de lógica pra você…

Seu for está executando exatamente 100 vezes, nada a mais e nada a menos que isso… o que acontece é que logo no inicio você faz um IF e verifica se X é menor ou igual a 0 e se for, você imprime 0…

Em determinado momento ocorre que essa expressão y = x - y; vai gerar um número negativo que fará com que essa expressão x = x + y; também deixa x < 0, logo ele está imprimindo mais linhas do que o comum… meus 2 cents de contribuição…

class Teste3 {  // teste3 diferente de Teste3... comece a usar a convenção Java para nomear suas classes
	       
	public static void main(String[] args){  
	   int x = 0;  
	   int y = 1;  
	   // tirei a declaração de int i daqui e coloquei dentro do for, fica mais simples de ler e deixa i como variavel de escopo do laço; 
	   for (int i = 0; i < 100; i++) {
	       if (x <= 0)  
	    	   System.out.println("0");  
	          
	       x = x + y;  
	       y = x - y;  
	       System.out.println(x);
	       System.out.println("i:" + i); // aqui só mandei imprimir o i pra vc poder ver o contador executando apenas de 0 - 99, ou seja, 100 vezes
	   }  
	}  
}
adriano_si

cara… fazendo uns testes nos teus códigos, verifiquei que com as 100 posições será impossível fazer Fibonacci com tipo int…

Dica: int tem o tamanho de 32 bits e tem um intervalo que vai de -x até x, logo se teu numero ultrapassar os bits desse valor, o proximo bit começa a afetar o sinal do teu número…

Bons estudos…

PS: se desistir tenho o código pronto… tá igual o teu, só tem 2 diferenças…

[EDIT] - ou seja, não estava faltando lógica pra você… heueheue

Anime

Oi javaini,

Será que é isso que você quer…testa ai… :roll:

import javax.swing.JOptionPane;
class fibonacci
{
   public static void main(String args[])
   {
       int i, num_anterior, num_atual, novo_numero;
       num_anterior = 0;
       num_atual = 1;
       String mensagem = " O 1- numero fibonacci  1\n";
       for(i=2;i<=100;i++)
       {
             novo_numero = num_atual + num_anterior;
             num_anterior = num_atual;
             num_atual = novo_numero;
             mensagem = mensagem +  " O "+i+". numero fibonacci e "+novo_numero+"\n";
       }
       
          System.out.println(mensagem);
          //JOptionPane.showMessageDialog(null,mensagem);

   }
}
J

vlw ai por todos qeu ajudaram, as respotas ajudaram aqui, vou continuar com logica de programção, mas vou falr ta meio dificil, to tentando como dizem na logica, faço as coisa primeiro sem ser codigo, depois tento passar em codigo, pelo qeu dizem está certo assim, ou não, logo abre curso aqui, ai paro de encher, é qeu queria entrar lá com alguma bagagem…

J

entendi pouco mais agora, vou tentar fazer como pede o exercicio…

Anime

Isso mesmo,deve desenvolver a lógica primeiro…Você é esforçado heim,parabéns e não desista…

Boa sorte! :wink:

Anime

Da uma olhadinha aqui,vai ajuda-lo a entender… :wink:

http://pt.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci#Algoritmo_em_Java

B

Me desculpe por ter entregado a resposta pronta e parabéns pela atitude de não querer código pronto.
Apenas mostrei uma forma de utilizar menos variáveis.

Anime

javaini:
Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda

Afff…que fora…não tinha lido isso…foi mal… :oops:

adriano_si

Cara… estás no caminho certo… trabalhe bem sua lógica de Programação e não desista… como te falei… você não foi no rumo errado, tava com a lógica boa para o que estava precisando (fazer Fibonacci com 2 variáveis)

Bom… a galera colocou aí com int puro… testei aqui e não funcionou, porque a partir de um determinado ponto, o valor de x estrapolava o tamnaho de um tipo int e começava a mudar o sinal do valor (não te preocupa com isso agora)… Por isso fiz assim:

public static void main(String[] args){  
	   BigInteger x = new BigInteger("0");  
	   BigInteger y = new BigInteger("1");  
	    
	   for (int i = 0; i < 100; i++) {
	       if (x.intValue() == 0)  
	    	   System.out.println("0");  
	          
	       x = x.add(y);  
	       y = x.subtract(y);
	       System.out.println(x);
	   }  
	}

Detalhe, pra poder fazer o fibonacci dos 100 primeiros números só troquei a variável de int para BigInteger

Abs :wink:

E

eu não sei se entendi direito, mas não são os 100 primeiros números de fibonacci, são os números de fibonacci de 0 a 100.

E só para te fazer quebrar um pouco mais a cabeça, dá para fazer somente com o contador e mais uma variável (justamente por ser de 0 a 100, e não os 100 primeiros).

Para te ajudar um pouco, pensa assim, o seu contador não precisa necessariamente ser acrescentado de 1 em 1, mas pode ser acrescentado pelo valor de uma outra variável, vou dar um exemplo:

int x = 0;
for(int i = 0; i<=100; i+=x){x++}
J

com duas variaveis e somente com if e for, fica complicado , com 3 variaveis é taõ facil,eheheheeh, ai agora chegou esse aqui qeu me diz que da pra fazer somente com uma variavel…, bom eu ainda não sei como fazer com duas, mas qeuro fazer de alguma forma, com o qeu sei ate agora, se não der certo, vou pular esse estudo e começar Array, ai quando eu estiver masi familiarizado volto aqui e faço…, mais uma vez obrigado a todos, mas olhem so assim qeu eu conseguir fazer esses exercicios volto aqui so pra postar, podem esperar…vlw

E

javaini, nem é tão complicado assim. Olha o código que eu postei e pensa sobre ele, mudando uma instrução você consegue .

Repare que você não precisa de if.

Vamos lá, falta pouco, XD

J

eu vou tentar sim, ele tb, ja ja tenho que sair, mas vou dormir com isso na cabeça, e amanha cedo vou quebrar a cabeça com ele. vlw

J

olha inda to tentando entender em como fazer da maneira qeu vc falou, somente uma variavel, realmente não entendi como, não consigo achar uma maneira matematicamente pra somar "i"e “x” na sequencia de Fibonacci, se eu não tiver um lugar pra guardar o valor de “x” . No seu for (int i…“i+=x” aqui ele adiciona e atribui valor de x, e aqui x++, e a mesma coisa que isso: “x=x+1”, sendo assim “i” sempre vai valer : 1-2-3-4-5-6…
Mas não faça pra mim nadinha, to so mostrando qeu to tentando ainda, não desisti…Obrigado Adriano_si , Anime, evefuji…

J

Obrigado a Binnho tb, e não esquentem com as resposta que deram, to usando como modelos, ta sendo de grande ajuda, pra entender a sintaxe

Anime

Por nada…quando conseguir posta ai pra gente vê… :stuck_out_tongue:

J

Bem, eu não sei se alguém que me ajudou aqui, ainda está interessado em saber, eu voltei nele de novo
dei uma melhorada no código (to evoluindo “acho” rs), deêm uma olhada e digam se está indo no caminho certo.

class Fibo {     
    public static void main(String[] args){ 

int x = 1;
int y = 0;
    
     System.out.print(y +"-");
     System.out.print(x +"-");
  

      do{
         if(y <= 100){
            y=x+y;
      
     System.out.print(y +"-");
        
            x=x+y;
        
     System.out.print(x +"-");
       }
        }while(y <=50);
      
   }  
}
//0-1-1-2-3-5-8-13-21-34-55-89

Ainda não tá definitivo, mas ainda to estudando.

Anime

Oi javaini,

Estou admirada com sua persistência… :wink:

J

mas eu ja passei deste exercicio, to agora aprendendo programação orientada a objeto, é meio confuso entender
“classes, métodos, objetos…”, mas seguindo agora direitinho a apostila, to fazendo uma conta de banco (ja devem ter passado por isso rs),
ja tenho a classe conta, a classe conta, já faz saques e depósitos, agora vou fazer a classe cliente…depois ainda não sei o que vou fazer,
mas estamos indo, espero qeu bem, meus códigos agora estão até mais bonitinhos, até eu to entendendo rsrs…
Obrigado anime, pela força

Criado 9 de novembro de 2010
Ultima resposta 25 de nov. de 2010
Respostas 28
Participantes 6