Autor
|
Tema: Devolver un número al revés (Leído 3,062 veces)
|
JonaLamper
Desconectado
Mensajes: 394
|
Buenas, #include <iostream> #include <fstream> using namespace std; int main() { int enteroEntrada, enteroSalida = 0; const int CENTINELA = 0; ifstream entrada; ofstream salida; entrada.open("entrada.txt"); salida.open("salida.txt"); if (entrada.is_open()){ entrada >> enteroEntrada; while (enteroEntrada != CENTINELA){ if (enteroEntrada > 0){ while (enteroEntrada > 0){ // Bucle para dar la vuelta al número enteroEntrada enteroSalida = enteroSalida * 10 + enteroEntrada % 10; enteroEntrada = enteroEntrada / 10; } salida << enteroSalida << endl; // Escribimos en el fichero salida.txt } entrada >> enteroEntrada; // Leer el siguiente enteroSalida = 0; } } else { cout << "ERROR: el archivo no pudo abrirse." << endl; } entrada.close(); salida.close(); return 0; }
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
Mensajes: 400
|
Bueno eso yo lo hago así de sencillo: 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
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
JonaLamper
Desconectado
Mensajes: 394
|
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
Mensajes: 400
|
te lo he modificado tantito: #include <iostream> #include <fstream> using namespace std; int main() { int enteroEntrada, enteroSalida = 0; ifstream entrada; ofstream salida; entrada.open("entrada.txt"); salida.open("salida.txt"); if (entrada.is_open()){ entrada >> enteroEntrada; if(enteroEntrada) for( int digito; enteroEntrada; enteroEntrada = (enteroEntrada - digito)/10 ){ digito = enteroEntrada%10; salida << digito; } else salida << 0; } else { cout << "ERROR: el archivo no pudo abrirse." << endl; } entrada.close(); salida.close(); return 0; }
|
|
« Última modificación: 20 Noviembre 2015, 22:11 pm por 0xFer »
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
JonaLamper
Desconectado
Mensajes: 394
|
Pongo una solución que me parece más clara y mejor: #include <iostream> #include <fstream> using namespace std; int main() { int longitudNumero, enteroEntrada, enteroSalida = 0, digito; string enteroString; ifstream entrada; ofstream salida; entrada.open("entrada.txt"); salida.open("salida.txt"); if (entrada.is_open()){ entrada >> enteroEntrada; while (enteroEntrada != 0){ if (enteroEntrada > 0) { digito = enteroEntrada % 10; while (enteroEntrada != 0) { salida << digito; enteroEntrada = enteroEntrada / 10; digito = enteroEntrada % 10; } salida << endl; } entrada >> enteroEntrada; } } else { cout << "ERROR: el archivo no pudo abrirse." << endl; } entrada.close(); salida.close(); return 0; }
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
Mensajes: 400
|
En ese caso: #include <iostream> #include <fstream> using namespace std; int main() { int enteroEntrada; ifstream entrada.open("entrada.txt"); ofstream salida.open("salida.txt"); if (entrada.is_open()){ entrada >> enteroEntrada; for( ;enteroEntrada > 0; enteroEntrada /=10 ) salida << enteroEntrada%10; } else { cout << "ERROR: el archivo no pudo abrirse." << endl; } entrada.close(); salida.close(); return 0; }
y hace lo mismo xD
|
|
« Última modificación: 26 Noviembre 2015, 00:34 am por 0xFer »
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
todos los avi se me graban al reves
Software
|
Cobac
|
2
|
2,613
|
6 Junio 2003, 06:15 am
por Songoku
|
|
|
Videos Avi al reves
Multimedia
|
pretty0483
|
2
|
2,163
|
5 Marzo 2006, 04:07 am
por pretty0483
|
|
|
pyrit al reves
Wireless en Linux
|
Dondvp
|
0
|
2,625
|
10 Octubre 2011, 23:29 pm
por Dondvp
|
|
|
Devolver True si el numero es par [python]
Programación General
|
bichotg
|
5
|
7,259
|
22 Febrero 2012, 03:05 am
por [Case]
|
|
|
ingresar frase y devolver al reves
Programación C/C++
|
entreversos
|
6
|
6,050
|
17 Noviembre 2014, 23:32 pm
por Bachanilorac
|
|