Informática
Ordenamiento de burbuja lenguaje c++
decimal a binario, binario a decimal, decimal a octal, octal a decimal, decimal a hexadecimal, hexadecimal a decimal
decimal a binario, binario a decimal, decimal a octal, octal a decimal, decimal a hexadecimal, hexadecimal a decimal
1 respuesta
Respuesta de akabane89
1
1
akabane89, ATENCIÓN: Lamento decir a quienes confían en mi para conseguir...
Si planteas bien tu problema te puedo ayudar. Ya que solo mencionas una tras otra las premisas que me parecen tu problema.
Si deseas el ordenamiento burbuja aquí te dejo un algoritmo hecho en c++.
Sea V el vector, aux una variable auxiliar para el intercambio de valores y n el tamaño del vector.
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(V[j]<V[j-1]){
aux=V[j];
V[j]=V[j-1];
V[j-1]=aux;
}
}
}
Lo otro que mencionas pues supongo que es la conversión de un numero en sistema decimal a otro en sistema binario, a octal y a hexadecimal.
Si es así entonces te planteo los algoritmos también en c++
Sea el numero N, convertiremos de decimal a binario B.
Donde N es un entero y B también.
Sea c el numero de cifras que ya está teniendo tu binario.
c=0;
B=0;
while(N>0){
B=B+(N%2)*pow(10,c);
c++;
N=N/2;
}
// una vez aqui, B ya es un binario.
El bucle representa las divisiones sucesivas, donde B va tomando poco a poco los residuos que se van obteniendo. C indica las cifras que el binario ya está obteniendo, y se multiplica por la potencia de 10 para que el residuo opte su lugar correspondiente.
por ejemplo, si tienes B = 001
entonces c es = 3, y si te sale un residuo (N%2) = 1, entonces se hará lo siguiente
B = 001 + 1*10^3 = 001 + 1000 = 1001. y tu binario se sigue completando sucesivamente.
la conversion opuesta solo se hace por descomposicion canonica.
B es binario, N es el decimal.
N=0;
c=0;
while(B>0){
N=N + (B%10)*pow(2,c);
c++;
B=B/10;
} // se observa que el bucle es muy parecido al anterior.
Para el sistema octal solo es cuestión de reemplazar valores, si es el caso, entonces podríamos generalizar y crear una función, que reciba por parámetros el numero a convertir en decimal, y se convierte a cualquier otra base del 2 al 9. y devuelve un entero el cual es el numero convertido, o también que convierta de una base a la base 10.
int convertidor(N,b,tipo) {
// El tercer parámetro nos indicara que tipo de conversión se quiere, si es cero, se hará //una conversión de base 10 a la base b,, y si es uno, de la base b a la base 10.
//N es el numero a convertir.
int R=0,c=0; // R es el resultado.
if(tipo==0){
while(N>b-1){
R=R+(N%b)*pow(10,c);
c++;
N=N/b;
}
}else{
while(N>0){
N=N + (N%10)*pow(b,c);
c++;
N=N/10;
}
}
return R
}
Ya después tu puedes agregar condiciones para perfeccionar el algoritmo, como por ejemplo que la base b debe estar entre 2 y 9 inclusive, también que el numero que se está otorgando debe cumplir con las condiciones de la base a la que se supone pertenece en un principio ( si se desea hacer una conversión de binario a decimal, N no puede ser igual por ejemplo a 1305, por que viola la condición de que las cifras no deben ser mayores ni iguales que la base).
Ahora si deseas para hexa decimal, necesitarás trabajar con cadenas de caracteres, ya que cuando se trata de cifras que superan al 9 se les representa por letras, como ya sabrás.
10 = A, 11 =B, 12 = C, 13 =D .... etc...
Entonces agregando tu librería <string.h> Podremos trabajar con la manipulación de caracteres a partir de funciones.
solo usaremos la funcion strcat(cadena1,cadena2);
Esta función recibe una cadena llamada cadena2, y se agregará a la cadena1.
Si tu cadena1 esta vacía, entonces toma el valor de la cadena2. Esto lo usaremos para poder escribir mejor cifra por cifra, ya que en este caso, no podemos convertir un numero decimal a un hexadecimal guardándolo en un int como en los casos anterioroes.
Comenzamos entonces.
Sea H un char[100] vacío donde se guardará la conversión de decimal a hexadecimal.
int residuo;
while(N>15){
residuo = (N%16);
switch(residuo){ // dependiendo de la cifra (entera) que sea residuo concatenamos con // una cadena especifica, "0","1" o "B","C", etc...
case 0:strcat(H,"0");break;
case 1: strcat(H,"1");break;
case 2: strcat(H,"2");break; // aqui sigue completando hasta el case 9
//...
case 10: strcat(H,"A");break;
case 11:strcat(H,"B");break; // ahora completalo hasta el 15 siguiendo la secuencia de //las letras
}
N=N/16;
}
Aqui ya tu H es una cadena que representa el numero en hexadecimal.
Para convertir el hexadecimal, guardado en H (cadena) a un decimal, usa el siguiente bucle, pero antes necesitas calcular el tamaño de la cadena H, a menos que ya lo tengas definido, lo más probable es que no, aquí te dejo una función que envías un parámetro, cadena de carácter, y te devuelve el numero de caracteres.
int devuelve_tamano(char cad[])
{
int i=0;
while(cad!='\0'){ // ese simbolo siempre esta presente al final de una cadena
i++;
}
return i;
}
Ahora aplicas esa función y puedes saber el numero de caracteres en tu cadena, eso se va a usar para poder convertir esa cadena a un entero.
Sea n el tamaño de la cadena, sea N el numero decimal conseguido de la conversión, y sea H la cadena de caracteres que representa al hexadecimal.
N=0;
for(int i=0;i<n;i++){
switch(H){ // comenzamos del 1 por que en la descomposicion canonica, el cero no //afecta a la conversion.
case '1':N = N+1*pow(16,i);break;
case '2': N=N+2*pow(16,i); // continua hasta el nueve.
//...
case 'A': N=N+10*pow(16,i);
case 'B': N=N+11*pow(15,i); // esto continualo hasta la letra que representa al 15
//...
}
}
Con eso es suficiente, se recorre la cadena y una vez se termina el recorrido, ya se ha agregado al N, por descomposición canónica, los valores que le corresponden, de este modo N ya tiene el valo decimal de H.
Bueno eso es todo lo que he entendido de lo que pediste, si no es así, pues me lamento por mi por que me canse escribiendo XD
Bueno, hasta otra oportunidad.
Si deseas el ordenamiento burbuja aquí te dejo un algoritmo hecho en c++.
Sea V el vector, aux una variable auxiliar para el intercambio de valores y n el tamaño del vector.
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(V[j]<V[j-1]){
aux=V[j];
V[j]=V[j-1];
V[j-1]=aux;
}
}
}
Lo otro que mencionas pues supongo que es la conversión de un numero en sistema decimal a otro en sistema binario, a octal y a hexadecimal.
Si es así entonces te planteo los algoritmos también en c++
Sea el numero N, convertiremos de decimal a binario B.
Donde N es un entero y B también.
Sea c el numero de cifras que ya está teniendo tu binario.
c=0;
B=0;
while(N>0){
B=B+(N%2)*pow(10,c);
c++;
N=N/2;
}
// una vez aqui, B ya es un binario.
El bucle representa las divisiones sucesivas, donde B va tomando poco a poco los residuos que se van obteniendo. C indica las cifras que el binario ya está obteniendo, y se multiplica por la potencia de 10 para que el residuo opte su lugar correspondiente.
por ejemplo, si tienes B = 001
entonces c es = 3, y si te sale un residuo (N%2) = 1, entonces se hará lo siguiente
B = 001 + 1*10^3 = 001 + 1000 = 1001. y tu binario se sigue completando sucesivamente.
la conversion opuesta solo se hace por descomposicion canonica.
B es binario, N es el decimal.
N=0;
c=0;
while(B>0){
N=N + (B%10)*pow(2,c);
c++;
B=B/10;
} // se observa que el bucle es muy parecido al anterior.
Para el sistema octal solo es cuestión de reemplazar valores, si es el caso, entonces podríamos generalizar y crear una función, que reciba por parámetros el numero a convertir en decimal, y se convierte a cualquier otra base del 2 al 9. y devuelve un entero el cual es el numero convertido, o también que convierta de una base a la base 10.
int convertidor(N,b,tipo) {
// El tercer parámetro nos indicara que tipo de conversión se quiere, si es cero, se hará //una conversión de base 10 a la base b,, y si es uno, de la base b a la base 10.
//N es el numero a convertir.
int R=0,c=0; // R es el resultado.
if(tipo==0){
while(N>b-1){
R=R+(N%b)*pow(10,c);
c++;
N=N/b;
}
}else{
while(N>0){
N=N + (N%10)*pow(b,c);
c++;
N=N/10;
}
}
return R
}
Ya después tu puedes agregar condiciones para perfeccionar el algoritmo, como por ejemplo que la base b debe estar entre 2 y 9 inclusive, también que el numero que se está otorgando debe cumplir con las condiciones de la base a la que se supone pertenece en un principio ( si se desea hacer una conversión de binario a decimal, N no puede ser igual por ejemplo a 1305, por que viola la condición de que las cifras no deben ser mayores ni iguales que la base).
Ahora si deseas para hexa decimal, necesitarás trabajar con cadenas de caracteres, ya que cuando se trata de cifras que superan al 9 se les representa por letras, como ya sabrás.
10 = A, 11 =B, 12 = C, 13 =D .... etc...
Entonces agregando tu librería <string.h> Podremos trabajar con la manipulación de caracteres a partir de funciones.
solo usaremos la funcion strcat(cadena1,cadena2);
Esta función recibe una cadena llamada cadena2, y se agregará a la cadena1.
Si tu cadena1 esta vacía, entonces toma el valor de la cadena2. Esto lo usaremos para poder escribir mejor cifra por cifra, ya que en este caso, no podemos convertir un numero decimal a un hexadecimal guardándolo en un int como en los casos anterioroes.
Comenzamos entonces.
Sea H un char[100] vacío donde se guardará la conversión de decimal a hexadecimal.
int residuo;
while(N>15){
residuo = (N%16);
switch(residuo){ // dependiendo de la cifra (entera) que sea residuo concatenamos con // una cadena especifica, "0","1" o "B","C", etc...
case 0:strcat(H,"0");break;
case 1: strcat(H,"1");break;
case 2: strcat(H,"2");break; // aqui sigue completando hasta el case 9
//...
case 10: strcat(H,"A");break;
case 11:strcat(H,"B");break; // ahora completalo hasta el 15 siguiendo la secuencia de //las letras
}
N=N/16;
}
Aqui ya tu H es una cadena que representa el numero en hexadecimal.
Para convertir el hexadecimal, guardado en H (cadena) a un decimal, usa el siguiente bucle, pero antes necesitas calcular el tamaño de la cadena H, a menos que ya lo tengas definido, lo más probable es que no, aquí te dejo una función que envías un parámetro, cadena de carácter, y te devuelve el numero de caracteres.
int devuelve_tamano(char cad[])
{
int i=0;
while(cad!='\0'){ // ese simbolo siempre esta presente al final de una cadena
i++;
}
return i;
}
Ahora aplicas esa función y puedes saber el numero de caracteres en tu cadena, eso se va a usar para poder convertir esa cadena a un entero.
Sea n el tamaño de la cadena, sea N el numero decimal conseguido de la conversión, y sea H la cadena de caracteres que representa al hexadecimal.
N=0;
for(int i=0;i<n;i++){
switch(H){ // comenzamos del 1 por que en la descomposicion canonica, el cero no //afecta a la conversion.
case '1':N = N+1*pow(16,i);break;
case '2': N=N+2*pow(16,i); // continua hasta el nueve.
//...
case 'A': N=N+10*pow(16,i);
case 'B': N=N+11*pow(15,i); // esto continualo hasta la letra que representa al 15
//...
}
}
Con eso es suficiente, se recorre la cadena y una vez se termina el recorrido, ya se ha agregado al N, por descomposición canónica, los valores que le corresponden, de este modo N ya tiene el valo decimal de H.
Bueno eso es todo lo que he entendido de lo que pediste, si no es así, pues me lamento por mi por que me canse escribiendo XD
Bueno, hasta otra oportunidad.
bueno quisiera que estos programas los pasaras en lenguaje c++(ordenamiento de burbuja creo que son conversionel o algo asi
decimal a binario
binario a decimal
decimal a octal
octal a decimal
decimal a hexadecimal
hexadecimal a octal
decimal a binario
binario a decimal
decimal a octal
octal a decimal
decimal a hexadecimal
hexadecimal a octal
- Compartir respuesta
- Anónimo
ahora mismo