Ir ao conteúdo

Posts recomendados

Postado

Fala galera, beleza? Tenho um trabalhinho de aula aqui, porém na hora de gerar o MMC e o MDC está dando errado o resultado no meu código. Alguém tem sugestões??

 

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    int num1, num2, divisores, contadorvetor1 = 0, contadorvetor2 = 0;
    printf("\nDigite o primeiro numero:\n");
    scanf("%d", &num1);
    int vet1[num1];
    printf("\nDigite o segundo numero:\n");
    scanf("%d", &num2);
    int vet2[num2];
    divisores = 2;
    printf("\nDivisores do primeiro numero\n");
    while (num1 != 1) {
        if (num1%divisores == 0)
        {
            vet1[contadorvetor1] = divisores;
            printf("%d\n", divisores);
            num1 = num1 / divisores;
            contadorvetor1++;
        }
        else
        {
            divisores++;
        }
    }
    divisores = 2;
    printf("\nDivisores do segundo numero\n");
    while (num2 != 1) {
        if (num2%divisores == 0)
        {
            vet2[contadorvetor2] = divisores;
            printf("%d\n", divisores);
            num2 = num2 / divisores;
            contadorvetor2++;
        }
        else
        {
            divisores++;
        }
    }
    int entrou = 0;
    int entrou2 = 0;
    int menor = 1000000;
    int maior = -1;
    for (int i = 0; i < contadorvetor1; i++)
    {
        for (int j = 0; j < contadorvetor2; j++)
        {
            if (vet1[i] == vet2[j])
            {
                if (menor > vet1[i])
                {
                    entrou = 1;
                    menor = vet1[i];
                }
                if (maior < vet1[i])
                {
                    entrou2 = 1;
                    maior = vet1[i];
                }
                entrou = 1;
            }
        }
    }
    if (entrou == 1)
    {
        printf("\nMMC: %d\n", menor);
        printf("\nMDC: %d\n", maior);
    }
    return 0;	
}

 

  • Curtir 1
Postado

@RafaelLD Olá!

― Seu programa está determinando/ou decompondo o(s) fator(es) primo(s), que são alguns dos divisores naturais de uma número, porém, não representa o conjunto inteiro de seus divisores naturais.

D(12){ 1, 2, 3, 4, 6, 12 };

D(24){ 1, 2, 3, 4, 6, 8, 12, 24 };

 

image.png.3cf3388ef4f93176593389c9c4575a58.png

 

Contudo, é possível sim chegar ao Min. M. Comum e Max. D. Comum usando os fator(es) primo(s).

  • M(F(12){ 2², }, F(24){ , 3¹ }){( × )} ➭ O produto d'fatores +|- comuns de > expoente.
  • D(F(12){ , }, F(24){ 2³, 3¹ }){( × )} ➭ O produto d'fatores +|  comuns de < expoente.

❝ Implementar isso parece um pouco maçante!

Existem estratégias bem mais intuitivas para o Ensino de Matemática & C que demanda menos esforços na estratégia, por exemplo; O Algoritmo de Euclides.

 

 

― Está claro pra você? Algo mais a acrescentar ??
Pode falar O.k!

 

 

  • Curtir 3
Postado
16 horas atrás, AnsiC disse:

@RafaelLD Olá!

― Seu programa está determinando/ou decompondo o(s) fator(es) primo(s), que são alguns dos divisores naturais de uma número, porém, não representa o conjunto inteiro de seus divisores naturais.

D(12){ 1, 2, 3, 4, 6, 12 };

D(24){ 1, 2, 3, 4, 6, 8, 12, 24 };

 

image.png.3cf3388ef4f93176593389c9c4575a58.png

 

Contudo, é possível sim chegar ao Min. M. Comum e Max. D. Comum usando os fator(es) primo(s).

  • M(F(12){ 2², }, F(24){ , 3¹ }){( × )} ➭ O produto d'fatores +|- comuns de > expoente.
  • D(F(12){ , }, F(24){ 2³, 3¹ }){( × )} ➭ O produto d'fatores +|  comuns de < expoente.

❝ Implementar isso parece um pouco maçante!

Existem estratégias bem mais intuitivas para o Ensino de Matemática & C que demanda menos esforços na estratégia, por exemplo; O Algoritmo de Euclides.

 

 

― Está claro pra você? Algo mais a acrescentar ??
Pode falar O.k!

 

 

Primeiramente, muito obrigado pela atenção amigo!! 
Isso quer dizer que o código está dando certo? Eu não entendi direito.. Pois o MMC na maioria das hipóteses fecha em 2 e MDC 2.. Ou o código só funciona com números primos?

  • Curtir 1
Postado

― Com assim só funciona com número primos? Eu jamais afirmei esse absurdo.

 

UPDATE

Eu supos que sua intenção era: Computar as operações a partir dos fatores primos da decomposição dos números naturais. Até coloquei as cores demostrando como implementar e tudo, mais não foi o bastante.

  • Curtir 1
Postado
5 horas atrás, AnsiC disse:

― Com assim só funciona com número primos? Eu jamais afirmei esse absurdo.

 

UPDATE

Eu supos que sua intenção era: Computar as operações a partir dos fatores primos da decomposição dos números naturais. Até coloquei as cores demostrando como implementar e tudo, mais não foi o bastante.

Opa, não me interprete mal, eu apenas estou com dificuldades no código mesmo.. Eu precisava calcular o MMC e MDC destes resultados mas na maioria dos casos os resultados apresentados são 2 e 2. Sabe me explicar onde está o erro?

  • Membro VIP
Postado

Olá.

 

1#

@RafaelLD, sobre:

Em 02/10/2018 às 00:25, AnsiC disse:

― Seu programa está determinando/ou decompondo o(s) fator(es) primo(s), que são alguns dos divisores naturais de uma número, porém, não representa o conjunto inteiro de seus divisores naturais.

D(12){ 1, 2, 3, 4, 6, 12 };

D(24){ 1, 2, 3, 4, 6, 8, 12, 24 };

 

Referente a esse trecho:

Em 01/10/2018 às 21:07, RafaelLD disse:

printf("\nDivisores do primeiro numero\n");

 

Você está chamando de "divisores" o que na verdade são "os números da decomposição em fatores primos". São coisas distintas.

 

Quais são os divisores de 24? reposta: 1, 2, 3, 4, 6, 8, 12, 24.

Quais são os fatores primos de 24? resposta: 2, 2, 2, 4. (que é o mesmo que 2x 3).

 

O código está resultando no segundo, ou seja, está encontrando uma coisa, mas está dizendo que é outra!

 

Resumindo: em vez de dizer "Divisores do primeiro número", teria que dizer "Fatores primos do primeiro número".

 

OU teria que corrigir para de fato o programa encontrar os divisores.

 

 

 

2#

O cálculo do MMC e do MDC são distintos. O próprio nome já diz: múltiplo é uma coisa, divisor é outra. O máximo que pode acontecer é que eles podem ter "operações em comum", por exemplo: ambos podem ser encontrados utilizando os fatores primos dos números.

 

Então, tomando como base esse trecho:

Em 01/10/2018 às 21:07, RafaelLD disse:

    for (int i = 0; i < contadorvetor1; i++)
    {
        for (int j = 0; j < contadorvetor2; j++)
        {
            if (vet1[i] == vet2[j])
            {
                if (menor > vet1[i])
                {
                    entrou = 1;
                    menor = vet1[i];
                }
                if (maior < vet1[i])
                {
                    entrou2 = 1;
                    maior = vet1[i];
                }
                entrou = 1;
            }
        }
    }

 

 

Deu a entender que está definindo o MMC como o "menor divisor em comum entre os 2" e o MDC como o "maior divisor em comum entre os 2", nesse caso, o MCC fica errado, pois como o citado, ele quer o MÚLTIPLO, não o divisor.

 

 

Veja:Sempre o MMC entre dois ou mais números será maior ou igual ao MAIOR número. Oras! como um divisor em comum será maior que o maior número?

 

 

 

3#

DICAS e SUGESTÕES:

- Faça uma coisa de cada vez. OU faz o MMC ou faz o MDC. Escolha o de sua preferência e implemente;

- Para o MDC, você pode utilizar os "divisores" dos números, ou seja, o MDC será o "maior divisor em comum";

- Para o MMC, em vez de divisores, precisará dos múltiplos. Daí, precisará encontrar o "menor em múltiplo comum".

- Se for utilizar "fatores primos", esse mesmo recurso pode ser utilizado para MDC e MMC, entretanto precisará verificar o valor do "expoente", ou seja, "a quantidade primos iguais em cada fatores primos de um número". Aí, para MDC usa essa informação de uma forma, para o MMC usará de outra.

 

Lembrando: a sugestão é fazer cada um separadamente. Só após pensa numa forma de fazer ao mesmo tempo! Algo como postar só encontrando o MDC. Depois posta só encontrando o MMC.

 

 

Se tiver dúvidas sobre alguma coisa é só perguntar.

 

No aguardo.

 

 

  • Curtir 1
  • Obrigado 1
  • Membro VIP
Postado
1 hora atrás, RafaelLD disse:

Muito obrigado pelo esclarecimento meu amigo! Qual a fórmula para calcular o MMC e o MDC no C? 

 

A ideia é que você entenda um algoritmo do "mundo real" e traduza para um algoritmo computacional escolhido.

 

Resumidamente seria algo como:

Como calculo o MMC e MDC no papel de:

18 e 24

9 e 31

 

Sabe fazer isso?

 

 

Entenda como foi feito para conseguir. Quais os passos necessários? 

 

Daí, crie um algoritmo em C para efetuar a mesma tarefa, ou seja, o C vai meio que servi para automatizar o processo. As dificuldades encontradas no caminho fazem parte do processo de aprendizagem.

 

obs.: lembrando que a sugestão é que tente fazer uma coisa de cada vez. Tentar resolver os dois ao mesmo tempo tende a ser contra-producente. 

 

Tenta fazer um ou outro e posta o código aqui. Se tiver alguma dúvida é só postar.

 

 

No aguardo.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...