Kabs 0 Denunciar post Postado Janeiro 14, 2013 Começei a estudar programação há 3 semanas e travei nessa questão:Um programa que receba como entrada um numero inteiro N (1000 < N < 9999) em seguida imprima a quantidade de dígitos pares e ímpares que compões aquela numero, desprezando-se o zero. Obs: onde tem < é menor ou igual. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Janeiro 14, 2013 Você já iniciou a construção do seu algoritmo? Em que parte ficou travado? Compartilhar este post Link para o post Compartilhar em outros sites
Kabs 0 Denunciar post Postado Janeiro 14, 2013 Você já iniciou a construção do seu algoritmo? Em que parte ficou travado? Cara como to vendo programação pela 1º vez na vida e to aprendendo com C to bem travadão mas aqui vai o codigo. Tipo as funções que aprendi até agora foi if, else, switch-case #include <stdio.h> #include <stdlib.h> int main() { int num1[5], par[5],impar[5]; //Entrada do numero de 4 digitos printf("Digite um numero entre 1000-9999:\n"); scanf("%d", &num1); if(num1<1000 || num1>9999) //Condição de existência { printf("Numero Invalido"); } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Janeiro 14, 2013 Aqui tem uma discussão sobre como verificar a quantidade de dígitos em um número: http://stackoverflow.com/questions/1847131/how-many-digits-in-this-base Leia até o final, porque existem comentários que analisam as respostas anteriores. Um deles menciona a diferença de todas as soluções p/ ceil(log10(n)/log10(2)). Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Janeiro 25, 2013 #include <stdio.h> int ckdig (int n, int* p, int* i) { int d = 0; if(n < 0) n = -n; *p = *i = 0; while(n) { if((n % 2) == 0) (*p)++; else (*i)++; n /= 10; d++; } return d; } int main (int argc, char** argv) { int n, p, i, d; puts("Digite um número:"); scanf("%d", &n); d = ckdig(n, &p, &i); printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i); return 0; } Para saber apenas a quantidade de dígitos necessários numa conversão, use: d = logx( n ) / logx( b ) Onde: n é o número na base decimal, deverá ser arredondado; b é a base do sistema de numeração, este para qual o número será convertido; d é a quantidade de dígitos que serão necessários para representar n, no sistema de numeração de base b; x pode ser qualquer número, ou seja, log10, log2, ln, etc. Está formula vem do seguinte principio: Como x = logb( n ) é equivalente a bx = n e sendo b a base do sistema de numeração de n, x representará a quantidade de digitos de n, veja: log(255) = 2,40654018 ≅ 3, pois não há como existir 0,4 digito. log2(1111 1111) = 7,994353437 ≅ 8 log16(FF) = 1,998588359 ≅ 2 Deveras não é prático usar log16 ou logx, para tornar mais prático o uso dos logaritimos, vamos usar a fórmula de mudança de base: logb( x ) = loga( x ) / loga( b ) Então chegamos a fórmula: d = logx( n ) / logx( b ) Por isto que é bom gostar de matemática! Boa sorte! Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Janeiro 25, 2013 Correção: #include <stdio.h> int ckdig (int n, int* p, int* i) { int d = 0; if(n < 0) n = -n; *p = *i = 0; while(n) { if((n % 2) == 0) (*p)++; else (*i)++; n /= 10; d++; } return d; } int main (int argc, char** argv) { int n, p, i, d; puts("Digite um número:"); scanf("%d", &n); d = ckdig(n, &p, &i); printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i); return 0; } Para saber apenas a quantidade de dígitos necessários numa conversão, use: d = logx( n ) / logx( b ) Onde: n é o número na base decimal, deverá ser arredondado; b é a base do sistema de numeração, este para qual o número será convertido; d é a quantidade de dígitos que serão necessários para representar n, no sistema de numeração de base b, deverá ser arredondado; x pode ser qualquer número, ou seja, log10, log2, ln, etc. Está formula vem do seguinte principio: Como x = logb( n ) é equivalente a bx = n e sendo b a base do sistema de numeração de n, x representará a quantidade de digitos de n, veja: log(255) = 2,40654018 ≅ 3, pois não há como existir 0,4 digito. log2(1111 1111) = 7,994353437 ≅ 8 log16(FF) = 1,998588359 ≅ 2 Deveras não é prático usar log16 ou logx, para tornar mais prático o uso dos logaritimos, vamos usar a fórmula de mudança de base: logb( x ) = loga( x ) / loga( b ) Então chegamos a fórmula: d = logx( n ) / logx( b ) Por isto que é bom gostar de matemática! Boa sorte! Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Janeiro 26, 2013 /* Copyright 2013 Mateus G Pereira Licença: GNU GPL v3 ou maior http://www.gnu.org/licenses/gpl.html */ #include <stdio.h> int ckdig (int n, int* p, int* i) { int d = 0; if(n < 0) n = -n; *p = *i = 0; while(n) { if((n % 2) != 0) (*i)++; else if((n % 10) != 0) (*p)++; n /= 10; d++; } return d; } inline int _abs (int n) { return (n < 0) ? -n:n; } int digits (int val, int base) { register int digs = 0, n; n = _abs(val); do { n /= base; digs++; }while(n); return digs; } int main (int argc, char** argv) { int n, p, i, d; puts("Digite um número:"); scanf("%d", &n); d = ckdig(n, &p, &i); printf("Dentre os %d dígitos, há %d pares e %d ímpares.\n", d, p, i); printf("Correto? %d = %d?\n", d, digits(n, 10)); return 0; } Algumas correções no código. Compartilhar este post Link para o post Compartilhar em outros sites