paulo1205
(usa Ubuntu)
Enviado em 14/11/2012 - 19:31h
JoaoCCC escreveu:
paulo1205 escreveu:
A cada algarismo que você encontrar, multiplique o valor anterior por dez e some o valor do novo algarismo.
Não entendi colega. Estou trabalhando com caracter, como vou multiplicá-lo por 10? A tabela ASC só vai até 255.
Se não quizer ajudar não escreva, tá.
Sua falta de educação e ingratidão explícitas revelam a limitação que você tentou esconder ao se gabar de que sabe um bocado de C, fora a parte de arquivos. Apesar disso, eu queria ajudá-lo e, na verdade, continuo querendo. Por isso mesmo, dei a você uma informação correta na mensagem anterior e continuarei, agora, a tratá-lo com toda a paciência paternal que tenho. Só que, agora, em lugar de relevar pacientemente os erros que você cometeu em sua primeira mensagem, vou corrigir, item por item, todos os erros (exceto os de digitação, para não cansar nenhum de nós com algo meramente acidental) de suas duas mensagens, como um paizão que deseja ver sua prole rica em conhecimentos corretos, para não "pagar mico" na frente de estranhos.
Seu primeiro tropeço foi colocar, no título do tópico, "Caracter". Essa palavra -- a não ser como neologismo incorporado recentemente por alguns dicionaristas, por causa da ignorância da língua compartilhada com você por uma grande massa de profissionais de informática -- não existe em língua portuguesa. O certo, em Português, é
caráter, cujo plural é
caracteres.
Ainda com referência a essa palavra e à ideia que você transmitiu ao colocá-la no título, você deveria saber que converter de caráter para inteiro em C é trivial, já que um caráter
é um inteiro. Eu sei que você quis dizer "string" ou "sequência de caracteres", e até respondi anteriormente tendo o sentido que você quis dizer realmente. Mas você tem de saber que nem um compilador nem muitas áreas da vida vão inferir o que você tenha querido dizer, mas somente aquilo que você disser.
No campo da língua, há outros problemas. A pontuação está sofrível, com omissão de vírgulas para vocativos, orações coordenadas separadas por ponto e pergunta sem ponto de interrogação. Você errou a pessoa do verbo ter em duas ocasiões, usando a terceira pessoa do singular quando deveria ter usado a primeira, já que estava falando de algo que você mesmo tinha
de fazer (aliás, tem-se "de fazer", não se tem "que fazer"). E há ainda esse famigerado "quizer", com um bárbaro "z" no lugar do "s".
Você também está errado sobre a tabela ASC
II (não é somente "ASC", e "II" não é o numeral dois em sistema romano, mas as duas letras finais da abreviatura de
American Standard Code for Information Interchange), pois ela numera seus elementos de 0 a 127, não 255.
Por fim, quanto ao algoritmo, ainda algumas correções antes de fazer o desenho para você. Como um caráter é, sim, um inteiro, você poderia tranquilamente multiplicá-lo por 10. Mas não faria sentido e, por isso mesmo, não foi o que eu disse. O que eu disse, literalmente -- não há "quis dizer" nesse caso --, foi "valor do novo algarismo". O caráter "1", por exemplo, tem código 49 na tabela ASCII, mas o algarismo 1 tem o valor unitário sempre, pois não tem qualquer relação direta com ASCII, EBCDIC ou Unicode, nem qualquer outra tabela de símbolos existente ou a existir.
Assim sendo, o que eu lhe propus foi um algoritmo que acumulasse (somasse) os valores dos sucessivos algarismos depois de extraídos da string numérica, desde que, a cada novo algarismo, o valor acumulado anteriormente fosse multiplicado por dez. O que faz uma função como
atoi() ou como
strtoul() (não sei, aliás, por que motivo você não as utilizou) é, simplificadamente, mais ou menos o seguinte.
char *digit_str, *p;
int val;
/* ... */
for(val=0, p=digit_str; isdigit(p); p++)
val=10*val+(*p-'0');
O "truque", que de truque nada tem, é valer-se do fato de que os símbolos referentes aos algarismos ocupam posições contíguas na tabela de caracteres, ordenadas da mesma maneira que os algarismos. Como os caracteres são inteiros, '0'-'0'==0, '1'-'0'==1, '2'-'0'==2, e assim por diante, até '9'-'0'==9 (se você usasse um conjunto de caracteres exótico, poderia ter de expandir a expressão numa série testes com o operador ternário, ou vários
ifs encadeados com
else, ou mesmo
switch, mas eu duvido que você encontre um conjunto de caracteres assim -- e acho que ninguém seria louco de criar algo desse tipo).