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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Devolver un número al revés
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Devolver un número al revés  (Leído 3,062 veces)
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Devolver un número al revés
« en: 20 Noviembre 2015, 18:48 pm »

Buenas,

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main() {
  6. int enteroEntrada, enteroSalida = 0;
  7. const int CENTINELA = 0;
  8.  
  9. ifstream entrada;
  10. ofstream salida;
  11. entrada.open("entrada.txt");
  12. salida.open("salida.txt");
  13.  
  14. if (entrada.is_open()){
  15. entrada >> enteroEntrada;
  16. while (enteroEntrada != CENTINELA){
  17. if (enteroEntrada > 0){
  18. while (enteroEntrada > 0){ // Bucle para dar la vuelta al número enteroEntrada
  19. enteroSalida = enteroSalida * 10 + enteroEntrada % 10;
  20. enteroEntrada = enteroEntrada / 10;
  21. }
  22. salida << enteroSalida << endl; // Escribimos en el fichero salida.txt
  23. }
  24. entrada >> enteroEntrada; // Leer el siguiente
  25. enteroSalida = 0;
  26. }
  27. }
  28. else {
  29. cout << "ERROR: el archivo no pudo abrirse." << endl;
  30. }
  31.  
  32. entrada.close();
  33. salida.close();
  34. return 0;
  35. }

Tengo ese sencillo programa que lee un entero de un fichero de entrada y escribe ese entero (del revés) en otro fichero de salida. El problema es que para la entrada "100" la salida es "1" cuando debería ser "001". Lo que me lleva a pensar que he de usar variables char y/o string en vez de int (corregidme si me equivoco hasta este punto). El problema, de nuevo, es que intento planteármelo usando esas variables... Leo una cadena y voy almacenando los valores de forma invertida, pero claro, no sé cuántos dígitos tendrá el número de entrada, así que no puedo definir el tamaño de mi "contenedor" (un array de char, por ejemplo).

No sé si me explico...


En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Devolver un número al revés
« Respuesta #1 en: 20 Noviembre 2015, 18:57 pm »

Bueno eso yo lo hago así de sencillo:
Código:
FILE *archivo = fopen("documento.txt", "r"); //Abrimos el archivo
long int tamano; //variable para almacenar el tamaño del archivo

fseek(archivo,0,SEEK_END); //Nos vamos el final del archivo
tamano = ftell(archivo); //Averiaguamos nuestra posición en el archivo con ftell. Y como estamos al final, nos dirá el peso.

saludos


En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Devolver un número al revés
« Respuesta #2 en: 20 Noviembre 2015, 20:22 pm »

En primer lugar, gracias.

¿Alguna otra forma de hacerlo? ¿Podría hacerlo con variables int pero arreglando para que la entrada "100" me dé la salida "001"?

No me malinterpretes, tu solución me gusta. El problema es que no hemos visto funciones de ese estilo... Es decir, se supone que debe resolverse de forma más "trivial". Si bien el resultado será correcto, cuando mi profesor mire el código dudo que lo admita como válido.
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Devolver un número al revés
« Respuesta #3 en: 20 Noviembre 2015, 22:03 pm »

te lo he modificado tantito:

Código
  1. #include <iostream>
  2.    #include <fstream>
  3.    using namespace std;
  4.  
  5.    int main() {
  6.    int enteroEntrada, enteroSalida = 0;
  7.  
  8.    ifstream entrada;
  9.    ofstream salida;
  10.    entrada.open("entrada.txt");
  11.    salida.open("salida.txt");
  12.  
  13.    if (entrada.is_open()){
  14.    entrada >> enteroEntrada;
  15.  
  16.    if(enteroEntrada)
  17.        for( int digito; enteroEntrada; enteroEntrada = (enteroEntrada - digito)/10 ){
  18.            digito = enteroEntrada%10;
  19.            salida << digito;  
  20.        }
  21.    else
  22.        salida << 0;
  23.  
  24.    }
  25.    else {
  26.    cout << "ERROR: el archivo no pudo abrirse." << endl;
  27.    }
  28.  
  29.    entrada.close();
  30.    salida.close();
  31.    return 0;
  32.    }
  33.  
« Última modificación: 20 Noviembre 2015, 22:11 pm por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Devolver un número al revés
« Respuesta #4 en: 25 Noviembre 2015, 17:19 pm »

Pongo una solución que me parece más clara y mejor:


Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main() {
  6.  
  7. int longitudNumero, enteroEntrada, enteroSalida = 0, digito;
  8. string enteroString;
  9.  
  10. ifstream entrada;
  11. ofstream salida;
  12. entrada.open("entrada.txt");
  13. salida.open("salida.txt");
  14.  
  15. if (entrada.is_open()){
  16. entrada >> enteroEntrada;
  17.  
  18. while (enteroEntrada != 0){
  19. if (enteroEntrada > 0) {
  20. digito = enteroEntrada % 10;
  21. while (enteroEntrada != 0) {
  22. salida << digito;
  23. enteroEntrada = enteroEntrada / 10;
  24. digito = enteroEntrada % 10;
  25. }
  26. salida << endl;
  27. }
  28. entrada >> enteroEntrada;
  29. }
  30. }
  31. else {
  32. cout << "ERROR: el archivo no pudo abrirse." << endl;
  33. }
  34.  
  35. entrada.close();
  36. salida.close();
  37.  
  38. return 0;
  39. }

Gracias.

PD: en el for no haría falta hacer "(enteroEntrada - digito) / 10", bastaría con "(enteroEntrada / 10)".
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Devolver un número al revés
« Respuesta #5 en: 26 Noviembre 2015, 00:10 am »

En ese caso:

Código
  1.    #include <iostream>
  2.       #include <fstream>
  3.       using namespace std;
  4.  
  5.       int main() {
  6.       int enteroEntrada;
  7.  
  8.       ifstream entrada.open("entrada.txt");
  9.       ofstream  salida.open("salida.txt");
  10.  
  11.       if (entrada.is_open()){
  12.       entrada >> enteroEntrada;
  13.  
  14.           for( ;enteroEntrada > 0; enteroEntrada /=10 )
  15.               salida << enteroEntrada%10;  
  16.       }
  17.       else {
  18.       cout << "ERROR: el archivo no pudo abrirse." << endl;
  19.       }
  20.  
  21.       entrada.close();
  22.       salida.close();
  23.       return 0;
  24.       }
  25.  
  26.  

y hace lo mismo xD
« Última modificación: 26 Noviembre 2015, 00:34 am por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
todos los avi se me graban al reves
Software
Cobac 2 2,613 Último mensaje 6 Junio 2003, 06:15 am
por Songoku
Videos Avi al reves
Multimedia
pretty0483 2 2,163 Último mensaje 5 Marzo 2006, 04:07 am
por pretty0483
pyrit al reves
Wireless en Linux
Dondvp 0 2,625 Último mensaje 10 Octubre 2011, 23:29 pm
por Dondvp
Devolver True si el numero es par [python]
Programación General
bichotg 5 7,259 Último mensaje 22 Febrero 2012, 03:05 am
por [Case]
ingresar frase y devolver al reves
Programación C/C++
entreversos 6 6,050 Último mensaje 17 Noviembre 2014, 23:32 pm
por Bachanilorac
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines