Comando itoa() [RESOLVIDO]

1. Comando itoa() [RESOLVIDO]

Manif
manif

(usa Ubuntu)

Enviado em 30/09/2013 - 23:14h

Boa noite pessoal, sou novo tanto em programação quanto aqui na cmm, é meu segundo poste, na verdade segunda duvida, então vamos la, sou bem novato em programação!

O rapaz que esta me ensinando C é um amigo virtual, e quase não entra, por isso venho aqui pedir vocês pra me ajudarem, ele pedio para fazer um programa para converter decimal para binários. Fiz o programa, não fiz sozinho peguei o comando itoa de um código ja feito na net, mas so foi isso mesmo o resto eu escrevi, mas a única coisa que eu aprendi sobre o itoa que ele converte o numero, queria saber mais, como ele funciona! Não acho legal eu passar o código para ele e não saber né !?

esse é o código!

gostaria que me explicassem sobre a variável char, e sobre o itoa(a,b,2);

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

main()
{
int a;
char b[10];


printf("Digite o numero decimal:\n ");
scanf("%d", &a);
getchar();

itoa(a,b,2);

printf("O numero %d binario e: %s ", a,b);

getchar();
return 0;
}

Grato!



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/10/2013 - 04:32h

Essa itoa() que aparece no código que você mostrou se parece com a implementação que havia nos antigos compiladores da Borland para o MS-DOS (Turbo C e derivados). Não existe função parecida com essa na biblioteca padrão da linguagem C, de modo que ela provavelmente não estará disponível em compiladores para Linux ou mesmo em muitos compiladores para Windows.

(A implementação da Borland, aliás, é ruim do ponto de vista de segurança. Note que, no seu programa, se você digitar um número maior que ou igual a 512, o seu programa vai dar pau na hora de executar, pois a conversão vai extrapolar o tamanho de dez caracteres do array b.)

A matemática envolvida para recriar essa função (de preferência tomando mais cuidado com a segurança da implementação) é simples; você só tem que lembrar alguns conceitos e assuntos que a gente aprende (ou aprendia, pelo menos no meu tempo) no primário mesmo.

A primeira coisa a trazer de volta para a mente é a diferença entre número e numeral. O número é uma grandeza matemática, e o numeral, uma forma qualquer de referir-se ao valor dessa grandeza. O décimo-sexto elemento do conjunto dos números naturais disposto em ordem crescente é sempre o mesmo número, quer eu me refira a ele como "15" (numeral usando algarismos indo-arábicos), "XV" (numeral romano), "quinze" (numeral cardinal em Português), "fifteen" (numeral cardinal em Inglês), "0xF" (notação hexadecimal da linguagem C), "1111" (numeral binário) ou até mesmo "décimo-sexto elemento do conjunto dos números naturais disposto em ordem crescente" (numeral ordinal em Português, com referência explícita ao conjunto dos números naturais, cujo primeiro elemento, é bom lembrar, é número cujo valor é zero).

No caso de itoa(), o parâmetro inteiro guarda um número, cujo valor será convertido para um numeral e armazenado numa string.

Outro elemento de conhecimento usado por itoa() é o de notação posicional para representação de um número. Isso era coisa que a gente via na quarta série (eu acho -- e acho que hoje se diz "quinto ano do ensino fundamental"), quando se apresentava e explicava o funcionamento da representação de números com algarismos indo-arábicos.

A notação posicional para numerais depende de conjunto finito de algarismos, que são símbolos associados a determinados valores absolutos, e da posição que cada algarismo ocupa no numeral, pois isso indica os valores relativos de cada um deles.

O funcionamento dessa notação é dado pelas seguintes premissas.

  1) Se o número de algarismos for n, os valores absolutos de cada um deles correspondem aos n primeiros números naturais (por exemplo: se usarmos dez algarismos, o valor do menor deles é zero e o do maior, nove).

  2) O valor relativo do algarismo é o produto do seu valor absoluto pelo valor absoluto da posição por ele ocupada no numeral.

  3) O valor absoluto de cada posição cresce exponencialmente da direita para a esquerda: a posição mais à direta tem o valor da unidade (um), e a cada posição deslocada mais à esquerda tem seu valor multiplicado pelo número de algarismos n.

  4) O valor relativo de cada algarismo usado na composição do numeral é o produto do seu valor absoluto pelo valor absoluto da posição que ele ocupa.

  5) O valor do número indicado pelo numeral é então a soma de todos os valores relativos da composição do numeral.

  6) Cada número corresponde biunivocamente a um possível numeral usando a representação num sistema de numeração posicional com n algarismos.

Assim sendo, quando se usam os algarismos indo-arábicos ("0", "1", "2", "3", "4", "5", "6", "7", "8" e "9"; dez ao todo), o numeral "2505" significa, literalmente, a soma de 2·10³ (valor absoluto dois, deslocado três posições para a esquerda a partir da posição da unidade, que resulta no valor relativo "dois vezes dez vezes dez vezes dez", ou "dois mil") com 5·10² (valor absoluto cinco, deslocado duas posições para a esquerda a partir da posição da unidade, que resulta no valor relativo "cinco vezes dez vezes dez", ou "quinhentos") com 0·10¹ (valor absoluto zero, deslocado uma posição para a esquerda a partir da unidade, que resulta no valor relativo "zero vezes dez", que é zero) com 5·1 (valor absoluto cinco vezes a unidade, já que esta é a posição mais à direita, que resulta o valor relativo "cinco" -- note que pode-se considerar que houve "zero deslocamentos à esquerda", e que dez elevado a zero realmente vale um).

Na quarta série se aprendia somente a notação posicional usando os dez algarismos indo-arábicos, mas note que as premissas acima enunciadas falam sobre uma quantidade de algarismos n qualquer, desde que n seja maior que ou igual a dois. Na oitava série, a gente aprendia sobre outros sistemas de numeração e mudança de base. Não raro os exercícios envolviam um conjunto de símbolos cujos algarismos eram "bolinha", "quadradinho", "tringulinho" e "cruzinha", ou coisa equivalente. Lembra de exercícios do tipo "Num sistema de numeração cujos algarismos são, em ordem crescente, "@", "#", "$", "%" e "&", qual o valor do numeral '%@&&$#'?" ou "Qual a representação do valor numérico cento e vinte e nove num sistema de numeração cujos algarismos são, em ordem crescente, 'A', 'B', 'C' e 'D'?"?

Pois, então: itoa() é essencialmente a implementação da solução do segundo exercício.

Se você se lembra, a solução do exercício é a seguinte:

  1) Começa-se na posição mais à direita.

  2) Divide-se o valor a ser convertido pelo número n de algarismos, guardando-se o quociente e o resto da divisão.

  3) O resto da divisão corresponde ao algarismo que ocupa essa posição.

  4) Se o quociente for zero, a conversão está encerrada.

  5) Caso contrário, desloca-se uma posição a esquerda.

  6) O valor a ser convertido passa a ser igual ao quociente.

  7) Volta-se ao passo 2.

Obviamente, uma implementação de itoa() teria de tomar cuidado com o tratamento de valores negativos.

3. Re: Comando itoa() [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/10/2013 - 08:59h

Olá "manif" !

Se quiser também poderei te dar uma força no seu aprendizado...

Uso a rede Windows Livre e se quiser te adiciono ... uso o Ebuddy; me envie um email informando que te add no "MSN".

gokernel@hotmail.com



4. Re: Comando itoa() [RESOLVIDO]

Manif
manif

(usa Ubuntu)

Enviado em 02/10/2013 - 09:38h

gokernel escreveu:

Olá "manif" !

Se quiser também poderei te dar uma força no seu aprendizado...

Uso a rede Windows Livre e se quiser te adiciono ... uso o Ebuddy; me envie um email informando que te add no "MSN".

gokernel@hotmail.com


Se você poder fazer isso cara, irei lhe agradecer muito!
Meu E-mail é cassiommn@hotmail.com me add no ebuddy!


5. Re: Comando itoa() [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/10/2013 - 10:58h

Sim cara vou te ad e não precisa agradecer.

OBS:
Tentei iniciar o eBuddy(para android) e não conectou na rede Windows Live ... quando conseguir conectar entao te adicionarei.


6. Re: Comando itoa() [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/10/2013 - 11:04h

Pronto adicionado!



7. Re: Comando itoa() [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/10/2013 - 13:17h


E como regra: "não me peça para fazer os seus trabalhos de faculdade totalmente para vc" . ;)

O objetivo eh de te ajudar... muitas vezes irei apenas te "mostrar como fazer".







8. Re: Comando itoa() [RESOLVIDO]

Manif
manif

(usa Ubuntu)

Enviado em 02/10/2013 - 13:34h

Não quero que me dê código pronto :)
Quero aprender, e assim não irei aprender muita coisa né ^^


9. Re: Comando itoa() [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/10/2013 - 22:38h

Publiquei no meu blog (http://unixntools.blogspot.com.br/) uma versão mais burilada da explicação que dei acima, acompanhada de código fonte em C com a implementação de my_itoa() (http://unixntools.blogspot.com.br/2013/10/tunel-do-tempo-funcao-itoa.html). Se quiserem, vejam, e se puderem, corrijam eventuais falhas minhas.

Atrasado, mas quiçá não perdido: itoa() não é um comando, mas uma função.


10. Re: Comando itoa() [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 05/10/2013 - 05:40h


E "Paulo" curti por vc divulgar o seu blog, já está na minha lista de sites...

Qualquer dia desses passo lá pra te "zoar". ;)

Quanto tempo faz que vc tem esse blog.?


11. Re: Comando itoa() [RESOLVIDO]

Arthur Rodrigues Stilben
gugarthur

(usa Fedora)

Enviado em 07/10/2013 - 17:37h

Se vc entende inglês, uma breve explicação: http://www.cplusplus.com/reference/cstdlib/itoa/






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts