Logica Deficiente

18 respostas
aajjbb

Achei um livro/apostila sobre algoritimos no 4shared, apos me interessar por competições de progamação… mas após emperra neste 2 exercicios…

  1. Escrever um algoritmo que leia um valor em Reais. A seguir, calcule o menor número de notas possíveis
    no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1. A seguir
    mostre o valor lido e a relação de notas necessárias.

  2. Considerando 3 carros (X,Y e g) que saem de uma cidade A. A seguir, considerando que o caminho a
    percorrer pelo carro X é de 360 Km, pelo carro Y é de 270 Km e pelo carro g é de 310 KM, faça a
    leitura da velocidade dos 3 carros e mostre o tempo em horas que cada um deles levará para percorrer
    seu percurso.

e

  1. Escrever um algoritmo que leia a idade de uma pessoa em dias e informe-a em anos, meses e dias.

descobri que minha logica matematica talves esteje muito precaria

sobre o exercicio 20 desenvolvi o seguinte codigo, ao qual acho que esta errado

public class Algo20 {
	public static final int carX = 360;
	public static final int carY = 270;
	public static final int carG = 310;
	public static final int vel = 60;
	
		public void calculaTempo(){
			int carXstart = 0;
			int carYstart = 0;
			int carGstart = 0;
			
			
				for(int i = 0; i < 100; i++){
					carXstart++;
					carYstart++;
					carGstart++;
				}
				
				int carXrest = carX - carXstart / vel;
				int carYrest = carY - carYstart / vel;
								
				System.out.println("Para o Termino do percurso ");
				System.out.println("Carro x " + carXrest + " h" );
				System.out.println("Carro Y " + carYrest + " h");
		}
		public static void main(String[] args) {
			Algo20 algo = new Algo20();
				algo.calculaTempo();
		}

}

Sobre o 19 ainda nao consegui desenvolver em nada, mas gostaria de uma "Luz";

E ao 21) acho que como é um estudo sobre "Logica" nao sei se o uso da Classe Calendar seria util, ou se deveria tentar na "unha" mesmo

18 Respostas

Giulliano

Cara esse exercício não tem uma condição ? Tipo assim leia os valores em reais, no máximo 1 milhão;

Pq se for deixar aberto é um exercício bastante dificil…dado que eu poderia escrever 1 Quatrilhão e vários números quebrados…

Agora se existe um limite…fica facinho…

Dado que
Cinquenta…
Setenta…
Oitenta…
Noventa…

Todos terminam em enta, vc poderia pegar somente o nov do noventa e responder quais as formas de se montar este valor.

douglaskd

esmaguei tudo pra ficar pequeno, hehe

// exercicio 21

import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {
        
        int idade = Integer.parseInt( JOptionPane.showInputDialog( "entre com a idade" ) );
        int anos = idade/365;
        int resto = idade % 365;
        int meses = resto/30;
        int dias = resto % 30;
        JOptionPane.showMessageDialog(null,"voce tem"+(anos>0 ? anos+ "anos, " : "")+(meses>0 ? meses+ "meses, " : "")+(dias>0 ? dias+ "dias, " : "") );
        
    }

}

acho que vacilei não devia ter colocado o código. mais já foi…

funciona assim:
1 ano tem 365 dias
1 mês tem 30 dias (depende do mês tratar isso é complicado)
1 dia tem 1 dia…rs

você divide a quantidade de dias por 365, o resultado vai ser em anos…e o que sobrou da divisão você divide por 30, o resultado vai ser em meses, e o que sobrou são os dias…

exemplo: 600 dias
anos = 600 / 365 <<-- o resultado é “1” e vai sobrar 235 que não é divisível por 365.
meses = 235 / 30 <<-- o resultado é 7 e vai sobrar 25 que não é divisível por 12
dias = 25 que foi o que sobrou…

ou seja 1 ano 7 meses 25 dias

E

Como você faria isso na mão? Provavelmente iria pegar a quantia e quebrar primeiro nas maiores notas (por exemplo, se você tem o valor de 12345 reais, provavelmente irá pegar 123 notas de 100. Então sobraram 45 reais.
Você então vai tentar a segunda maior nota (50), mas como 45 < 50, então você tenta a terceira maior nota (20).
Então você vai pegar 2 notas de 20. Sobraram 5 reais.
Você vai tentar a quarta maior nota (10), mas não dá.
A quinta maior nota (5) já dá para completar os 5 reais.

Implemente isso.

aajjbb

opa, ja estou implementando ambos com a ajuda, jaja posto o codigo, agora, nao entendi bem estes operadores ternarios na Saida nesse seu codigo?

douglaskd

exercício

Distancia a ser percorrida : 500KM
velocidade do automóvel: 100KM/H

tempo em horas = 500/100 = 5hs

ou seja você tem que dividir a distancia pelo valor lido do usuário, o resultado vai ser as horas, o seu código ta errado mesmo…nem usa for são 3 divisões simples

tenta implementar isso ae…

douglaskd

(anos>0 ? anos+ "anos, " : “”) <<-- eu repeti isso 3 vezes…vou explicar detalhadamente

anos = 1 fictício…

se anos for maior que 0 escreva o valor da variável anos+ a palavra "anos, ", senão escreva apenas “” ou seja nada…

irá sair na tela: "1 anos, "

tente fazer isso usando ifs comuns, depois você estuda essa parte, coloquei assim pra vc “não” entender e tentar desenvolver sua lógica

aajjbb
public class Algo20 {
	public static final int carX = 360;
	public static final int carY = 270;
	public static final int carG = 310;
	public static final int vel = 60;
	
		public void calculaTempo(){
			
				int carXrest = carX + (-50)  / vel;
				int carYrest = carY + (-50) / vel;
				int carGrest = carG + (-50) / vel;
				
				System.out.println("Para o Termino do percurso ");
				System.out.println("Carro x = " + carXrest + " h" );
				System.out.println("Carro Y = " + carYrest + " h");
				System.out.println("Carro G = " + carGrest + " h " );
		}
		public static void main(String[] args) {
			Algo20 algo = new Algo20();
				algo.calculaTempo();
		}

}
douglaskd

int carXrest = carX + (-50) / vel;

o que é o “”+ (-50)"" ? acho que isso ai ta sobrando não?

aajjbb

ah, tipo, a constante é a distancia, isso é so uma “simulação” apos 50km rodados;

Roger75

aajjbb:
Achei um livro/apostila sobre algoritimos no 4shared, apos me interessar por competições de progamação… mas após emperra neste 2 exercicios…

  1. Escrever um algoritmo que leia um valor em Reais. A seguir, calcule o menor número de notas possíveis
    no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1. A seguir
    mostre o valor lido e a relação de notas necessárias.

  2. Considerando 3 carros (X,Y e g) que saem de uma cidade A. A seguir, considerando que o caminho a
    percorrer pelo carro X é de 360 Km, pelo carro Y é de 270 Km e pelo carro g é de 310 KM, faça a
    leitura da velocidade dos 3 carros e mostre o tempo em horas que cada um deles levará para percorrer
    seu percurso.

e

  1. Escrever um algoritmo que leia a idade de uma pessoa em dias e informe-a em anos, meses e dias.

descobri que minha logica matematica talves esteje muito precaria

sobre o exercicio 20 desenvolvi o seguinte codigo, ao qual acho que esta errado

public class Algo20 {
	public static final int carX = 360;
	public static final int carY = 270;
	public static final int carG = 310;
	public static final int vel = 60;
	
		public void calculaTempo(){
			int carXstart = 0;
			int carYstart = 0;
			int carGstart = 0;
			
			
				for(int i = 0; i < 100; i++){
					carXstart++;
					carYstart++;
					carGstart++;
				}
				
				int carXrest = carX - carXstart / vel;
				int carYrest = carY - carYstart / vel;
								
				System.out.println("Para o Termino do percurso ");
				System.out.println("Carro x " + carXrest + " h" );
				System.out.println("Carro Y " + carYrest + " h");
		}
		public static void main(String[] args) {
			Algo20 algo = new Algo20();
				algo.calculaTempo();
		}

}

Sobre o 19 ainda nao consegui desenvolver em nada, mas gostaria de uma "Luz";

E ao 21) acho que como é um estudo sobre "Logica" nao sei se o uso da Classe Calendar seria util, ou se deveria tentar na "unha" mesmo

Em relação à 19, acho que você tem que dividir o valor inserido pelo das notas, em ordem decrescente do valor delas. Se o resto der zero é porque a divisão deu exata. Se sobrar algum resto, você tenta dividir pelas outras notas, e assim por diante.

aajjbb

é, realmente esse 19 ta uma pedra no sapado… eu desenvolvi isso, mas ainda esta errado

public class Algo21 {
	public void lerReais(double Real) {
		if (Real > 100) {
			Real = Real / 100;
			System.out.println(Real + " notas de 100");
		} else if (Real > 50) {
			Real = Real / 50;
			System.out.println(Real + " notas de 50");
		} else if (Real > 20) {
			Real = Real / 20;
			System.out.println(Real + " Notas de 20");
		} else if (Real > 10) {
			Real = Real / 10;
			System.out.println(Real + " Notas de 10");
		} else if (Real > 5) {
			Real = Real / 5;
			System.out.println(Real + " Notas de 5");
		} else if (Real > 1) {
			Real = Real / 1;
			System.out.println(Real + " Notas de 1");
		}
		System.out.println(Real);

	}

	public static void main(String[] args) {
		Algo21 algo = new Algo21();
		algo.lerReais(547);

	}
}
R

O problema está no uso do Else If

public class ContadorDeCelulas {

    public void contarCelulas(double quantiaDeDinheiro) {
      
        int numeroDeCelulas;

        if (quantiaDeDinheiro > 100)
        {
            numeroDeCelulas = (int) (quantiaDeDinheiro / 100);
            quantiaDeDinheiro -= numeroDeCelulas * 100;
            System.out.println(numeroDeCelulas + " notas de 100");
        }

        if (quantiaDeDinheiro > 50) {
           numeroDeCelulas = (int) (quantiaDeDinheiro / 50);
            quantiaDeDinheiro -= numeroDeCelulas * 50;
            System.out.println(numeroDeCelulas + " notas de 50");
        }

        if (quantiaDeDinheiro > 20) {
            numeroDeCelulas = (int) (quantiaDeDinheiro / 20);
            quantiaDeDinheiro -= numeroDeCelulas * 20;
            System.out.println(numeroDeCelulas + " notas de 20");
        }

        if (quantiaDeDinheiro > 10) {
           numeroDeCelulas = (int) (quantiaDeDinheiro / 10);
            quantiaDeDinheiro -= numeroDeCelulas * 10;
            System.out.println(numeroDeCelulas + " notas de 10");
        }

        if (quantiaDeDinheiro > 5) {
           numeroDeCelulas = (int) (quantiaDeDinheiro / 5);
            quantiaDeDinheiro -= numeroDeCelulas * 5;
            System.out.println(numeroDeCelulas + " notas de 5");
        }

        if (quantiaDeDinheiro > 1) {
            numeroDeCelulas = (int) (quantiaDeDinheiro / 1);
            quantiaDeDinheiro -= numeroDeCelulas * 1;
            System.out.println(numeroDeCelulas + " notas de 1");
        }

    }

    public static void main(String[] args) {
        ContadorDeCelulas contarNotas = new ContadorDeCelulas();
        contarNotas.contarCelulas(new Double(547));
    }
aajjbb

opa, obrigado, agora compreendi meu erro, a proposito, o 21) ainda continuo sem sucesso, ja experimentei receber um date como parametro e usar o SimpleDateFormat, mas nao obtive exito, algum de voces tem outra ideia? procurei sobre receber uma string e transformar em hh:mm:ss mas nao achei nada;

InSeOfKn

sobre a 21

1: leia a idade em dias

2: pegue essa idade em dias e divida por 365 e peque a parte inteira o resultado sera quantos anos vividos
3: tire o modulo dessa idade em dias por 365 o resultado sera o resto dos dias

4: peque o resto dos dias e divida por 30 e peque a parte inteira o resultado sera o resto dos meses
5: tire o modulo entre o resto dos dias e 30 o resultado sera o resto dos dias vividos

e exiba os resultados assim

Anos: (2)
Meses: (4)
dias: (5)

tenta implementar agora

Até mais!

Soulless-BR

Sobre o 21 eu fiz um exemplo de cálculo no console. Dei uma conferida manualmente e está batendo. Deem uma olhada no código abaixo, qualquer dúvida sobre ele é só fala.

Obs: provavelmente há uma maneira melhor de se calcular isso, mas a cabeça pesa essa hora.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int idade_dias, idade_anos, idade_meses;

        System.out.print("Digite a sua idade em dias: ");
        idade_dias = input.nextInt();

        idade_anos = idade_dias / 365;
        idade_meses = (idade_dias - (idade_anos * 365)) / 30;
        idade_dias = idade_dias - (idade_anos * 365) - (idade_meses * 30);

        System.out.println("A sua idade é: " + idade_anos + " anos, " + idade_meses
                + " meses e " + idade_dias + " dias.");
    }
}

Amigo no código do seu exercício 20 tem um problema de cálculo, não examinei o código, mas quando vi já brequei. Você usa o seguinte código:

int carXrest = carX - carXstart / vel;  
int carYrest = carY - carYstart / vel;

Agora veja o mesmo código só que substituindo as variáveis pelos valores dela:

int carXrest = 360 - 0 / 60;  
int carYrest = 270 - 0 / 60;

Ele irá dividir o 0 por 60 primeiro e depois fazer a subtração, o correto seria:

int carXrest = (carX - carXstart) / vel;  
int carYrest = (carY - carYstart) / vel;

Abraços e boa noite.

aajjbb

muito obrigado, me deu uma ajuda, ainda nao tinha conseguido pensar nesse, quando logar em casa irei implementar e postar aqui.

S
  1. Escrever um algoritmo que leia um valor em Reais. A seguir, calcule o menor número de notas possíveis
    no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1. A seguir
    mostre o valor lido e a relação de notas necessárias.

import java.util.Scanner;

public class SaqueNotas {

public static void main(String[] args) {

	Scanner s = new Scanner(System.in);
	System.out.print("Entre com o valor:");
	int valor = s.nextInt();

	System.out.println("Notas de 100: " + valor / 100);
	System.out.println("Notas de 50 : " + (valor % 100) / 50);
	System.out.println("Notas de 20 : " + ((valor % 100) % 50) / 20);
	System.out.println("Notas de 10 : " + (((valor % 100) % 50) % 20) / 10);
	System.out.println("Notas de 5  : " + ((((valor % 100) % 50) % 20) % 10) / 5);
	System.out.println("Notas de 2  : " + (((((valor % 100) % 50) % 20) % 10) % 5) / 2);
	System.out.println("Notas de 1  : " + ((((((valor % 100) % 50) % 20) % 10) % 5) % 2) / 1);
	
	s.close();
}

}

Acho bem mais simples.

Janerson

Amigo fiz essa gambiarra vê se te serve, ja te dei a resposta e isso é errado
mas o exercicio 19 é uma logica simples
o proprio codigo que fiz é auto-explicativo

int valor, notas_100, notas_50, notas_20, notas_10, notas_5, notas_2, notas_1; 
           int resto;
           System.out.print("Valor: ");
           valor = sc.nextInt();
           
           notas_100 = valor/100;
           resto = valor%100;
           notas_50 = resto/50;
           resto = resto%50;
           notas_20 = resto/20;
           resto = resto%20;
           notas_10 = resto/10; 
           resto = resto%10;
           notas_5 = resto/5;
           resto = resto%5;
           notas_2 = resto/2;
           resto = resto%2;
           notas_1 = resto;
           System.out.println("Notas de 100: " + notas_100+
                   "\nNotas 50: "+notas_50+"\nNotas 20: "+notas_20+
                   "\nNotas 10: "+notas_10+"\nNotas 5: "+notas_5+
                   "\nNotas 2: "+notas_2+"\nNotas 1: "+notas_1);
Criado 14 de outubro de 2010
Ultima resposta 17 de jul. de 2013
Respostas 18
Participantes 10