Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rarrav26 en 4 Abril 2015, 21:31 pm



Título: Reducir líneas de código
Publicado por: rarrav26 en 4 Abril 2015, 21:31 pm
Hola,
Hice un programa que lo que hace es: convertir uno o más números en base 10 a base X (decisión del usuario), y que cuando se ingrese un numero negativo, tanto en el dividendo como en el divisor, éste se detenga.
El programa funciona correctamente, lo único es que hay bastantes líneas repetidas que podrían eliminarse, pero no se como.
Para evitar que se repita tantas veces lo mismo, hice un subprograma (función):
Código:
int cuenta(int a){
   int i,num;
   for(i=0;i<a;i++){
      num=16-i;
      cifra(r(num)); // acá quisiera que r(num) llame a las variables r16 hasta r1 (de acuerdo a lo que se haya ingresado en el parámetro de la función "cuenta"
   }
}
Subo el archivo C++, ahí lo expliqué mejor y es más fácil de comprender ya que pueden ver las funciones y lo que quiero reemplazar. (http://paste.ubuntu.com/10739480/)
Saludos


Título: Re: Reducir líneas de código
Publicado por: engel lex en 4 Abril 2015, 21:44 pm
primero, te recomiendo trabajar en un char de 16 espacios en lugar de 16 variables separadas...

segundo... para no hacer tanto desastre, sabemos que los numeros son del char 48 al char 57 y las letras minusculas 97 al 122.. entonces...

Código
  1. char resultado [16];
  2. while...
  3. //el proceso
  4. if(proceso<10){
  5.  resultado[vuelta]=48+proceso;
  6. }else if(resultado<36){
  7.  resultado[vuelta]=97+proceso;
  8. }else{
  9.  resultado[vuelta]='?';//un numero más grande del que trabajas
  10. }
  11.  


Título: Re: Reducir líneas de código
Publicado por: rarrav26 en 7 Abril 2015, 20:04 pm
Muchas gracias engel lex, lo que respondiste me sirvió mucho, me abriste una nueva puerta al mostrarme vectores, se me facilitaron muchas cosas al aprender ése método.
Reduje muchísimo el código del programa.
Código:
#include <iostream>
#include <cstdlib>
using namespace std;

int cifra(int a){
    if(a<10){
        cout<<a;
    } else {
        a=a+87;
        cout<<(char)a;
    }
}

int main()
{
    system("color A");
    system("mode con: cols=100 lines=36");
    int num,div,resto,coc,cont,cont1,valor,res[40];
    bool funciona=true;
  while(funciona==true){
        cont=0;
        cout<<"Ingrese el numero decimal que desea convertir: ";
        cin>>num;
        if(num<0){
            funciona=false;
        } else {
            do {
                cout<<"Ingrese la nueva base: ";
                cin>>div;
                if(div<0){
                    funciona=false;
                }
            } while(div==0 || div==1);
            if(funciona==true){
                while(num!=0){
                    cont++;
                    coc=num/div;
                    resto=num%div;
                    num=coc;
                    res[cont]=resto;
                }
                cont1=cont;
                for(valor=cont1;valor>=1;valor--){
                    cont=valor;
                    cifra(res[cont]);
                }
                cout<<" en base "<<div<<endl;
            }
        }
    }
    return 0;
}

Saludos