Ir ao conteúdo

C simplificar fração em c


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

alguém pode me ajudar com essa questão! 

Faça um módulo que receba o dividendo e o divisor de uma fração e substitua seus
valores pelos equivalentes valores simplificados.

 

no caso eu pensei ela na seguinte maneira:

int reduzirNum (int n , int m) {
    int resto=0;
   while(m!=0){
      resto=n%m;
      n=m;
      m=resto;
      }
    n = n/n;

    return n;

}
int reduzirDen (int n, int m) {
    int resto=0;
   while(m!=0){
      resto=n%m;
      n=m;
      m=resto;
      }
    m = m/n;

    return m;


}
int main()
{   int n, m, result=0, result2=0;

        printf("escreva o primeiro numero:\n");
        scanf("%d", &n);

        printf("escreva o segundo numero:\n");
        scanf("%d", &m);
        result = reduzirNum(n, m);
        result2 = reduzirDen(n, m);

        printf("%d/%d", result, result2);
    return 0;
}


 

porém, ela não ta retornando o valor simplificado da fracao

 

  • Obrigado 1
  • Solução
Postado

@alicesky12    para que pegar o resto da divisão , só precisa saber se a divisão é exata ,  e creio que pode ser assim :

#define     WIN32_WINNT 0x600
#include    <stdio.h>
#include    <conio.h>
#include    <stdlib.h>
#include    <string.h>
#include    <windows.h>
#define     _h GetStdHandle(STD_OUTPUT_HANDLE)
///    Faça um módulo que receba o dividendo e o divisor
///    de uma fração e substitua seus
///    valores pelos equivalentes valores simplificados.
void simplif( int* num , int* den )
{
  int ax = *num;
  int aux = 0;
  if( *num > *den )ax = *den;
  for(int i=2; i<ax; i++)
  {
    if( *num % i == 0 && *den % i == 0 )
    {
      aux = i;
    }
  }
  if( aux )
  {
    *num /= aux;
    *den /= aux;
  }
}
int main()
{
  int* n = 0;
  int* m = 0;
  int cor_letra, cor_fundo;
  CONSOLE_SCREEN_BUFFER_INFO c;
  if( GetConsoleScreenBufferInfo( _h, & c ) )
  {
    cor_letra = ( c.wAttributes & 0xFF )        & 0x0F;
    cor_fundo = ((c.wAttributes & 0xFF ) >> 4 ) & 0x0F;
  }
  SetConsoleTextAttribute( _h , 11 + ( 0 << 4 ) );
  printf("escreva o primeiro numero -: ");
  scanf("%d", & n );
  printf("escreva o segundo numero --: ");
  scanf("%d", & m );
  
  simplif( & n , & m );
  
  SetConsoleTextAttribute( _h , 10 + ( 12 << 4 ) );
  printf("\n\n   SimpliFicado          ");
  SetConsoleTextAttribute( _h , 12 + ( 15 << 4 ) );
  printf("\b\b\b\b\b\b\b\b\b  %d/%d  ", n  , m   );
  SetConsoleTextAttribute( _h , cor_letra + ( cor_fundo << 4 ) );
  printf("\n\n\n");
  return 0;
}

 

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

alguém pode me ajudar com essa questão! 

Faça um módulo que receba o dividendo e o divisor de uma fração e substitua seus
valores pelos equivalentes valores simplificados.

 

Lembre do ensino fundamental antes de pensar em C.

 

Você precisa dividir os dois números pelo maior divisor comum., o popular MDC. Nada mais.

 

O simples: calcular os fatores primos e definir o MDC

 

image.png.9762abc68d201883c2a44ee79309a44f.png

 

 

Isso é familiar? É o que tem que fazer. Em C ou COBOL ou com o lápis mesmo

 

Desenho de https://brasilescola.uol.com.br/matematica/maximo-divisor-comum.htm

E aí teria 120/150 = 4/5... 

  • Curtir 2
  • Amei 1
Postado

 

Como comentado acima com o MDC você pode dividir os valores pelo resultado. Este tópico pode ajudar,

 

 

Aí é só passar para a função os valores que representam a fração para retornar a simplificada, p.ex,

 

int simplifica(int* a, int* b);

 

E em main,

simplifica(&a, &b);
    
printf("%d/%d\n",a, b);
...

 

  • Obrigado 1
  • Amei 1

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...