Ir ao conteúdo

Posts recomendados

Postado

Meu programa nao roda:

 

Crie um procedimento que receba 2 números, calcule e imprima o MMC destes

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


int mmc(int num1, int num2, int a);
 int main ()
  {
    int resto, a, b, num1,num2;

    a = num1;
    b = num2;

    do {
        resto = a % b;

        a = b;
        b = resto;

    } while (resto != 0);

    return 0;
}
int mmc (int num1, int num2,int a)
{
    return( num1 * num2) / a;
}

números.

  • Curtir 1
Postado

@Laryssa Silva    exatamente , mas creio que você ainda não sabe o que é inicializar variáveis , 

int resto, a, b, num1,num2;  // aqui o compilador vai criar essas 
                             // variáveis , mas elas terão valores insabido
a = num1;                    // aqui a variáveL a receberá o valor de num1
                             // mas que valor será esse ? ninguém sabe !
b = num2;                    // aqui a mesma coisa

para criar uma variável , o compilador apenas reserva um espaço na memória ram e determina que aquela area se chama o nome da variavel , mas nessa area com certeza haverá algum valor guardado ali , e pode ser qualquer valor e ninguém sabe Qual é .  e então quando se diz para inicializar a variável seria algo assim 

int resto, a, b, num1=0,num2=1;  // inicializou num1 e num2 
                                 // resto a e b não precisa pois receberão valores em seguida
a = num1;                        // assim a variáveL a receberá o valor zero  
b = num2;                        // assim a variáveL b receberá o valor um

e outra coisa é que você em nenhum momento chamou e nem usou a função mmc   .

Postado
28 minutos atrás, Laryssa Silva disse:

Não seriam essas?

 

28 minutos atrás, Laryssa Silva disse:

int resto, a, b, num1,num2;

 

Bom palpite. Essas são todas as variáveis de seu programa afinal.

 

 

Quanto vale cada uma? O que representam? 

  • use nomes mais expressivos
  • enquanto estiver testando use valores fixos e significativos até ter os resultados esperados. Estamos falando de MMC então use algo como 20 e 1, 24 e 6, 12 e 24, coisas assim
  • decjare uma variável por linha. É o mesmo preço. E é melhor para você e seu programa
  • Curtir 1
Postado

@Laryssa Silva Tens as partes de uma resposta e fora de seus lugares. O procedimento é seu método sem necessidade de valor no retorno: "

Crie um procedimento que receba 2 números, calcule e imprima o MMC destes"

void mmc (int num1, int num2) {

	int resposta= 0, resto= 0, a= 0, b= 0;

	a = num1;
	b = num2;

	//... sequencia de divisoes sucessivas
  
	resposta= (num1 * num2) / a;
  
	printf ("%s%d%s",
	"Minimo Multiplo Comum ..: ", resposta, "\n");
}

 

  • Curtir 1
Postado

Digitando direto no bloco de notas o método do ensino fundamental:

 

12  15  18  |  2
 6  15   9  |  2
 3  15   9  |  3
 1   5   3  |  3
 1   5   1  |  5
 1   1   1  |  2*2*3*3*5 = 180

180 = 12 x 15
180 = 15 x 12
180 = 18 x 10

 

Faça o mesmo e não pode dar errado.

 

Antes de tudo escreva uma função que devolve o próximo numero primo, porque ajuda bem....

 

    int proximo_primo(); // a cada chamada devolve o proximo

 

é básico para esse método. Aí você entra com a lista de números e retorna o mmc como em 

 

    int    mmc ( int n, int val[] );

 

E pode chamar como em 

 

#include <stdio.h>

int    mmc(int, int[]);
int    proximo_primo();

int main()
{
    int m = mmc ( 3, (int[]){  12, 15, 18 } ); 
    printf("MMC calculado =  %d\n", m);
    return 0;
}

int    proximo_primo(){   return 0; };

int    mmc(int N, int val[])
{
    printf( "mmc(): %d valores: ", N);
    for ( int i = 0; i<N; i+=1 ) printf( "%d ", val[i] );
    printf("\n");
    return 1280;
};

 

Que já mostra 

 

ps > gcc -o tst -Wall -std=c17 xx.c
ps > ./tst
mmc(): 3 valores: 12 15 18 
MMC calculado =  1280

 

e pode ser um bom começo :) 

 

 

Note que como os números primos não costumam mudar ;) sempre se pode usar uma tabela ao invés de ficar calculando toda vez a mesma coisa para os mesmos resultados

Em muitos casos pode ser mais fácil deixar a lista de valores em aberto, como em printf() ou scanf() e usar um trem chamado varargs. Vou escrever um exemplo porque sei que não é comum. 

 

Um programa assim

 


int    mmc( unsigned, ... );

int main(void)
{
    printf("MMC calculado =  %d\n", mmc ( 3, 12, 15, 18 ) );
    printf("MMC calculado =  %d\n", mmc ( 2, 12, 15 ) );
    printf("MMC calculado =  %d\n", mmc ( 5, 12, 15, 18, 9, 10 ) );
    return 0;
}

 

o primeiro parâmetro de mmc()  é, claro, o número de argumentos. Os 3 pontos indicam o esperado, como em português: o resto dos argumentos

 

Rodando vem

 

ps > gcc -o tst -Wall -std=c17 var.c
ps > ./tst
mmc(): 3 valores: 12 15 18 
MMC calculado =  1280
mmc(): 2 valores: 12 15
MMC calculado =  1280
mmc(): 5 valores: 12 15 18 9 10
MMC calculado =  1280
ps > 

 

para esse código

 

#include <stdarg.h>
#include <stdio.h>

int    mmc( unsigned, ... );

int main(void)
{
    printf("MMC calculado =  %d\n", mmc ( 3, 12, 15, 18 ) );
    printf("MMC calculado =  %d\n", mmc ( 2, 12, 15 ) );
    printf("MMC calculado =  %d\n", mmc ( 5, 12, 15, 18, 9, 10 ) );
    return 0;
}

int    mmc(unsigned N, ...)
{
    va_list valores;
    va_start ( valores, N );
    printf( "mmc(): %d valores: ", N);
    for ( int i = 0; i<N; i+=1 ) printf( "%d ", va_arg ( valores ,int ));
    va_end (valores);
    printf("\n");
    return 1280;
};

 

Mas provavelmente o mais prático seria usar a linha de comando e um programa mmc assim
 

mmc 12 15 18

 

E o programa mostrar o tal MMC, sem frescura, interação ou leituras adicionais

 

PS> MMC 12 15 18
PS> MMC = 180
PS>
PS> MMC 2 4
PS> MMC = 4
PS>

 

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