Jump to content
JMAS

multiplo comum

Recommended Posts

JMAS

Calcula e imprime no ecrã o menor múltiplo comum de num1 e de num2, superior a 0, este e o enunciado, eu fiz isto:

#include <stdio.h>

int main ( void )
{
int num1, num2;

  printf( "introduza um primeiro valor positivo\n");
  scanf( "%d", &num1);

  printf( "introduza o segundo valor positivo\n");
  scanf( "%d", &num2);

  if(num1 % 2==0 && num2 % 2 ==0)
   printf("%d", (num1 * num2)/2);

  if(num1 % 2 !=0 && num2 % 2 !=0){

   if(num1 % num2 ==0 && num2 % num1 !=0){
    printf("%d",num1);
    }
     
   else if(num1 % num2 !=0 && num2 % num1 ==0)
    printf("%d",num2);
  }

  if(num1 % num2 !=0 && num2 % num1 !=0)
    printf("%d", num1 * num2);

return 0;
}

o codigo esta certo?

Share this post


Link to post
Share on other sites
pmg

$ ./a.out 
introduza um primeiro valor positivo
12
introduza o segundo valor positivo
18
108216

Não me parece correcto.

Eu estava à espera de qualquer coisa como "36" em vez de "108216" ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
KTachyon

Estás a fazer uma confusão...

Tu sabes que se multiplicares um número pelo outro obténs um multiplo comum, logo podes utilizar esse múltiplo como condição limite num ciclo for. Depois só tens que incrementar um multiplicador para um deles e verificar se o resto da divisão pelo outro dá zero.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
JMAS

mas nesse caso, se num1 = 4 e num2 = 6, 4*6=24 e o menor multiplo comum seria o 12 e nao o 24...

Share this post


Link to post
Share on other sites
KTachyon

Sim, mas isso seria se não utilizasses o loop para incrementar. A multiplicação dos dois é só a condição limite:

for (i = 1; i < n2; i++)
    if ((i * n1) % n2 == 0)
        break;


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
JMAS

fiz umas correcçoes e para os numeros impares faz tudo bem, o problema e para os pares a partir de 10...

Share this post


Link to post
Share on other sites
JMAS

  if(num1 % 2 == 0 && num2 % 2 == 0)

    
  if(num1 % 2 == 0 && num2 % 2 != 0)
   printf("mult = %d", num1 * num2);

  if(num1 % 2 != 0 && num2 % 2 == 0)
   printf("mult = %d", num1 * num2);

  if(num1 % 2 != 0 && num2 % 2 != 0){

   if(num1 % num2 == 0 && num2 % num1 != 0){
    printf("mult = %d",num1);
    }
     
   else if(num1 % num2 != 0 && num2 % num1 == 0)
    printf("mult = %d",num2);
  

   else if(num1 % num2 != 0 && num2 % num1 != 0)
    printf("mult = %d", num1 * num2);
   }

ate agora esta assim, nao estou mesmo a conseguir fazer o primeiro "if" e ja me passou tudo pela cabeça...

Share this post


Link to post
Share on other sites
KTachyon

Se estás a tentar resolver um problema matemático para casos, logo à partida estás a fazer alguma coisa mal.

As 3 linhas que coloquei no post anterior resolvem-te o problema para qualquer caso (dentro dos limites de um int).


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
JMAS

olhei para o que escreste e tentei pensar por mim, mas em portugues antes de ir para o c, ou seja, pensei em arranjar um num3 que variasse e no while e multiplicar esse num3 pelo num1 e pelo num2, num ciclo while e parar quando fossem iguais:

   while(mult1 == mult2)
     mult1 = num1 * num3; 
     mult2 = num2 * num3;
     num3++; 
   printf("%d", num2 * num3);

escrevi isto e continua a nao ser universal...

Share this post


Link to post
Share on other sites
KTachyon

Lê bem o teu código. Estás a dizer: "Enquanto mult1 é igual a mult2 faz...". E, de qualquer forma isso não funciona, porque estás a multiplicar dois números diferentes pelo mesmo número, é normal que ambos os números vão dar sempre diferente. Ou seja, o teu while nunca vai achar o valor que pretendes.

O que podes fazer é:

int mult = 1;

while ((multi*num1) % num2 != 0 && mult < num2) {
    mult++;
}

Que é exactamente o que eu fiz no ciclo for que apresentei antes...


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
JMAS

ja consegui, ja funciona. outra pergunta se eu quiser que um programa me mostre as varias opcoes que executa, no ecra como e que faço?

e que eu escrevi:

printf("escolha uma opcao do menu:\n");

scanf("%d", &opcao);

ele le a opcao, so que quando eu escrevo outro printf com o numero da opcao ele nao mostra.

a ideia era:

Menu:

1 -...

2 -...

3 -...

Share this post


Link to post
Share on other sites
KTachyon

printf("Menu:\n");
printf("1-...\n");
printf("2-...\n");
printf("3-...\n");
scanf("%d", &opcao);

Isto?


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
koxy

Então como fica o resultado desse enunciado escrito em c ?

O programa todo "bem apresentado".. ?

Obrigado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.