noob de C... números inteiros e decimais | ZWAME Fórum
noob de C... números inteiros e decimais
Discussão em 'Programação' iniciada por Quazecotl, 17 de Novembro de 2007. (Respostas: 11; Visualizações: 2208)
Estou agora na universidade e comecei a dar c.
Tenho o primeiro trabalho que já encontrei várias formas diferentes de abordar, mas aquela que seria a mais perfeita é a que não consigo por em prática.
Basicamente, precisava de encontrar uma forma de ao introduzir um número, o programa ser capaz de distinguir se é um número decimal ou inteiro. (que depois iría comportar-se de diferentes maneiras consoante o resultado)
Fui ás aulas todas e não falamos em nada disto... mas com este professor acho que vamos ter mesmo de ser autodidatas.
Existem outras formas para fazer o trabalho mas isto era o melhor...
edit: btw, first post
já cá tive uma conta mas não me lembro dos dados....
Assim à primeira não me lembro de nenhuma função que faça esse teste, podes fazer uma coisa por exemplo:
/* Les o numero para a variável numero*/
if (numero == 0) { printf("é inteiro"); }
else { printf("é decimal"); }
Não sei se funciona, mas acho que sim ^^
É uma maneira um bocado fraquinha, mas pronto dá para o gasto
Para verificares se um nº é decimal podes fazer o seguinte:
- Recebes o tal nº como parâmetro da função
- Fazes o cast desse número para int e de seguida subtrais o nº inicial ao nº obtido com o cast
- Se o resultado dessa operação for positivo, então o nº é decimal, caso contrário não é
Isto é uma das formas, penso que também dá para fazer usando o quociente/resto da divisão por 10, vou ver se consigo fazer...
@Sharkarp
acho que tens aí uns erros mas percebi a ideia e adptei
temp=numero;
if (temp == 0) { printf("é inteiro"); }
substituí o "temp" por "numero" no loop porque se não ficava infinito, e substitui os doubles por floats porque (não sei bem porquê...) estava a fazer o loop até ao -1 e depois saltava sempre para o else, e agora já está a funcionar direitinho.
Um problema que pode nascer daqui é que só dá para aplicar aos números positivos, mas fazendo outro loop com "while (numero<0){numero++;}" já deve ficar resolvido.
já tinha pensado numa coisa desse género mas não sei fazer "cast" (nem exactamente o que é, ainda estou no inicio...), nem sabia que dava para fazer... já arranjei solução para o problema, mas se puderes dizer como faço isso agradecia, mais fico a aprender
void dec(float x) {
int z; float res;
res=x-z;
printf("Decimal\n");
else printf("Inteiro\n");
A operação de casting encontra-se em: z = (int)x.
O que isto faz é promover temporariamente a variável float x a int. Ou seja se tiveres x=2.6, fazendo o casting (int) x, vais obter x=2 (não há arredondamentos por defeito nem excesso).
Portanto o que o código acima faz é:
- Recebe uma variável do tipo float
- Faz o cast para int para obter apenas a parte inteira desse número
- Subtrai o nº original à sua parte inteira
- Se o resultado for positivo, isto é, por exemplo: 2.6 - 2 = 0.6 > 0, então o nº é decimal, caso contrário não é.
Afinal o que escrevi estava errado, pois o % não funciona para floats...my bad (sorry double post).
obrigado pela ajuda outra vez
Podes sempre fazer isto:
- lês o input para uma variavel string.
- procuras na string o caracter "." (separador decimal)
- se esse caracter existir, fazes uma substring do que está à direita do "." e verificas se é igual ou diferente de zero
- Se for igual a zero, ou se não existir "." é inteiro. Caso tenha o "." e a parte decimal for diferente de zero é decimal.
Já deram aqui a solução.
Vou só por isto em termos práticos...
if(num == (int)num)
printf("NOT INT\n");
EDIT: Agora já funciona.
tsenart disse: ↑
int isInt(double num)
Apenas disse mais uma maneira de fazer, que até nem é nada confusa. É um bom exercicio para treinar a manipulação de strings
Convém só considerar se , por exemplo, 2.0 é inteiro ou decimal.
if( (int) 2.0 == 2.0 ) // Verdadeiro
Pelo menos para a linguagem C escrever 2 é bem diferente de escrever 2.0, no primeiro caso é reconhecido como um int, no segundo como um float.