Ir ao conteúdo

Posts recomendados

Postado

E aí pessoal, tudo beleza?

Eu preciso de ajuda na criação de um programa em C++ (Não esperem muito de mim, pois sou ainda completo iniciante O_o)

A tarefa é o seguinte:

1) Desenvolver um programa para o cálculo de números decimais em binário. Depois ampliar o programa para que o mesmo calcule o tal número decimal em outros sistemas, mas para o caso de essa transposição não tornar-se tão complicada, devo limitar-me às bases entre 2 e 9. O número decimal a ser calculado deve ser limitado ao tamanho 65535.

 

O que eu fiz até o momento foi o seguinte:

 

#include <iostream>

using namespace std;

int main()
{
    int num, position = 0;

    // o Array para salvar o resto
    int resto[16];
    //o Array será ocupado com 0
    for(int index = 0; index < 16; index++)
        resto[index] = 0;

    //ler o valor
    do{
        //introduzir em uma linha
        cout << "Digite o numero a ser calculado (max. 65535):  ";
        cin >> num;
    }while (num > 65535);

    //o laço
    do{
        //Armazenar o resto da divisão
        resto[position] = num % 2;
        //ir para a próxima posição
        position++;
        //Dividir por 2 e novamente atribuir
        num = num / 2;
    }while (num != 0);

    //dar o resto de trás para frente
    for(int index = 15; index >= 0; index--){
        cout << reste[index];
        //adicionar um espaço vazio a cada quatro números
        if(index % 4 == 0)
            cout << " ";
    }

    return 0;
}


 

Daqui para frente já tentei algumas coisas mas não tenho ideia de como prosseguir. Eu penso em colocar tipo:

 

cout << "Em qual sistema voce deseja converter o numero decimal?" //Como tenho de me limitar à questão da base entre 2 e 9

a = 2

b = 3

c = 4

d = 5

e = 6

f = 7

g = 8

h = 9

 

Quando a pessoa escolher em que tipo de base deve ser o número decimal convertido, o 'cin' deveria imprimir uma das opções do Menu acima.

 

Depois disso não sei como partir para adicionar o código com as conversões. Demorou para fazer o que fiz. Que eu tenho de usar: switch?

 

Obrigado se puderem ajudar!

 

 

 

 

Postado

     A solução para conversão DECIMAL to BINÁRIO eu  entendi,  só  não  entendi   se  após  a primeira solução as demais soluções devem vir de BINÁRIO to X, ou seja, um vez convertido para  binário  será  de  binário para as outras bases conforme as opções do menu.

Postado

carase tu seguir esse algoritmo em portugol se consegue fazer só transformar para a sua linguagem

algoritmo "conversão em hexadecimal"
// função :  converter número decimal em hexadecimal
// autor :   marcos vinicius
// data : 
// seção de declarações
var
   tabela: vetor[0..15] de caracter
   h: vetor[0..5] de caracter
   aux: vetor[0..5] de caracter
   op,num, cont,i:inteiro
   hexad: caracter
   resto: inteiro

inicio
        tabela[0]<- "0"
        tabela[1]<- "1"
        tabela[2]<- "2"
        tabela[3]<- "3"
        tabela[4]<- "4"
        tabela[5]<- "5"
        tabela[6]<- "6"
        tabela[7]<- "7"
        tabela[8]<- "8"
        tabela[9]<- "9"
        tabela[10]<- "a"
        tabela[11]<- "b"
        tabela[12]<- "c"
        tabela[13]<- "d"
        tabela[14]<- "e"
        tabela[15]<- "f"

      repita
         escreval("1 converter numero:")
         escreval("0 sair")
         escreval("sua opção:")
         leia (op)

         escolha op
         caso 1
            hexad<-""
            cont<-0
            escreval("dite um numero:")
            leia(num)
            escreval("-------------------------------")
            se (num <= 99999) e (num >=0)então
               enquanto num>0 faca
                  escreval("quociente: ",num)
                  resto<- (num mod 16)
                  num<- (num \ 16)
                  hexad<- tabela[resto]+hexad
                  h[cont]<- tabela[resto]+h[cont]
                  cont<-cont + 1
                  escreval("resto da divisao: ",resto)
               fimenquanto
               escreval("---------------------------")
               cont<-0
                 para i de 0 ate 5 passo 1 faca
                    se(h[5-i]<>"")então
                      aux[cont]<-h[5-i]
                      cont<-cont + 1
                    fimse
                fimpara
                escreva("vetor: ")
                para i de 0 ate 5 passo 1 faca
                se(aux[i]="")então
                  aux[i]<-"0"
                fimse
                 escreva(aux[i])
                 h[i]<- ""
                 aux[i]<- ""
                fimpara
                escreval()
               escreval("hexadecimal: ", hexad)
            senao
                 escreval("numero invalido!")
            fimse

         caso 0
            escreval("sair")
         outrocaso
            escreval("opção invalida:")
         fimescolha
      ate op = 0

fimalgoritmo

 

adicionado 1 minuto depois

é apenas uma base

Postado

@santos container Boa tarde, e a todos

     Como mencionado  há  necessidade de  uma função que seja flexível na base de conversão, portanto, abaixo segue um programa que lhe traz a possível solução sem  muitos  requintes,  entretanto,  não deixe de fazer perguntas sobre as etapas do programa. Não inclui manual trace de caso pensado.

 

Code

/* File: tryTask,Author Mauro Britivaldo, date 12-11-2016 */
#include <stdio.h>

/* Universal Convert */
int decimal_to_convert( unsigned int decimal, unsigned int base );
char* base_type( unsigned base );
int main( void )
{

  /* Test */
  (void)decimal_to_convert( 255,2 );
  return 0;
}


int decimal_to_convert( unsigned int decimal, unsigned int base )
{
  if( base > 9 )return decimal;

  int intSlot = 1, intBaseConvert = 0;
  unsigned int  buff = decimal;

  while( buff )
  {
    intBaseConvert =  ((buff % base * intSlot) + intBaseConvert);

    buff = buff / base;
    intSlot = intSlot * 10;
  }

  printf( "Converting 10x%d to %s%d\n", 
         decimal,base_type( base ),intBaseConvert );
  return 0;
}


char* base_type( unsigned base )
{
  switch( base )
  {
    case 2: return "2x";
    case 3: return "3x";
    case 4: return "4x";
    case 5: return "5x";
    case 6: return "6x";
    case 7: return "7x";
    case 8: return "8x";
    case 9: return "9x";
  }
  return "";
}

TryTask.jpg

Postado

@Mauro Britivaldo O_o Caramba, eu estou de folga hoje e amanhã. Vou tentar entender ao pé da letra o que você escreveu hehe. Na escala de 1 a 5, qual o nível de dificuldade desse tipo de programa para um iniciante? Só pergunto por quê no curso que faço a questão mais difícil (que não era difícil) do 4º livro eu teria de fazer um programa que calculava a área de um terreno e daria o preço ao final (algo que até eu considero bem simples). Agora essa é a segunda prova e a primeira questão era sobre uma tabela verdade !(A||B) e deu tudo certo. A segunda questão é essa do 'decimal para outros sistemas'. Caso a terceira não der certo posto também. Com o burrogol  não deu certo tudo sobre o lance de conversão por isso dou mais valor ao código em inglês :D. Até mais tarde.

Postado

@Mauro Britivaldo Opa, eu acabei de dar uma lida no programa e testei e fiz a modificação que faltava para funcionar. Agora só transformar algumas coisas mas eu queria saber umas coisinhas:

 

#include <iostream>
#include <stdio.h>
using namespace std;


/* Universal Convert */

int decimal_to_convert( unsigned int decimal, unsigned int base );

char* base_type( unsigned base );

int main( void ) //Por quê o void dentro dos parênteses?
{

  /* Test */
  (void)decimal_to_convert( 255,8 );
  return 0;
}


int decimal_to_convert( unsigned int decimal, unsigned int base )
{
  if( base > 9 )return decimal;

  int intSlot = 1, intBaseConvert = 0; //A partir dessa linha de código eu não entendi o intSlot e o buff, poderia por favor comentar?
  unsigned int  buff = decimal;

  while( buff )
  {
    intBaseConvert =  ((buff % base * intSlot) + intBaseConvert);

    buff = buff / base;
    intSlot = intSlot * 10;
  }

   printf( "Converting 10x%d to %s%d\n", decimal,base_type( base ),intBaseConvert);

  return 0;
}


char* base_type( unsigned base ) //O que esse ponteiro e char vai armazenar? Uma vez que a conversão foi feita, o que teria de ficar armazenado se o programa termina...
{
  switch( base )
  {
    case 2: return "2x";
    case 3: return "3x";
    case 4: return "4x";
    case 5: return "5x";
    case 6: return "6x";
    case 7: return "7x";
    case 8: return "8x";
    case 9: return "9x";
  }
  return "";
}

 

Postado
2 minutos atrás, santos container disse:

int main( void ) //Por quê o void dentro dos parênteses?

     A que ponto teu professor esclareceu o proposito da função main, suponho que lhe foi dito que main

é função principal de qualquer programa. É um clichê esta definição, e por isso, mais  sucinta  e  100%  

mencionada desta forma:

     

Main pode ser escrita com outros cabeçarios o que lhe confere outras funções por exemplo;   

int main(int argc, char *argv[]) 
{
return (0);
}

Escrita como acima ela admite linha de comando E.i: no atalho [meuPrograma.exe "Faça isso"  "Faça

Aquilo" "Etc"], já deve ter visto algo assim no Counter Strike por exemplo.

     

     O void como parâmetro  do  main,  diz  explicitamente  que  este  código  não  possui  parâmetros  de

entrada  ou  linha  de  comando,  independente  de  sua  arbitraria  chamada  void  irá dispensar qualquer

tentativa. 

 

 

 

Referência

UFSC - Curso de C :: Os argumentos no main

Postado

Muito obrigado pela explicação. Eu não tenho professor a não ser para corrigir as provas que os alunos são obrigados a fazer durante o curso. Trata-se de uma universidade online que faço na Alemanha. Ao fim de cada livro existe uma tarefa (teste) com um determinado número de questões que devem ser enviadas ao professor responsável pelo curso. O aluno recebe a nota (de acordo com o sistema universitário daqui). Não todos conseguem responder assim como eu não consegui nessa questão. No mais, as apostilas não são completas mas o restante da ajuda procuro pela internet e hoje me comprei o livro do Stroustrup que por sinal ainda nem li. Assim que eu tiver o programa completamente da forma que me imaginava eu posto aqui como ficou.

Postado
1 hora atrás, santos container disse:

//A partir dessa linha de código eu não entendi o intSlot e o buff, poderia por favor comentar?

[...]
	int intSlot = 1, intBaseConvert = 0;
	unsigned int  buff = decimal;
[...]

     intSlot nos diz abertura ou casa, peqguemos por exemplo o número decimal 255, ela abita casas e estas casa são decimais, e se decompomos seguindo as regras decimais temos: 2 vezes 100 + 5 vezes 10 + 5 vezes 1. Após cada VEZES, XX é uma potencia de dez que organiza a magnitude unidades menores que a base, você ver 10 elevado 2 = 100, 10 elevado 1 = 10 e 10 elevado 0 = 1. Assim sendo, as demais bases devem ocupar o mesmo esquema que permitirá  tanto a impressão quando o réplica do valor convertido. Observe:

 

Convertendo 81 decimal para base 9:

decimal = 81, intSot = 1, intBaseConvert = 0;

buff = decimal; apenas para operar com outra variável que não decimal.

 

NO LOOP WHILE:

_____________________________

1 laço: buff = 81 logicamente TRUE 

intBaseConvert = ((81 resto de / 9 vezes 1) + 0); primeira casa = 0

 

buff = 81 dividido 9;

intSlot = 1 vezes 10;

____________________________

2 laço: buff = 9  logicamente TRUE 

intBaseConvert = ((9 resto de / 9 vezes 10) + 0); segunda casa = 0

 

buff = 9 dividido 9;

intSlot = 10 vezes 10;

____________________________

3 laço: buff = 1  logicamente TRUE 

intBaseConvert = ((1 resto de / 9 vezes 100) + 0); terceira casa = 1

 

buff = 1 dividido 9; será igual a 0

intSlot = 100 vezes 10;

 

_____________________________

4 laço: buff = 0  logicamente FALSE 

intBaseConvert = ((1 resto de / 9 vezes 100) + 0); terceira casa = 1

 

buff = 1 dividido 9; será igual a 0

intSlot = 100 vezes 10;

 

 

Fim da conversão.

Resultado 81 na base 9 é 100.

Se fosse de nosso interesse fazer a réplica deste valor para base decimal, faríamos assim:

0 vezes 9 elevado 0 + 0 vezes 9 elevado 1 + 1 vezes 9 elevado 2

                1 * 0          +                9 * 0           +        81 * 1

                                                   81

adicionado 7 minutos depois
1 hora atrás, santos container disse:

//O que esse ponteiro e char vai armazenar? Uma vez que a conversão foi feita, o que teria de ficar armazenado se o programa termina...

     Observando bem as bases para representação de magnitudes possuem siglas de no início vem nas escritas

E.i: hexadecimal é 0xFFF, Binário 0b1111, enfim o proposito é criar um string que acompanhe a conversão.

Contudo em nada ter haver com processo de conversão em si. 

Postado

Se eu tivesse a sorte de você ser meu professor :D ia tirar só 10. Muito organizado e explicação muito bem elaborada. Tem algum livro em inglês que poderia me indicar (para um iniciante) ou em português que eu vejo se alguém pode me enviar... Ou ficar com o do Stroustrup (que por sinal só vou começar a ler amanhã)? O link acima sobre o

 int main (int argc,char *argv[]);

é muito interessante. No início mesmo é citado 'a declaração mais completa'...como devo interpretar isso quando fizer um programa? Seria adequado sempre usar...ou não? Por enquanto vou usando esse cplusplus.com já tem muita coisa, mas não sempre mastigada :)

Postado

@Mauro Britivaldo Esse tópico é muito legal. Comecei meu curso nesse semestre e antes de mais nada tirei nota baixa era justamente essa questão, que eu em particular acho difícil para um iniciante. Tirando proveito da dúvida do cara, eu também queria saber uma coisa: printf( "Converting 10x%d to %s%d\n", decimal,base_type( base ),intBaseConvert ); como seria isso em C++(por que você nao colocou a iostream também??)? O 'buff' que você fez pode ser trocado por otura palavra? Ou isso é algo (de C ou C++ já prescrito)? To sem pc no momento para testar o programa, ate fim da semana recebo de volta.

Ainda vi online que algumas pessoas dizem que a pessoa deve sempre escolher a metódica de C++, ou seja, nesse caso usar o 'cout', caso esteja automaticamente trabalhando com C++. E também usar std::string ao invés de char*. Qual sua opnião quanto essas colocações? Você trabalha com programação ou é apenas hobby?

Postado

Boa tarde para Todos;

19 horas atrás, santos container disse:

Se eu tivesse a sorte de você ser meu professor :D ia tirar só 10. Muito organizado e explicação muito bem elaborada.

 

     Obrigado, ler estas declarações me deixa feliz! 

 

 

19 horas atrás, santos container disse:

em algum livro em inglês que poderia me indicar (para um iniciante) ou em português que eu vejo se alguém pode me enviar... Ou ficar com o do Stroustrup (que por sinal só vou começar a ler amanhã)?

     Seu curso é de programação com linguagem C++. No que toca a sintaxe C plus plus não tenho nada,

nada obstante se lhe despertar o interesse acerca da sintaxe do puro C; O C estrutural   e   procedural  a

origem de tudo, recomendo-te; Deitel - C, Como programar - 6ª edição,  há  692  páginas  envolvidas   de

apontamentos e exercício de problemas puro e aplicados usando C'11 (ou puro C).

Podendo baixar no link clicando no nome.

 

 

19 horas atrás, santos container disse:

é muito interessante. No início mesmo é citado 'a declaração mais completa'...como devo interpretar isso quando fizer um programa?

       Pela necessidade!  Isto  mesmo    se  há  necessidade  de  que  alguma  informação  externa  venha  a processa na entrada do programa, então esta declaração é mais  completa  porque  atenderá a demanda. Em contraponto a isto, se não há necessidade de linha de  comando na arrancada do programa então não há o porquê de usarmos a versão de 'a declaração mais completa'.

 

 

19 horas atrás, santos container disse:

Seria adequado sempre usar...ou não?

     Não, pois será sempre um desperdício nas circunstâncias que não há necessidade.

 

  

19 horas atrás, santos container disse:

Por enquanto vou usando esse cplusplus.com já tem muita coisa, mas não sempre mastigada :)

     Muito bem, e poderá sempre que necessário ter nossa ajudinha.

 

 

Obrigado @santos container

____________________________________________________________________________

 

 

10 horas atrás, Aldo Jean disse:

Tirando proveito da dúvida do cara, eu também queria saber uma coisa: printf( "Converting 10x%d to %s%d\n", decimal,base_type( base ),intBaseConvert ); como seria isso em C++(por que você nao colocou a iostream também??)? O 'buff' que você fez pode ser trocado por otura palavra?

     A função PRINTF, é parte do ouput /input da biblioteca de funções <stdio.h> da linguagem C. O equivalente encontrasse em C++ no <iostream> com função COUT. Tem-se o resultado desta permuta entre as sintaxes para declaração acima, algo tal qual assim:

#include <iostream>
#include <string>
string base_type( unsigned base );
cout <<"Converting 10x"<<decimal<<" to "<<base_type( base )<<intBaseConvert<< endl;

     BUFF, sim, tratasse de uma palavra qualquer muito usado por para nomear instâncias voláteis, você pode ver que alguns programmers utilizam para mesmo propósitos variáveis de outros nomes, a exemplo: aux,  assistant (...) entre outras mais que você também deve ter conhecimento.

 

 

10 horas atrás, Aldo Jean disse:

Ainda vi online que algumas pessoas dizem que a pessoa deve sempre escolher a metódica de C++, ou seja, nesse caso usar o 'cout', caso esteja automaticamente trabalhando com C++.

     Com relação a isto, sou categórico,  não dou ouvidos, minhasolução para os  problemas  podem     ter

 ambas  as  sintaxes,  salvo  as  condições  que  me  for  impostas,  ou  seja,  me  foi  atribuído     apenas

preposições e objetos da linguagem C++,  caso isto  não  esteja  explicito;  Permutar  entre  ambas     me

propulsionará soluções muito mais criativas.  Pessoalmente,  tudo  que diverge disso é corporativismo   e

regimentação azêmola, acredito que C não é totalmente ultrapassada, pelo contrario antes, além do mais

antes C++ tornasse binário seus códigos   'virão' C, e de C para assembly e daí por diante  até finalmente

0s e 1s. Então estaria no mínimo saltando uma etapa.

Obrigado @Aldo Jean 

____________________________________________________________________________

Postado
15 horas atrás, Aldo Jean disse:

@Mauro BritivaldoPow velho isso me tirou bastante dúvida que meu ***** de professor passa para a turma. Seria então mais viável ensinar C (primeiramente) ao invés de C++ O_o né

 

         Anteriormente nas faculdades, C foi por muito  tempo a  linguagem de programação  de  entrada,

ou seja, no ensino de algoritmos e programação inicial,  atualmente Portugol que ocupa   esta cadeira.

 

         Usando um pseudocódigo estruturado como portugol  nas  aulas  inciais  de  logica     ganhasse

em entendimento, parti para linguagem de programação orientada a objeto  depois de ensino da lógica

não é o    desperdício quanto  ensinar uma linguagem totalmente diferente, C e  C++ são  irmãs,    sim

e diferentes em tudo. Em C++, por exemplo usaremosuma cadeira, todas as  propriedades e métodos

estão prontos para serem usados conforme a necessidade do arquiteto, ou  decorador,  já em C,   não

é bem assim, já que o arquiteto e/ou decorador, aqui dentro de   minha  analogia, vai ter que criar     do

nada seu OBJECT, sua CADEIRA, e enfim usar uma cadeira em C'11, significa criar para depois usar.

E.i: string Object( 128 ), é diferente de char Array[ 128 ],  em  C  as  coisa  são  mais  primitivas,  pois

dentro de um string Object  há uma char Array[ ]  e  muito  mais,  é  basicamente   estudar   a  historia

da linguagem C++ ao embarca no autoconhecimento de C, ou estudo das células na biologia.

"C++ é o leite condessado de C":thumbsup:

@Aldo Jean

 

 

Referência

CW: A importância e as vantagens de saber programar em linguagem C

_____________________________

Postado

@Mauro Britivaldo O meu curso será baseado em: C++, C# und XAMPP (MySQL, PHP, Apache) assim como Windows Server 2012 R2, VMware e LEGO MINDSTORMS EV3 (o robozinho tem de ser montado e programado ao fim do curso). Depois desse semestre (que são 11 apostilas) então começo a ver C# (que será em média 50% a 60% do curso, totalizando 26 apostilas). Em breve venho com mais dúvidas.

Postado

@Mauro Britivaldo Oi, eu comecei recentemente (e vendo que você e o mestre por aqui :) ) um curso de c++ em uma escola de informática na minha cidade. Eu acho que vou comecar o curso de C em janeiro. Essa questao me despertou interesse e queria saber como você inverte esse trecho do programa

"

/* Test */ (void)decimal_to_convert( 255,2 ); return 0;

 

"

para algo a ser imprimido com cout e cin. Eu passei o programa e estou convertendo tudo para c++ mas como eu arranco essa parte e escrevo para dar entrada da informacao e testar na tela? Já tentei de algumas formas mas sempre dá errado :/ Valeu

Postado

@EltonEvo Sim, sou um dos mais frequentes, estou sempre em indas e voltas com a

LINGUAGEM  :tw_heart: C, é um vício gostoso!

 

Vamos lá!

int decimal_to_convert( unsigned int decimal, unsigned int base )
{
  if( base > 9 )return decimal;

  int intSlot = 1, intBaseConvert = 0;
  unsigned int  buff = decimal;

  while( buff )
  {
    intBaseConvert =  ((buff % base * intSlot) + intBaseConvert);

    buff = buff / base;
    intSlot = intSlot * 10;
  }

  //printf( "Converting 10x%d to %s%d\n", 
  //       decimal,base_type( base ),intBaseConvert );
  return intBaseConvert; /**< 1º Faça a função retorna o resultado,
                          *  ao invés de imprimir. 
                          **/
}
  /* Test */
  int ret = decimal_to_convert( 255,2 );
 
  cout << "Resultado: " << ret << endl;

 

Postado

Opa, já...

Mas eu acho que me expressei de forma falsa:

Eu quero fazer o seguinte:

 

Ao invés disso:

 

/* Test */ int ret = decimal_to_convert( 255,2 );

 

cout << "Resultado: " << ret << endl;

 

Quero:

 

cout << "Digite o numero a ser convertido: ";

cin >> (unsigned int a, unsigned int b); // 'Essa coisinha' haha, como faço para que eu a ponha em uso nessa linha...

 

Quero que o usuário digite o número para a conversão e o chame com o cin.

O teste nem é importante (pois assim mesmo é apenas um teste hehe)

Postado
//Start( ... )
/**< Declare 3 variáves: decimal, base e ret. */
unsigned int decimal, base, ret;

/**< Faça a chamada para leitura de dados: Mensagem. */
     cout << "Entre com numero e base (numero base): "
     cin >> decimal;
     cin >> base;

/**< Processando dados: decimal to base. */
     ret = decimal_to_convert(decimal, base);
     
/**< Exibir resultado. */
     cout << "Resultado: " << ret << endl;

//End.

Faça tal qual acima.

Visitante
Este tópico está impedido de receber novas respostas.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!