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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda funcion incrementar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda funcion incrementar  (Leído 3,602 veces)
cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Duda funcion incrementar
« en: 6 Abril 2012, 17:50 pm »

Hola, tengo que hacer una funcion "bool incrementar(char numeri[10])" donde si la cadena tiene numeros devuelva true y si no false y si en el numero es menor a 999999999 lo incremente hasta 999999999.

Esto es lo que tengo de momento... he probado varias cosas pero no lo consigo... A ver si me podeis dar una pista.

Muchas gracias.
Código
  1. #include <iostream>
  2. using namespace std;
  3. bool incrementar (char numero[10]);
  4. char numero[10];
  5. int main()
  6. {
  7. cout << "Introduzca un numero de nueve digitos o menos: \n";
  8. cin >> numero[10];
  9. incrementar(numero);
  10. cout << numero;
  11. system("pause");
  12.  
  13. }
  14.  
  15. // Función incremetnar----------------------------------------------
  16. bool incrementar ( char numero[10])
  17. {
  18. int aux = numero[10];
  19. if(aux < 999999999)
  20. {
  21. for( ; aux < 999999999; aux++)
  22.    {
  23. cout << numero[aux];
  24. }
  25. return true;
  26. }
  27.  
  28. else
  29. {
  30. cout << "El numero no es correcto";
  31. return false;
  32. }
  33. }


En línea

flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: Duda funcion incrementar
« Respuesta #1 en: 6 Abril 2012, 19:17 pm »

digo en vez de usar char usar solo un int seria algo asi
Código:
( (numero >= 0) && (numero <= 999999999) )
seria con uso de boleano solo que el tipo de variable es distinto y en el rango determinado por ti y te devuelve true en caso de estar en ese rango.
después no entiendo bien para que el incremento que quieres hacer...pero el for serviría para ello


« Última modificación: 6 Abril 2012, 19:22 pm por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Duda funcion incrementar
« Respuesta #2 en: 6 Abril 2012, 19:49 pm »

El problema es que tiene que ser char XD.

Pero muchas gracias igualmente.
En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Duda funcion incrementar
« Respuesta #3 en: 6 Abril 2012, 23:33 pm »

Tratas número como si fuese un int, cuando en realidad es un char * (o como decís en C++, "string" xD). Busca algo sobre la función atoi () e implementa una.
En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Duda funcion incrementar
« Respuesta #4 en: 7 Abril 2012, 07:33 am »

Hola de nuevo, ahora tengo otro problema... no me incrementa nada ni un numero y deberia incrementar hasta 999999999.
Código
  1. #include <iostream>
  2. using namespace std;
  3. bool incrementar (char numero[10]);
  4. char numero[10];
  5. int main()
  6. {
  7.   cout << "Introduzca un numero de nueve digitos o menos: \n";
  8.   cin >> numero[10];
  9.   incrementar(numero);
  10.   cout << numero;
  11.   system("pause");
  12.  
  13. }
  14.  
  15. // Función incremetnar----------------------------------------------
  16. bool incrementar ( char numero[10])
  17. {
  18.   int aux;
  19.   aux = atoi(numero);
  20.   if(aux < 9)
  21.   {
  22.      for( ; aux < 9; aux++)
  23.       {
  24.         cout << numero[aux];
  25.      }
  26.      return true;
  27.   }
  28.  
  29.   else
  30.   {
  31.      cout << "El numero no es correcto";
  32.      return false;
  33.   }
  34.   return 0;
  35. }

He probado con if(aux < 999999999) y luego for( ; aux < 999999999; aux++) pero se ve que accede a memoria que no deberia.

Una ayudita, gracias!!
En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Duda funcion incrementar
« Respuesta #5 en: 7 Abril 2012, 09:33 am »

Hola de nuevo, ahora tengo otro problema... no me incrementa nada ni un numero y deberia incrementar hasta 999999999.
Código
  1. #include <iostream>
  2. using namespace std;
  3. bool incrementar (char numero[10]);
  4. char numero[10];
  5. int main()
  6. {
  7.   cout << "Introduzca un numero de nueve digitos o menos: \n";
  8.   cin >> numero[10];
  9.   incrementar(numero);
  10.   cout << numero;
  11.   system("pause");
  12.  
  13. }
  14.  
  15. // Funci&#243;n incremetnar----------------------------------------------
  16. bool incrementar ( char numero[10])
  17. {
  18.   int aux;
  19.   aux = atoi(numero);
  20.   if(aux < 9)
  21.   {
  22.      for( ; aux < 9; aux++)
  23.       {
  24.         cout << numero[aux];
  25.      }
  26.      return true;
  27.   }
  28.  
  29.   else
  30.   {
  31.      cout << "El numero no es correcto";
  32.      return false;
  33.   }
  34.   return 0;
  35. }

He probado con if(aux < 999999999) y luego for( ; aux < 999999999; aux++) pero se ve que accede a memoria que no deberia.

Una ayudita, gracias!!

Exactamente, tu mismo lo estas diciendo estas accediendo a memoria que no deberia porque la variable "numero", tiene capacidad de hasta 10 caracteres, y luego utilizando esto: if(aux < 999999999) y luego for( ; aux < 999999999; aux++) , estaras intentando acceder a memoria que no existe.

Creo que podrias ponerlo mas sencillo asi:

Código
  1. int aux;
  2.   aux = atoi(numero);
  3.   if(aux < 999999999)
  4.   {
  5.        strcpy(numero, "999999999");
  6.        cout << numero;
  7.        return true;
  8.   }
  9.  

Aunque se podria decir que es trampa xD, pero pues si uno pone nose 9 o un numero bajo tardara demasiado :/

Otra cosa que veo es que cuando lees el numero lo ingresas directamente en una posicion de numero, deberia ser
cin >> numero;

Yo lo haria asi:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. char numero[10];
  5.  
  6. bool incrementar ( char numero[10])
  7. {
  8. cout << endl;
  9. int aux;
  10. aux = atoi(numero);
  11. if(aux < 999999999)
  12. {
  13.                strcpy(numero, "999999999");
  14. return true;
  15. }else{
  16. cout << "El numero no es correcto" << endl;
  17. return false;
  18. }
  19. return 0;
  20. }
  21.  
  22. int main()
  23. {
  24. cout << "Introduzca un numero de nueve digitos o menos: " << endl;
  25. cin >> numero;
  26. incrementar(numero);
  27. cout << endl << "Resultado: " << numero << endl;
  28. cin.get();cin.get();
  29. return 0;
  30. }

O si tiene que ser a fuerza el incremento pues asi:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. char numero[10];
  5.  
  6. bool incrementar ( char numero[10])
  7. {
  8. cout << endl;
  9. int aux;
  10. aux = atoi(numero);
  11. if(aux < 999999999)
  12. {
  13. while(aux < 999999999)
  14. {
  15. aux++;
  16. cout << aux << endl;
  17. }
  18. itoa(aux, numero, 10);
  19. return true;
  20. }else{
  21. cout << "El numero no es correcto" << endl;
  22. return false;
  23. }
  24. return 0;
  25. }
  26.  
  27. int main()
  28. {
  29. cout << "Introduzca un numero de nueve digitos o menos: " << endl;
  30. cin >> numero;
  31. incrementar(numero);
  32. cout << endl << "Resultado: " << numero << endl;
  33. cin.get();cin.get();
  34. return 0;
  35. }
  36.  
« Última modificación: 7 Abril 2012, 09:40 am por s00rk » En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Duda funcion incrementar
« Respuesta #6 en: 7 Abril 2012, 09:51 am »

Voy a poner la descripcion del ejercicio a ver si la entendeis mejor que yo XD.

Hacer un programa que contenga una funcio con el prototipo bool incremetar (char numero[10]); La funcion debe incrementar el numero pasado como parametro en una cadena de caracteres de nueve digitos. Si la cadena no contiene numero debe devolver false, en caso cotrario true, y la cadena debe contener el numero incrementado. Si el numero es 999999999 debe devolver 0. Cadenas con menos de nueve digitos pueden contener numeros iniciales o no, por ejemplo, la funcion debe ser capaz de incrementar tanto 1234 como 000001234. La funcion main llamara a la funcion incrementar con varias cadenas.

Muchas gracias.
En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Duda funcion incrementar
« Respuesta #7 en: 7 Abril 2012, 12:04 pm »

A como entendi seria asi:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. char numero[10];
  5.  
  6. bool incrementar ( char numero[10])
  7. {
  8. cout << endl;
  9. int aux, var;
  10. char aux2[10];
  11. strcpy(aux2, numero);
  12.  
  13. for(int x = 0; x < 10; x++)
  14. if((numero[x] < 48 || numero[x] > 57) && numero[x] != 0)
  15. return false;
  16.  
  17. aux = atoi(numero);
  18. if(aux == 999999999)
  19. strcpy(numero, "0");
  20. else{
  21. aux++;
  22. itoa(aux, aux2, 10);
  23. var = 9-strlen(aux2);
  24. for(int x = 0; x < 9; x++)
  25. {
  26. if(x < var)
  27. numero[x] = '0';
  28. else
  29. numero[x] = aux2[x-var];
  30. }
  31. }
  32.  
  33. return true;
  34. }
  35.  
  36. int main()
  37. {
  38. cout << "Introduzca un numero de nueve digitos o menos: " << endl;
  39. cin >> numero;
  40. if(incrementar(numero))
  41.                cout << endl << "Resultado: " << numero << endl;
  42.        else
  43.                cout << "Error, no son numeros";
  44. cin.get();cin.get();
  45. return 0;
  46. }
  47.  
« Última modificación: 7 Abril 2012, 12:27 pm por s00rk » En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Duda funcion incrementar
« Respuesta #8 en: 7 Abril 2012, 12:10 pm »

Muchas gracias.
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Duda funcion incrementar
« Respuesta #9 en: 7 Abril 2012, 19:34 pm »

otra forma, también comprueba que sea una cadena terminada en 0
Código:
bool incrementar(const char *pv)
{
if(pv[9]!=0)return false;
for(unsigned int i=0; (pv[i]>='0'&&pv[i]<='9');i++);
if(i<9)return false;
char *d;
long n = strtol(pv,&d,10);
while(n<999999999)n++;
char *x;
x=ltoa(n,d,10);
printf("%s\n",x);
return true;
}

Código:
int main()
{
char n[]={ '1','2','3','4','5','6','7','8','9',0 };
incrementar(n);
        cin.get();
return 0;
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con funcion date
PHP
Chupe! 2 1,818 Último mensaje 6 Febrero 2008, 11:41 am
por Chupe!
Duda con funcion dentro de funcion en un echo
PHP
N4X 6 5,844 Último mensaje 21 Enero 2010, 18:12 pm
por N4X
Duda con funcion
PHP
octavioxd 8 3,458 Último mensaje 9 Febrero 2010, 12:29 pm
por N4X
[Duda]funcion en POO
PHP
rolly21102 2 2,715 Último mensaje 1 Julio 2010, 05:51 am
por rolly21102
Duda con funcion<...>
Programación C/C++
_niu 3 1,958 Último mensaje 26 Enero 2012, 03:02 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines