Problema com Exercicio de FOR e WHILE

Boa tarde, estou empacado em dois exercicios.
O primeiro:
Crie um programa para exibir os anos bissextos contidos entre dois anos informados pelo usuário. Por exemplo, se o usuário informar o ano inicial 1973 e o ano final 2010, seu programa deve exibir (1976,1980,1984,1988,1992,1996,2000,2004,2008) ? não exatamente dessa forma.
Usando somente Condicionais eu consigo, mas não implementando com FOR e/ou WHILE.
Segundo:
Crie um programa para converter um número octal para o correspondente em decimal. Todos os algarismos do número octal devem ser lidos em uma única operação de leitura. Logo, não é permitida a leitura dígito-a-dígito. Para resolução deste exercício, podem ser utilizadas quaisquer estruturas condicionais.
Esse já fiquei perdido quando ele diz “não é permitido a leitura dígito-a-dígito” e ele tem uma exigência que deve ser feito somente com While.

Quem puder ajudaragradeço.

No primeiro caso, faltou você pensar um pouquinho em termos de português estruturado ou pseudo-código.
Dica: como é que você pode gerar todos os anos de 1973 a 2010? Eu sei que você já sabe dizer quando um ano é bissexto.

No segundo caso, “não é permitida a leitura dígito a dígito” quer dizer somente que você tem de usar uma coisa como o método next ou nextLine da classe Scanner (então nesse caso você já lê a string correspondente ao número octal de uma vez só, em vez de lê-la caracter a caracter).

Primeiro exercicio: ano bissexto são todos os anos múltiplos de 400 e todos os múltiplos de 4 e não múltiplos de 100, então é só vc colocar dentro do while a logica tipo essa aqui


while ((!(ano % 4)) && (ano % 100) ) || (!(ano % 400)) {
            System.out.println("Ano bissexto: " + ano);
            
        }

creio que seja assim :smiley:

Segundo Exercicio: “Um número octal é representado por uma seqüência de dígitos entre 0 e 7, onde o menos significativo tem peso 8°, o segundo 8¹, o terceiro 8² e assim sucessivamente.”

vc entra com um número

import java.io.*;
import java.lang.*;

public class  OctalToDecimal{
  public static void main(String[] args)throws IOException{
  BufferedReader reader = 
  new BufferedReader(new InputStreamReader(System.in));
  System.out.println("Enter the octal number:");
  String oct = reader.readLine();
  int i= Integer.parseInt(oct,8);
  System.out.println("Decimal:=" + i);
  }
}

convertendo o valor digitado pra inteiro indicand a base 8 no segundo argumento int i= Integer.parseInt(oct,8); assim formando o numero decimal :smiley:

Opa, valeu pela resposta. O primeiro eu consegui responder. Já segundo não consegui entender muit bem ainda ;s

[quote=Rauel]Primeiro exercicio: ano bissexto são todos os anos múltiplos de 400 e todos os múltiplos de 4 e não múltiplos de 100, então é só vc colocar dentro do while a logica tipo essa aqui


while ((!(ano % 4)) && (ano % 100) ) || (!(ano % 400)) {
            System.out.println("Ano bissexto: " + ano);
            
        }

creio que seja assim :smiley:

Segundo Exercicio: “Um número octal é representado por uma seqüência de dígitos entre 0 e 7, onde o menos significativo tem peso 8°, o segundo 8¹, o terceiro 8² e assim sucessivamente.”

vc entra com um número

import java.io.*;
import java.lang.*;

public class  OctalToDecimal{
  public static void main(String[] args)throws IOException{
  BufferedReader reader = 
  new BufferedReader(new InputStreamReader(System.in));
  System.out.println("Enter the octal number:");
  String oct = reader.readLine();
  int i= Integer.parseInt(oct,8);
  System.out.println("Decimal:=" + i);
  }
}

convertendo o valor digitado pra inteiro indicand a base 8 no segundo argumento int i= Integer.parseInt(oct,8); assim formando o numero decimal :smiley:
[/quote]

Olá, Rauel!

Seu while está errado, você pegou a informação correta, mas usou no while de forma errada.
Dê uma revisada…

Quanto a conversão para octal, acho que essa solução não é a esperada, afinal ele quer exercitar while, acredito que a proposta é implementar a conversão em si.

EDIT:

Tentando inventar fiz assim:[code]import java.util.Scanner;
public class OctDec{
public static void main(String[] args){

	String oct;
	int pos, n_pos;
	int exp = 0;
	int dec = 0;
	Scanner entrada = new Scanner(System.in);

	System.out.print("Numero Octal: ");
	oct = entrada.next();

	pos = oct.length();

	while(pos > 0){
		n_pos = Integer.parseInt(oct.substring(pos-1,pos));
		if(n_pos > 7){
			System.out.println("Este nao eh um numero Octal...");
			break;
		}
		dec+= n_pos*(int)Math.pow(8, exp++);
		pos--;
		if(pos == 0)
			System.out.println("Numero Decimal: "+dec);
	}
}

}[/code]

Abraço!

como disse Vingdel

anos bisextos sao todos multiplos de 4. voce pode fazer de diversas maneiras pode criar varias anoincio e anofim e fazer com for.
dica: use % para saber o resto da divisão para comparar um ano se ele é bisexto!
só pensar um pouquinho! :smiley:

[quote=Diguinho.Max]como disse Vingdel

anos bisextos sao todos multiplos de 4. voce pode fazer de diversas maneiras pode criar varias anoincio e anofim e fazer com for.
dica: use % para saber o resto da divisão para comparar um ano se ele é bisexto!
só pensar um pouquinho! :D[/quote]

Sim, todos anos bisextos são multiplos de 4, porém nem todo ano que é multiplo de 4 é bisexto.

A regra vai além dessa usada por você, Diguinho.Max.

Por exempo 1700, 1800, 1900, estes anos são multiplos de 4, porém não são bisextos.

CURIOSIDADE: Nesses casos o intervalo é de 8 anos para o próximo ano bisexto, isso agrava ainda a situação de quem nasceu no dia 29 de fevereiro (brincadeira rs), ainda bem que esse evento só acontece a cada 100 anos.

Aí está onde a regra do múltiplo de 4 é complementada pela do não-múltiplo de 100.

Essa regra complementa a regra do múltiplo de 400.

Então uma forma de se testar em java seria:

if((ano%4 == 0 && ano%100 !=0) || ano% 400 == 0)O raciocínio do código que o Rauel postou está perfeito, porém é para linguagem C e não para java, além disso estão faltando parênteses para fechar o || (ou lógico), os parênteses que sintetizam a condição do while( … ).

Por fim, fiz aqui um raciocínio para imprimir os anos bisextos em um intervalo de anos, inclusive os limites casos sejam bisextos, claro.

[code]/* Imprimi anos bisextos em um intervalo de anos

  • Autor: Delano Lima
  • Data: 24/10/2011
    */

import java.util.Scanner;
public class Bisexto{
public static void main(String[] args){

	int inicio, fim;
	Scanner entrada = new Scanner(System.in);
	System.out.print("Qual o ano inicial?: ");
	inicio = entrada.nextInt();
	System.out.print("Qual o ano final?: ");
	fim = entrada.nextInt();
	while(inicio <= fim){
		if ( (inicio % 4 == 0 && inicio % 100 != 0) || inicio % 400 == 0 ){
			System.out.println("Ano Bisexto: "+inicio);
			inicio = inicio+4;
		}else{
			inicio++;
		}
	}
}

}[/code]Espero que eu tenha ajudado a esclarecer alguma coisa.

Abraço!