Dúvida Iniciante

9 respostas Resolvido
Delthaisy

A questão é descobrir o que esse programa faz??
Não consigo encontrar o erro dele…
já mudei tanta coisa mais não funciona, como não funciona, logo eu não sei o seu propósito.

me ajudem por favor

Obrigado!

#include <stdio.h> //É um arquivo cabeçalho, Biblioteca de entrada e saída.
#include <stdlib.h>//É um arquivo cabeçalho, Biblioteca de propósito geral padrão.
#define MAX 50 //Declaração da constante.

int main(int argc, char * argv[]){ //função main e os parâmetros.
int num, aux_num; //Declaração das variáveis inteiro "nun" e "aux_num."
int vet_bin[MAX]; // vetor de MAX posições para guardar o número em binário.
int i = 0, j; //declaração da variável i e j, sendo que i recebendo 0.

printf ("Digite um numero em decimal:"); //exibe uma mensagem na tela solicitando que digite um numero

scanf ("%d", &num); //caputura um número inteiro digitado no teclado e armazena em  variável "nun".

aux_num = num; // aux_mun recebe "nun".

while (num > 0) //Estrutura de repetição while com a condição "num"  maior que "0".


vet_bin [i] = num % 2; // obtém o resto da divisão de num por 2
            i++; // incrementa 1 para variavel "i"
            num = num / 2; //"num" recebe "nun dividido por 2"

printf ("%d = : ", aux_num); // Exibe resultado de aux_num

// percorre o vetor para mostrar o número em binário.
for(j = i - 1; j >= 0; j--) //"j" recebe "i" menos 1, compara se ele é maior ou igual a zero  e decremento em j.

            printf("%d", vet_bin[j]);  // exibe resultado vet_bin[j]. Mudando o valor de vet_bin[] a cada decremento     de j.

printf("\n"); // pula uma linha

printf("\n"); // pula uma linha

getch(); //Espera uma tecla ser digitada.

return 0; // Retorna zero.


}

9 Respostas

Erik_Gabriel

Olha eu tambem sou novo nisso e nao entendo muito nao. Mas percebi que vc tem um erro. Se vc for usar o getch adicione na library:

#include <conio.h>

O compilador nao mostrara o erro do catch, mas ainda n funciona o programa. Sorry.

Delthaisy

Obrigado pela ajuda…

adicionei a biblioteca mas o programa não funciona…

Interessante que não tem arquivo externo para essa linha a baixo

#define MAX 50

Max 50 é nativo??

rapaz já tentei de tudo… e olhe que eu não que só procuro ajuda nas ultimas… rsrs

TerraSkilll
Solucao aceita

Qual o objetivo do exercício? É pra dizer o que falta pro programa funcionar ou é pra dizer o que o programa faz?

Dica: o programa precisa sim de um pequeno ajuste para funcionar, e o que ele faz está escrito nos comentários do código :wink:

Abraço.

Delthaisy

Fala TerraSkill,
Cara fiquei muito feliz com sua dica… vou fuça, gosto muito de programação mas meus conhecimento se resume com tags HTML e lógica de programação…

Delthaisy

Resolvi Galera…quero só saber se estou certo…

o Programa faz: Converter decimal para binário

E estava faltando algo no comando while()…era deixar as instrução dele dentro chaves “{}”.

Bom quero saber se é isso mesmo, ou é alguma coincidência?

Obrigado!

A

Muito bom

[/quote]

Declaração de constante do tipo inteiro

Sim, esse foi o objetivo da codificação.
O algorítimo tem a função de representar um número com o seu correspondente binário.
O principal problema identificado foi o recuo confuso no while, assim foi necessário delimitar a instrução com { }, por isso estava entrando em loop.

Dei uma arrumada na codificação, para ficar mais apresentável.

#include <stdio.h> 
    #include <stdlib.h>
    #include <conio.h>//faltava esta biblioteca
    #define MAX 50 //Declaração da constante do tipo inteiro

int main(){ //incio
    int num, aux_num = 0;
    int vet_bin[MAX]; //vetor com 50 posições
    int i = 0, j; //variávei i inicia em 0, a j não foi inicializada
    
    printf ("Digite um numero em decimal:");
    scanf("%d", &num); //caputura um número inteiro digitado no teclado e armazena em  variável "num".
    printf("%d",num);
    aux_num = num; // aux_mun recebe "num".
    
    while(num > 0){ //enquanto a variável num > 0 repita
        vet_bin[i] = num % 2; //o vetor é binario pois so aceita 0 ou 1, por ser o resto da divisão
        i++; //incremento
        num = num / 2; //em algum momento num será igual a 0, saindo do laço
    }  
    printf ("\n%d = : ", aux_num);//valor binário que nao foi alocado no vetor binário, mas faz parte do resultado
    
    //percorrendo o vetor de traz pra frente, lembrando que a última posição apenas indica o fim do vetor
    for(j = i - 1; j >= 0; j--)
        printf("%d", vet_bin[j]);//mostrando o dado armazenado no vetor
    printf("\n"); //quebra de linha fora do for
    printf("\n"); 
    getch(); //Espera uma tecla ser digitada para sair da aplicação.
    
    return 0; // Retorna zero quando a execução foi bem sucedida.
}
TerraSkilll

Isso mesmo! :wink:

As chaves costumam ser problema quando se esquece. Diria que é bom sempre adicionar, para evitar esquecer e ter problemas como esse, mesmo quando o laço tem uma linha só.

Abraço.

Delthaisy

Obrigado addller, explicou em miúdos!

Com todas essas explicações, me senti em uma sala de aula tirando todas as dúvidas com o professor…
Só reforça a minha tese que, somente a pratica trás a “perfeição”…

Obrigado!!!

Delthaisy

TerraSkilll
Sua dica de ouro aguçou a minha curiosidade em descobrir qual era o ajuste que faltava.

ficou muito claro que preciso de mais atenção no código fonte.

Tudo resolvido e explicado!!!

Criado 3 de junho de 2017
Ultima resposta 3 de jun. de 2017
Respostas 9
Participantes 4