Reducir líneas de código

Iniciado por rarrav26, 4 Abril 2015, 21:31 PM

0 Miembros y 1 Visitante están viendo este tema.

rarrav26

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):
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.
Saludos

engel lex

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...

char resultado [16];
while...
//el proceso
if(proceso<10){
  resultado[vuelta]=48+proceso;
}else if(resultado<36){
  resultado[vuelta]=97+proceso;
}else{
  resultado[vuelta]='?';//un numero más grande del que trabajas
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

rarrav26

#2
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.
#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