Informática, perguntado por meloadrielle, 1 ano atrás

calcular o MDC e MMC de dois números inteiro maior que 2 e menor que 1000000 Seguir Ler os dois números inteiros. Criticar a validade dos números que devem satisfazer o intervalo proposto Se não satisfizer o intervalo exibir mensagem Erro de Dados. Se satisfizer, exibir mensagem MDC = resposta; MMC = resposta em linguagem c

Soluções para a tarefa

Respondido por bokomoko
1
Primeiro, vamos lembrar que o MMC entre dois números é igual ao produto dos dois números dividido pelo MDC.

Portanto, se calcularmos o MDC entre dois números, facilmente calculamos o MMC.

O MDC pode ser calculado pelo algoritmo de subtração sucessiva do maior pelo menor.  Quando a última iteração der 0, o MDC será o resultado da etapa anterior. Se a última iteração de 1, os números são primos entre si.

Por exemplo, qual o MDC entre 12 e 16 ? 
subtraimos o menor do maior
16-12 = 4
Pegamos os 2 menores 12 e 4 e subtraimos de novo
12-4 = 8
pegamos os 2 menores 8 e 4 
8-4 = 4
e então os 2 menores agora são iguais, este é o MDC

Agora imagine o MDC entre 63 e 18 ... 
63 - 18 = 45
45 - 18 = 27
27 - 18 = 9
18 - 9 = 9
O MDC é 9

Agora imagine 42 e 11
42-11 = 31
31-11 = 20
20-11 = 9
11-9 = 2
9-2=7
7-2=5
5-2=3
3-2=1
Opa, esses números são primos entre si

Podemos inclusive usar recursividade aí, que fica bem interessante

Em C ???



assim ? 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int obtemvalor( char  mensagem[]) {
  int aux;
  do {
     printf("%s \n", mensagem );
     scanf("%i", &aux) ;
  } while ( aux <=2 || aux > 1000000 );
  return (aux);
};
int mdc( int valor1 , int valor2 ){
  int aux;
  int pequeno;
  int grande;
  if (valor1 > valor2){
      pequeno = valor2;
      grande = valor1;
  }  else {
     pequeno = valor1;
     grande = valor2;
  };
  if (pequeno ==0 ){
     return(grande);
  }  else{
    return( mdc( pequeno, grande-pequeno));
   };
   return (aux);
}
int main(){
  int um_numero;
  int outro_numero;
  int resultado;
  int mmc;
  um_numero = obtemvalor("Informe o primeiro número" );
  outro_numero = obtemvalor("Informe o segundo número");
  resultado = mdc(um_numero,outro_numero);
  mmc = (um_numero * outro_numero) / resultado;
  printf("Números informados : %i e %i \n", um_numero, outro_numero);
  printf("MDC = %i \n",resultado);
  printf("MMC = %i \n", mmc);
}

rode o programa aqui -> https://repl.it/@bokomoko/mdc-e-mmc-simplificado


meloadrielle: compilou direitinho,fiz uns ajuste pq ficou um pouco grande e a professora pediu o mais simples possivel mas me ajudou bastante,obg
meloadrielle: mas ai tem funções do c++ e quero na linguagem c
bokomoko: Se ele compilou no compilador C ele não pode ter funções de C++
bokomoko: posso ver o seu código? sempre é bom saber quais ajustes que o tornam mais simples
Perguntas interessantes