Ir ao conteúdo
  • Cadastre-se

C Iniciante em C, algoritmo sem utilizar os Mods


Posts recomendados

Algoritmo de um trabalho da facul, não estou conseguindo resolver sem utilizar os mods, preciso de ajuda!

 

Construir um algoritmo que receba como entrada dois números inteiros positivos (dividendo e divisor), realize a divisão e exiba o quociente (inteiro) e o resto (inteiro). Não é permitida a utilização de operadores de divisão e mod ( / e % ), e de multiplicação (*).

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Resolvi a parte da divisão usando funções, porém não estou acertando a parte de achar o resto. Ele sempre da um valor aleatório, se alguém conseguir corrigir pra mim e explicar, ficaria agradecido. Outras dicas também são muito bem vindas.

 

#include<stdio.h>

int CalDivisao(int dividendo, int divisor){

    int resultado;
    resultado = dividendo / divisor;
    }

    int Calresto(int resto, int divisao){
        resto = resto % divisao;
        }

int main (){

    int dividendo;
    int divisor;
    int div;
    int divisao;
    int resto;

    printf("entre com o dividendo:");
    scanf("%i", &dividendo);
    printf("entre com o divisor:");
    scanf("%i", &divisor);

    divisao = CalDivisao(dividendo,divisor);
    resto = Calresto(resto, divisao);


    printf("/nDivisao = %i", divisao);

    printf("/nResto = %i", resto);

    return 0;

}

 

Link para o comentário
Compartilhar em outros sites

Em 15/11/2019 às 07:53, Herbertbahia disse:

a unica maneira que conheço para imprimir resultado sem modulo é trocando o printf por cout mas isso transforma um codigo .c em .cpp ou seja seria um codigo c++

 

@Herbertbahia Como seria isso? Fiquei curioso

 

int CalDivisao(int dividendo, int divisor)
{
    int resultado;
    resultado = dividendo / divisor;
}

int Calresto(int resto, int divisao)
{
    resto = resto % divisao;
}

@Victor Hugo Barbosa Silva Você usou uma função logo acima no seu mesmo programa que usa os dois operadores que você não poderia usar... Acho que não vai ter sucesso com essa técnica com o seu instrutor.

 

"algoritmo sem utilizar os Mods" seria então não usar o operador % ? Mas está certo de que pode usar subtração? Como 

@Mauro Britivaldo disse, afinal divisão é isso mesmo. E módulo também.

 

Num primeiro momento pensei em pegar os valores como string e usar como se fosse no papel, apenas repetir aquele algoritmo do primário. Pensei em por na tela passo a passo e tal. Divertido seria, mas fiquei com preguiça. Postei algo assim aqui dias atrás para calcular o MMC de 3 números, seria algo igual. Veja lá se se interessou. Postei o programa inteiro. Não tenho o post agora, mas é só pesquisar aqui por MMC

 

Mas vou deixar dois outros palpites

 

Caso 1: usando simples recursão

Umas 5 linhas cada um, porque são no fundo apenas subtrações sequenciais

 

Divisão

int   x_div_r(int a, int b)
{
    if (b > a) return 0;
    return 1 + x_div_r(a - b, b);
};    // x_div_r()

Módulo

int x_mod_r(int a, int b)
{
    if (a < b) return a;
    return x_mod_r(a-b, b);
};    // x_mod_r()

Caso 2: usando apenas a subtração

Não muda muito porque é só uma sequência de subtrações até um limite

 

Divisão

int x_div_s(int a, int b)
{   int n = 0;
    while (a >= b) { a = a - b, n = n + 1; };
    return n;
};    // x_div_s()

Módulo

int x_mod_s(int a, int b)
{
    while (a >= b) a = a - b;
    return a;
};    // x_mod_s()

E seguindo o enunciado ao pé da letra essa função algoritmo :D 

int        algoritmo(int dividendo, int divisor);

nesse programa

int main(int argc, char** argv)
{
    algoritmo(182, 30);
    algoritmo(18, 3);
    return 0;
}

mostra 

[A = Bx + c] Para A = 182 e B = 30, 182 = 6 * 30 + 2 Quociente = 6, Resto = 2

[A = Bx + c] Para A = 18 e B = 3, 18 = 6 * 3 + 0 Quociente = 6, Resto = 0

Eis a função, usando recursão -- se preferir usar subtração troque os _r por _s para chamar as outras duas funções como está acima

int algoritmo(int dividendo, int divisor)
{
    int quociente = x_div_r(dividendo, divisor);
    int resto =     x_mod_r(dividendo, divisor);
    printf("\n[A = Bx + c] Para A = %d e B = %d, %d = %d * %d + %d Quociente = %d, Resto = %d\n",
        dividendo, divisor, dividendo, quociente, divisor, resto, quociente, resto);
}

Eis o programa de teste todo

#define            _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int        algoritmo(int dividendo, int divisor);

int        x_div_r(int, int);    // retorna a / b recursao
int        x_div_s(int, int);    // retorna a / b subtracao

int        x_mod_r(int, int);    // return a % b recursao
int        x_mod_s(int, int);    // return a % b subtracao


int main(int argc, char** argv)
{
    algoritmo(182, 30);
    algoritmo(18, 3);
    return 0;
}


int  algoritmo(int dividendo, int divisor)
{
    int quociente = x_div_r(dividendo, divisor);
    int resto =     x_mod_r(dividendo, divisor);
    printf("\n[A = Bx + c] Para A = %d e B = %d, %d = %d * %d + %d Quociente = %d, Resto = %d\n",
        dividendo, divisor, dividendo, quociente, divisor, resto, quociente, resto);
}

int x_div_r(int a, int b)
{
    if (b > a) return 0;
    return 1 + x_div_r(a - b, b);
};    // x_div_r()


int x_div_s(int a, int b)
{   int n = 0;
    while (a >= b) { a = a - b, n = n + 1; };
    return n;
};    // x_div_s()


int x_mod_r(int a, int b)
{
    if (a < b) return a;
    return x_mod_r(a-b, b);
};    // x_mod_r()


int x_mod_s(int a, int b)
{
    while (a >= b) a = a - b;
    return a;
};    // x_mod_s()

Espero que ajude

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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