Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Faulk_08

[C] Char to Int

Mensagens Recomendadas

pedrosorio    5
pedrosorio

É um problema interessante. Basicamente tens que pensar como é que TU passas da representação visual de um número (em base 10, geralmente) para aquilo que o número significa.

Dica: Lembra-te da primária - casa das unidades, casa das dezenas, casa das centenas... etc. etc.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Faulk_08    0
Faulk_08

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num,i,num_total;
for(i=0;i<=MAX_DIGITOS;i++){
num+=n[i]-'0';}
num_total=num;
return num_total;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
} 

Epa ja tenho isto feito...so que nao tou a conseguir desenvolver...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Na função n_inteiro() faltam-te três coisas.

a) Falta-te inicializar 'num'

:) falta-te fazer as contas bem dentro do ciclo :)

Supondo que tinhas a instrução num = 0; antes do ciclo, vamos ver o que acontece com n = "493" ...

num += n[0] - '0';  // num += 4 // num = 4

num += n[1] - '0';  // num += 9 // num = 13

num += n[2] - '0';  // num += 3 // num = 16

num += n[3] - '0';  // num += -48 // num = -32

num += n[4] - '0';  // num += LIXO // num = LIXO

...

c) falta-te parar o ciclo no sítio certo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Faulk_08    0
Faulk_08

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num=0,i;
for(i=0;n[i]!='\0';i++){
num+=n[i]-'0';}
return num;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
}

Ja tenho isto...So que agora soma-me os numeros.So que agora nao tou a ver como chego ao numero como estava em char???

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Estás no bom caminho. Só tens que te lembrar do que te disse... Os números não valem todos o mesmo. O algarismo '4' na casa das centenas vale 400, por exemplo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

a) e c) resolvido!

Falta o :)

num += n[0] - '0'; // num += 4 // num = 4

/* o que é que falta aqui? */

num += n[1] - '0'; // num += 9 // num = 49

/* o que é que falta aqui? */

num += n[2] - '0'; // num += 3 // num = 493

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

E assim, olhando para isso de outra maneira?

(0) + 4 = 4

(4 * 10) + 9 = 49

(49 * 10) + 3 = 493

...

(493 * 10) + 7 = 4937

(4937 * 10) + 0 = 49370

(49370 * 10) + 1 = 493701

...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Faulk_08    0
Faulk_08

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num,i,j,conta=0;
for(i=0;n[i]!='\0';i++){
num=(n[i]-'0');
conta=(conta*10)+num;
}
return conta;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
}

Ja esta feito.Obrigado pelas vossas dicas.

Fiquem bem

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Tirando o gets(), o teu código tem uma ligeiro problema:

o tipo 'int' não consegue suportar números com 80 digitos. No meu compilador preferido, com as minhas opções preferidas, o tipo 'int' consegue trabalhar com números desde -2147483648 a 2147483647.

Se tiveres que trabalhar com números fora do intervalo que o tipo 'int' aceita no teu compilador, tens que arranjar soluções mais complicadas.

Agora o gets()!

NUNCA USES gets()

esta mensagem minha noutra tópico.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade