Ir ao conteúdo
  • Cadastre-se

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


MyungKim

Posts recomendados

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.

Link para o comentário
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
Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!