Ejercicios de Funciones
Condições de conclusão
9. Convertir texto <=> real
/*
* funciones para convertir de texto a real (solo positivos)
* y de real a texto (solo positivos)
*
* Germán Andrés Xander 2021
*
*/
#include <iostream>
#define contidad_de_decimales 4
using namespace std;
int potencia(int x, int y);
float texto_a_real(char *texto);
char* real_a_texto(float valor);
int main() {
char texto[]="123,431594";
cout.precision(9);
cout<<texto_a_real(texto)<<endl;
char * letras=real_a_texto(12345.89646);
cout<<letras;
delete[] letras;
return 0;
}
int potencia(int x, int y) {
int i,potencia=1;
if(y == 0){
return 1;
}
for(i=1; i<=y; i++){
potencia=potencia*x;
}
return potencia;
}
float texto_a_real(char *texto) {
int i = 0;
float resultado=0;
while (texto[i]!='.' && texto[i]!=',' && texto[i]) { //encuentro la posición del separador
i++;
}
for(int j=0; j<i; j++) {
resultado=resultado+(texto[j]-'0')*potencia(10,i-j-1);
}
i++; //salteo el punto
int decimal=1;
while (texto[i]) {
float parte_decimal=float(texto[i]-'0')/potencia(10,decimal);
resultado=resultado+parte_decimal;
i++;
decimal++;
}
return resultado;
}
char* real_a_texto(float valor) {
int digitos=1;
int parte_entera= int(valor);
float parte_decimal=valor-parte_entera;
while(parte_entera > 1) { //cuento los dígitos enteros
parte_entera=parte_entera/10;
digitos++;
}
parte_entera= int(valor);
char * texto = new char[digitos + contidad_de_decimales + 1](); // +1 para el \null
for(int i=digitos-1; i>=0; i--) {
int resto=parte_entera%10;
parte_entera=parte_entera/10;
texto[i]=resto+'0';
}
texto[digitos]='.';
for(int i=1; i<=contidad_de_decimales; i++) {
parte_decimal=parte_decimal*10;
int cifra=int(parte_decimal);
texto[digitos+i]=cifra+'0';
parte_decimal=parte_decimal-cifra;
}
return texto;
}