Autor
|
Tema: Duda funcion incrementar (Leído 3,913 veces)
|
cazagavilan
Desconectado
Mensajes: 82
|
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. #include <iostream> using namespace std; bool incrementar (char numero[10]); char numero[10]; int main() { cout << "Introduzca un numero de nueve digitos o menos: \n"; cin >> numero[10]; incrementar(numero); cout << numero; system("pause"); } // Función incremetnar---------------------------------------------- bool incrementar ( char numero[10]) { int aux = numero[10]; if(aux < 999999999) { for( ; aux < 999999999; aux++) { cout << numero[aux]; } return true; } else { cout << "El numero no es correcto"; return false; } }
|
|
|
En línea
|
|
|
|
flony
Desconectado
Mensajes: 584
|
digo en vez de usar char usar solo un int seria algo asi ( (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
Mensajes: 82
|
El problema es que tiene que ser char XD.
Pero muchas gracias igualmente.
|
|
|
En línea
|
|
|
|
Sagrini
|
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
Mensajes: 82
|
Hola de nuevo, ahora tengo otro problema... no me incrementa nada ni un numero y deberia incrementar hasta 999999999. #include <iostream> using namespace std; bool incrementar (char numero[10]); char numero[10]; int main() { cout << "Introduzca un numero de nueve digitos o menos: \n"; cin >> numero[10]; incrementar(numero); cout << numero; system("pause"); } // Función incremetnar---------------------------------------------- bool incrementar ( char numero[10]) { int aux; aux = atoi(numero); if(aux < 9) { for( ; aux < 9; aux++) { cout << numero[aux]; } return true; } else { cout << "El numero no es correcto"; return false; } return 0; }
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
Mensajes: 195
|
Hola de nuevo, ahora tengo otro problema... no me incrementa nada ni un numero y deberia incrementar hasta 999999999. #include <iostream> using namespace std; bool incrementar (char numero[10]); char numero[10]; int main() { cout << "Introduzca un numero de nueve digitos o menos: \n"; cin >> numero[10]; incrementar(numero); cout << numero; system("pause"); } // Función incremetnar---------------------------------------------- bool incrementar ( char numero[10]) { int aux; aux = atoi(numero); if(aux < 9) { for( ; aux < 9; aux++) { cout << numero[aux]; } return true; } else { cout << "El numero no es correcto"; return false; } return 0; }
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: int aux; aux = atoi(numero); if(aux < 999999999) { strcpy(numero, "999999999"); cout << numero; return true; }
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: #include <iostream> using namespace std; char numero[10]; bool incrementar ( char numero[10]) { cout << endl; int aux; aux = atoi(numero); if(aux < 999999999) { strcpy(numero, "999999999"); return true; }else{ cout << "El numero no es correcto" << endl; return false; } return 0; } int main() { cout << "Introduzca un numero de nueve digitos o menos: " << endl; cin >> numero; incrementar(numero); cout << endl << "Resultado: " << numero << endl; cin.get();cin.get(); return 0; }
O si tiene que ser a fuerza el incremento pues asi: #include <iostream> using namespace std; char numero[10]; bool incrementar ( char numero[10]) { cout << endl; int aux; aux = atoi(numero); if(aux < 999999999) { while(aux < 999999999) { aux++; cout << aux << endl; } itoa(aux, numero, 10); return true; }else{ cout << "El numero no es correcto" << endl; return false; } return 0; } int main() { cout << "Introduzca un numero de nueve digitos o menos: " << endl; cin >> numero; incrementar(numero); cout << endl << "Resultado: " << numero << endl; cin.get();cin.get(); return 0; }
|
|
« Última modificación: 7 Abril 2012, 09:40 am por s00rk »
|
En línea
|
|
|
|
cazagavilan
Desconectado
Mensajes: 82
|
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
Mensajes: 195
|
A como entendi seria asi: #include <iostream> using namespace std; char numero[10]; bool incrementar ( char numero[10]) { cout << endl; int aux, var; char aux2[10]; strcpy(aux2, numero); for(int x = 0; x < 10; x++) if((numero[x] < 48 || numero[x] > 57) && numero[x] != 0) return false; aux = atoi(numero); if(aux == 999999999) strcpy(numero, "0"); else{ aux++; itoa(aux, aux2, 10); var = 9-strlen(aux2); for(int x = 0; x < 9; x++) { if(x < var) numero[x] = '0'; else numero[x] = aux2[x-var]; } } return true; } int main() { cout << "Introduzca un numero de nueve digitos o menos: " << endl; cin >> numero; if(incrementar(numero)) cout << endl << "Resultado: " << numero << endl; else cout << "Error, no son numeros"; cin.get();cin.get(); return 0; }
|
|
« Última modificación: 7 Abril 2012, 12:27 pm por s00rk »
|
En línea
|
|
|
|
cazagavilan
Desconectado
Mensajes: 82
|
Muchas gracias.
|
|
|
En línea
|
|
|
|
david_BS
|
otra forma, también comprueba que sea una cadena terminada en 0 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; }
int main() { char n[]={ '1','2','3','4','5','6','7','8','9',0 }; incrementar(n); cin.get(); return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con funcion date
PHP
|
Chupe!
|
2
|
1,964
|
6 Febrero 2008, 11:41 am
por Chupe!
|
|
|
Duda con funcion dentro de funcion en un echo
PHP
|
N4X
|
6
|
6,081
|
21 Enero 2010, 18:12 pm
por N4X
|
|
|
Duda con funcion
PHP
|
octavioxd
|
8
|
3,748
|
9 Febrero 2010, 12:29 pm
por N4X
|
|
|
[Duda]funcion en POO
PHP
|
rolly21102
|
2
|
2,892
|
1 Julio 2010, 05:51 am
por rolly21102
|
|
|
Duda con funcion<...>
Programación C/C++
|
_niu
|
3
|
2,206
|
26 Enero 2012, 03:02 am
por BlackZeroX
|
|