Ir ao conteúdo
  • Cadastre-se
MyungKim

Programa em c/c++ dando erro (iniciante++)

Recommended Posts

Eae galera, to no 1 periodo de SI e to com uma duvida em uma das questoes que meu professor passou...

"Descrição:

Seu objetivo é determinar o maior múltiplo de um inteiro dado menor do que ou igual a um outro inteiro dado.

Formato de Entrada:

Consiste de dois inteiros positivos M e N.

Formato de Saída:

A saída consiste do maior número que seja múltiplo de M e menor que N, se não houver um múltiplo de M menor que N você deve imprimir "sem multiplos menores que N", sem as aspas, onde N deve ser substituído pelo valor de entrada N.

 

Entrada :

7

50

Saída :

49

"

Meu codigo:

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

using namespace std;

int main()
{
	
	int divisor;
	int num;
	int mm;
	
	cin >> divisor;
	cin >> num;
	
	if (mm = num - (num % divisor))
	
		printf("%d", mm);
		
	else 
	
		printf("sem multiplos menores que %d", divisor);

}

Onde to errando? Quando peço uma dica no site ele so me informa isso : " Lembre dos casos onde não existem múltiplos."

 

Quem puder me ajudar, valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@MyungKim Caaaara, pelo que eu entendi do enunciado da questão a sua lógica ta bem errada pois veja:

1° nunca haverá um "else" uma vez que sempre "mm = num - (num % divisor)". Observe que "else" avalia se uma dada condição é verdadeira ou falsa, e neste caso você já está informando que o valor de 'mm' sempre será 'num - (num % divisor)' e portanto sempre será uma condição verdadeira.
2° você sabe trabalhar com estruturas de repetição? "for, while"...?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que você não verificou a condição do múltiplo 'int mm', na questão proposta, é dito que o múltiplo tem que ser menor ou igual ao segundo inteiro, então na parte do 'if (mm = num - (num % divisor))' voce apenas acrescenta o valor ao inteiro mm, porém precisa verificar se é menor ou igual ao segundo inteiro que no caso seria 'if (mm <= num - (num % divisor))'

Mas você ainda nem sequer procurou pelo múltiplo, você pode utilizar um loop, e determinar ate quando ele sera finalizado, por exemplo:

     Como já temos o divisor, preciso verificar todos múltiplos ate obter um que seja menor ou igual ao 2º inteiro, e pegar o maior múltiplo, o loop faz exatamente isso, ele pega o m(múltiplo) verifica se o m*divisor for menor ou igual que o 2º inteiro, vamos continuar ate encontrar um que não seja, ai finalizamos o loop e já temos o maior inteiro

    int m;
    for(m = 0; m*divisor <= num; m++)
            mm = m*divisor;


     Como o mm so vai ter um valor real quando ele obter o multiplo, podemos simplificar e usa-lo para mostrar a mensagem:
        if(mm)
            printf("%d e o maior multiplo de %d, e menor ou igual a %d, resultando em: %d\n", m-1, divisor, num, mm);
        else
            printf("Sem multiplos menores que %d", divisor);

 

*P.S: O loop 'for' acima é apenas um rascunho, não aconselho a usa-lo, procure um que seja definitivo, pois quando é colocado um divisor 0 e um 2 inteiro 0 ele fica procurando o múltiplo infinitamente.

*P.S: Na 1 mensagem printf eu utilizei o argumento m-1 para identificar o multiplo, pois quando o loop termina ele acrescenta um valor a mais do que o necessário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×