[ Foro de C++ ]

Opinión sobre código

20-Sep-2020 20:47
Invitado (Script kiddie)
1 Respuestas

Buenas, hoy les quiero presentar un pequeño programa que hace transformaciones de números regulares a números romanos. He de decir que no estoy muy claro con el "código limpio" ni tampoco al tanto de compatibilidad en sistemas Unix (estoy programando en Windows), así que no sé si alguna sentencia quedé obsoleta en otros lugares, estaría muy agradecido si me podrían aclarar lo que estoy haciendo mal y recibir una retroalimentación.


#include<iostream>
#include<conio.h>

using namespace std;

void numerosDecCen(int num, char X, char L, char C, char D, char M){	
	switch(num){
		case 10:
			cout<<X;
		break;
		case 20:
			cout<<X<<X;
		break;
		case 30:
			cout<<X<<X<<X;
		break;
		case 40:
			cout<<X<<L;
		break;
		case 50:
			cout<<L;
		break;
		case 60:
			cout<<L<<X;
		break;
		case 70:
			cout<<L<<X<<X;
		break;
		case 80:
			cout<<L<<X<<X<<X;
		break;
		case 90:
			cout<<X<<C;
		break;
		case 100:
			cout<<C;
		break;
	}
}

void numerosUnidades(int num, char I, char V, char X){ //sacar valores menores a IX (9)
	int numAux = num; //agregar valor num a la variable numAux para hacer las demas operaciones
	num -= 1; //usado para sacar los valores de I-II-III
	if(numAux <= 3){ //imprimir I-II-III
		for(int i = 0; i < (num+1); i++){
			cout<<I;
		}
	}
	if(numAux == 4){ //imprimir excepciones
		cout<<I<<V;		
	}else if(numAux == 9){
		cout<<I<<X;	
	}else if(numAux >= 5 && numAux < 9){
		cout<<V;
		numAux -= 5;
		for(int i = 0; i < numAux; i++){
			cout<<I;
		}
	}
}

int main(){
	char I = 'I', V = 'V', X = 'X', L = 'L', C = 'C', D = 'D', M = 'M';
	int num = 0, numUnid = 0, numDecCen = 0, numAux = 10;
	
	cout<<"Numero: ";
	cin>>num;
	numDecCen = num;
	if(num < 10){
		numUnid = num;
	}else{
		for(int i = 0; i < 100; i++){
			if(num >= numAux){
				numUnid = num - numAux;
				numDecCen = numAux;
			}
			numAux += 10;
		}
	}
	
	numerosDecCen(numDecCen, X, L, C, D, M);
	numerosUnidades(numUnid, I, V, X);
	cout<<"\nPresione una tecla para salir"<<endl;
	
	getch();
	return 0;
}


 


24-Sep-2020 15:02
Nacho Cabanes (+83)

Personalmente, no lo veo mal en general.  

No veo ganancia en hacer cosas como "char I = 'I'" ni en pasar esos detalles como parámetro como si fuera algo que pudiera cambiar, cuando no es así: "numerosDecCen(numDecCen, X, L, C, D, M);"

La forma de extraer cifras en el cuerpo del programa también es mejorable, puedes usar el operador módulo (%).

Pero aunque haya detalles cuestionables, por lo general es legible, que es lo más importante.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)