Problema com Exercicio de FOR e WHILE

6 respostas
C

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.

6 Respostas

E

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).

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:

C

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

Vingdel
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 :D

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 :D

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:
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);
		}
	}
}

Abraço!

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! :smiley:

Vingdel
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

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.
/* 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++;
			}
		}
	}
}
Espero que eu tenha ajudado a esclarecer alguma coisa.

Abraço!

Criado 17 de outubro de 2011
Ultima resposta 24 de out. de 2011
Respostas 6
Participantes 5