elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37]
361  Programación / Programación C/C++ / Re: Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 8 Enero 2014, 22:44 pm
Hola.
Bueno al fin puedo demostrar con este programa lo quería lograr.-

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. void charAint(const char[], int* ,int);
  7. void intAbinario(int, int*);
  8.  
  9.  
  10. int main(){
  11. char numeroChar[11] = "";
  12. unsigned int ok=0, i=0, longitud=0, numero, *ptrNumero = &numero;
  13.  
  14.  
  15. do{
  16. system("CLS");
  17. ok=0;
  18. printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
  19. fflush(stdout);
  20. fgets(numeroChar, 12, stdin);
  21. longitud = strlen(numeroChar);
  22. numeroChar[longitud-1] = '\0';
  23. if(numeroChar[0] == '\0' || numeroChar[0] == '0'){
  24. ok=1;
  25. printf("\n El numero ingresado debe ser mayor a cero\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
  26. }
  27. else{
  28. for(i=0;numeroChar[i] != '\0'; i++){
  29. if(numeroChar[i] <=47 || numeroChar[i] >=58){
  30. ok=1;
  31. printf("\n Debe ingresar solo numeros\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
  32. break;
  33. }
  34. }
  35. if(ok==0){
  36. i=0;
  37. if(longitud-1 == 10 && numeroChar[0] >= 2){
  38. i=1;
  39. }
  40. else{
  41. charAint(numeroChar, ptrNumero, longitud);
  42. if(*ptrNumero > INT_MAX){
  43. i=1;
  44. }
  45. }
  46. if(i == 1){
  47. ok=1;
  48. *ptrNumero = 0;
  49. printf("\n El numero ingresado supero el maximo permitido\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
  50. }
  51. }
  52. }
  53. }while(ok == 1);
  54.  
  55. intAbinario(numero, ptrNumero);
  56.  
  57. return 0;
  58. }
  59.  
  60. void charAint(const char numeroChar[], int *ptrNumero, int longitud){
  61. unsigned auxiliar=0, i=0;
  62.  
  63. while(i < longitud-1){
  64. auxiliar = numeroChar[i]-48;
  65. *ptrNumero=10* *ptrNumero+auxiliar;
  66. i++;
  67. }
  68. }
  69.  
  70. void intAbinario(int numero, int *ptrNumero){
  71. char binario[33] = "";
  72. unsigned int i=0, j=0, k=0, temp=0;
  73. do{
  74. binario[i] = '0' + numero%2;
  75. numero = numero/2;
  76. i++;
  77. }while (numero != 0);
  78.  
  79. binario[i] = '\0';
  80.  
  81. for (j = 0, k = strlen(binario)-1; j < k; j++, k--){
  82. temp = binario[j];
  83. binario[j] = binario[k];
  84. binario[k] = temp;
  85. }
  86. printf("\n\n En decimal %u --> en binario = %s\n\n", *ptrNumero, binario);
  87. }

No acepta los siguientes ingresos:
- 0  o vacio
- s25 o 25s
- número mayor a INT_MAX

En cuanto a la función charAint se que existe atoi pero en este caso es para practicar con punteros y funciones.-
Espero sugerencias para optimizarlo, muchas gracias a todos los que participaron para ayudarme a lograrlo.-

Saludos
362  Programación / Programación C/C++ / Re: Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 7 Enero 2014, 14:59 pm
Hola.-
Simplemente es una práctica y una consulta para saber si mi idea tenía algún error y de hecho lo tiene, si se ingresa 10 cifras verificar que la primera sea =< a 2 porque si se ingresa 4294967296 tampoco cabe en un int sin signo.-
Cuando termine el código lo posteo para que algún recién iniciado como yo lo analice.-

Saludos
363  Programación / Programación C/C++ / Re: Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 7 Enero 2014, 14:31 pm
Hola.-
A ver qué les parece.-

- Si el numero tiene más de 10 cifras, entonces no cabe.
- Si el numero tiene menos de 10 cifras, entonces cabe.
- Si el número tiene 10 cifras y es mayor a 2.147.483.648  no cabe. 

Las 2 primeras son simples de verificar como si se ingresa 0, Enter sin haber ingresado nada o si se ingresó algo distinto a un número.-
La última lo haría de esta manera, sólo que tengo que elevar el resultado a la potencia correspondiente y desconozco como se hace, luego verifico si num es igual o menor a INT_MAX y estaría concluido (me parece).- 


Código:
#include <stdio.h>

int main(void){

char a[] = {2,1,4,7,4,8,3,6,4,9};
int i = 0;
unsigned int num=0;

while(i<=9){
num = num + a[i];
i++;
}

return 0;
}

Saludos
364  Programación / Programación C/C++ / Re: Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 7 Enero 2014, 04:00 am
Hola.
Por el momento estoy aprendiendo C y ya la respuesta de rir3760 me resulta un tanto difícil de interpretar pero lo voy a intentar.-

Saludos.
365  Programación / Programación C/C++ / Re: Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 7 Enero 2014, 00:17 am
Hola.-
Citar
Si el número tiene 10 cifras y la primera cifra es 3 o más, entonces cabe.
Me parece que deberia ser hací.-
Citar
Si el número tiene 10 cifras y la primera cifra es 3 o más, entonces NO cabe.
Bien la idea la capte, sólo que tengo 2 problemas.-
Qué pasa si el número ingresado es 2.247.483.648 tampoco cabe.-
La otra es que tengo que apretar Enter después de limpiar el buffer de teclado.-
Te aclaro que le hice otras validaciones.-

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3. #include <stdlib.h>
  4.  
  5. int main(){
  6. char numero[11] = "", ch=0;
  7. int ok=0, i=0;
  8.  
  9. do{
  10. system("CLS");
  11. ok=0;
  12. printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
  13. fgets(numero, 10, stdin);
  14. numero[strlen(numero)-1]='\0';
  15. //while((ch = getchar()) != EOF && ch != '\n');
  16.  
  17. if(numero[0] == '0' || strlen(numero) == 0){
  18. ok=1;
  19. printf("\n Error, Pulse una tecla para intentarlo nuevamente..."); getchar();
  20. }
  21. else{
  22. for(i=0;numero[i] != '\0'; i++){
  23. if(numero[i] <=47 || numero[i] >=58){
  24. ok=1;
  25. printf("\n Solo debe ingresar numeros, Pulse una tecla para intentarlo nuevamente..."); getchar();
  26. }
  27. }
  28. }
  29. }while(ok == 1);
  30.  
  31.  
  32. printf("\n %s", numero);
  33. return 0;
  34. }
  35.  
Saludos
366  Programación / Programación C/C++ / Pasar de cadena(char) a entero(int) sin sobrepasar el máximo permitido. en: 6 Enero 2014, 21:45 pm
Hola.-
Les dejo un pequeño programa que luego voy a seguir completando, lo que quiero saber es si se puede antes de convertir la cadena a entero verificar si el número ingresado sobrepasa el máximo permitido por el tipo int.-

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3. #include <stdlib.h>
  4.  
  5. int main(){
  6. char numero[10] = "";
  7. int ok=0, i=0;
  8.  
  9. do{
  10. system("CLS");
  11. ok=0;
  12. printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
  13. fgets(numero, 10, stdin);
  14. numero[strlen(numero)-1]='\0';
  15.  
  16. for(i=0;numero[i] != '\0'; i++){
  17. if(numero[i] <=47 || numero[i] >=58){
  18. ok=1;
  19. printf("\n Solo debe ingresar numeros, Pulse una tecla para intentarlo nuevamente..."); getchar();
  20. }
  21. }
  22. }while(ok == 1);
  23.  
  24. printf("\n %s", numero);
  25. return 0;
  26. }

Bueno es todo.-
Saludos.
Páginas: 1 ... 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines