Páginas: [1]
|
 |
|
Autor
|
Tema: una duda respecto a una parte de un codigo... (Leído 602 veces)
|
renenegrete
Desconectado
Mensajes: 5
|
hola .. solo unas preguntillas algo facil jejej eso creo .. bueno he intentado descifrar el codigo pero no entiendo mucho ... soy nuevo en estas ondas... mis preguntas son: como funcionan esta parte del codigo ... n1 /= base1; n2 += (alg*mult); mult *= base2; ... solo " /= += *= " ? en esta parte del codigo.. printf("%lu",conversor(n,2,10)); ... como funciona la parte que sigue despues de % ... yo solo conocia .. %d %s %c pero no.. "%lu" tambien la parte que sigue del " conversor(n,2,10)); " ? y por ultimo no entiendo esta parte del for " for( ;; ) " ... cual es su funcion? espero alguien me pueda ayudar se lo agradeceria mucho ... gracias y saludos... #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h>
char menu() { char c;
printf("1 - Decimal -> Binario\n"); printf("2 - Decimal -> Octal\n"); printf("3 - Decimal -> Hexadecimal\n"); printf("4 - Binario -> Decimal\n"); printf("5 - Binario -> Octal\n"); printf("6 - Binario -> Hexadecimal\n"); printf("7 - Octal -> Decimal\n"); printf("8 - Octal -> Binario\n"); printf("9 - Octal -> Hexadecimal\n"); printf("A - Hexadecimal -> Decimal\n"); printf("B - Hexadecimal -> Binario\n"); printf("C - Hexadecimal -> Octal\n"); printf("S - Salir\n");
printf("\nSeleccione opcion: "); c = getche(); return c; }
unsigned long conversor(unsigned long n1,int base1,int base2) { unsigned long alg,mult=1,n2=0; while (n1 > 0) { alg = n1 % base1; n1 /= base1; n2 += (alg*mult); mult *= base2; } return n2; }
main() { unsigned long n; char op;
for(;;) { system("cls"); op = menu(); system("cls");
switch(op) { case '1': printf("Conversor Decimal -> Binario\n"); printf("Introduza un numero Decimal: "); scanf("%lu",&n); printf("Numero Binario correspondente: "); printf("%lu",conversor(n,2,10)); break;
case '2': printf("Conversor Decimal -> Octal\n"); printf("Introduza um numero Decimal: "); scanf("%lu",&n); printf("Numero Octal correspondente: "); printf("%lo",n); break;
case '3': printf("Conversor Decimal -> Hexadecimal\n"); printf("Introduza um numero Decimal: "); scanf("%lu",&n); printf("Numero Hexadecimal correspondente: "); printf("%lx",n); break;
case '4': printf("Conversor Binario -> Decimal\n"); printf("Introduza un numero Binario: "); scanf("%lu",&n); printf("Numero Decimal correspondente: "); printf("%lu",conversor(n,10,2)); break;
case '5': printf("Conversor Binario -> Octal\n"); printf("Introduza un numero Binario: "); scanf("%lu",&n); printf("Numero Octal correspondente: "); printf("%lo",conversor(n,10,2)); break;
case '6': printf("Conversor Binario -> Hexadecimal\n"); printf("Introduza un numero Binario: "); scanf("%ld",&n); printf("Numero Hexadecimal correspondente: "); printf("%lx",conversor(n,10,2)); break;
case '7': printf("Conversor Octal -> Decimal\n"); printf("Introduza un numero Octal: "); scanf("%lo",&n); printf("Numero Decimal correspondente: "); printf("%lu",n); break;
case '8': printf("Conversor Octal -> Binario\n"); printf("Introduza un numero Octal: "); scanf("%lo",&n); printf("Numero Binario correspondente: "); printf("%lu",conversor(n,2,10)); break;
case '9': printf("Conversor Octal -> Hexadecimal\n"); printf("Introduza un numero Octal: "); scanf("%lo",&n); printf("Numero Hexadecimal correspondente: "); printf("%lx",n); break;
case 'A': case 'a': printf("Conversor Hexadecimal -> Decimal\n"); printf("Introduza un numero Hexadecimal: "); scanf("%lx",&n); printf("Numero Decimal correspondente: "); printf("%lu",n); break;
case 'B': case 'b': printf("Conversor Hexadecimal -> Binario\n"); printf("Introduza un numero Hexadecimal: "); scanf("%lx",&n); printf("Numero Binario correspondente: "); printf("%lu",conversor(n,2,10)); break;
case 'C': case 'c': printf("Conversor Hexadecimal -> Octal\n"); printf("Introduza un numero Hexadecimal: "); scanf("%lx",&n); printf("Numero Octal correspondente: "); printf("%lo",n); break;
case 'S': case 's': exit(0); break;
default: printf("Opcion invalida!"); } getch(); } }
|
|
|
|
|
En línea
|
|
|
|
z0t0
Desconectado
Mensajes: 474
Slackware
|
Buenas,  //1 n1 /= base1; // n1 = n1 / base1; n2 += (alg*mult); // n2 = n2 + (alg*mult); mult *= base2; // mult = multi * base2; //2 printf("%lu",conversor(n,2,10)); conversor(n,2,10); = Conversor sera una funcion creada por el es lo mas seguro, n, 2, 10 son los argumentos. %lu = la "l" de long entero, la "u" de unsigned . PD: no estoi seguro de lo ultimo. Un Saludo.
|
|
|
|
|
En línea
|
 The real mckenzies && the nofx.
|
|
|
BEATMASTER
Desconectado
Mensajes: 30
|
la parte de " for( ;; ) " se llama for infinito o sin limites ejecutara indeterminadamente el ciclo hasta que encuentre alguna rutina de salida dentro del mismo ciclo como un break; o alguna otra manera de abandonar el ciclo (puede igual nunca abandonarlo pero no hay muchas cosas que requieran nunca terminar  ) en tu caso la opcion que le da salida al bucle infinito es esta : case 'S': case 's': exit(0); <---- termina el programa break;
|
|
|
|
« Última modificación: 17 Noviembre 2007, 04:23 por BEATMASTER »
|
En línea
|
|
|
|
neo007
Desconectado
Mensajes: 81
|
si lo que quieres es hacer eso de manera mas simple deberia probar lo siguiente.... #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; int main() { int numero; cout << "Introduzca un numero:" << endl; cin >> numero; cout << "El valor introducido en base 10 es: " << numero << endl; cout << resetiosflags(ios::dec); cout << setiosflags(ios::oct); cout << "en base octal es: " << numero << endl; cout << resetiosflags(ios::oct); cout << setiosflags(ios::hex); cout << "y en base hexadecimal es: " << numero << endl; cout << setiosflags(ios::uppercase|ios::showbase); cout << "utilizando los manipuladores uppercase y showbase" << " el valor es: " << numero << endl; cout << resetiosflags(ios::uppercase|ios::showbase); cout << resetiosflags(ios::hex); cout << setiosflags(ios::showpos|ios::showpoint|ios::fixed); cout << "Utilizando los manipuladores showpos," " showpoint y fixed: " << (float)numero << endl; cout << resetiosflags(ios::showpos|ios::showpoint|ios::fixed); cout << "Finalmente el valor es " << numero << endl; system("pause"); return 0; } ya solamente adaptas el programa este a tus necesidades.... así no tendrás que hacer la conversion de valores mediante algoritmos y solo con manipuladores de datos... espero ser de ayuda 
|
|
|
|
|
En línea
|
|
|
|
renenegrete
Desconectado
Mensajes: 5
|
muchas gracias a z0t0 BEATMASTER y neo007... y neo007 la verdad solo quiero entender el codigo... imaginate si no entiendo el codigo que les puse quieres que entienda en tuyo ... lo siento pero la verdad no entendi nada... pero de todos modos gracias ...
|
|
|
|
|
En línea
|
|
|
|
SirLanceCC
Desconectado
Mensajes: 1.059
Equipo de Traducción
|
entonces for( ;; ) sería equivalente a poner while(1)?? Yo ya había usado while(1) y lo traduzco como "siempre".
|
|
|
|
|
En línea
|
|
|
|
neo007
Desconectado
Mensajes: 81
|
muchas gracias a z0t0 BEATMASTER y neo007... y neo007 la verdad solo quiero entender el codigo... imaginate si no entiendo el codigo que les puse quieres que entienda en tuyo ... lo siento pero la verdad no entendi nada... pero de todos modos gracias ...
bno yo utilizo lo que son los manipuladores... y si revisas el codigo se vuelve algo intuitivo..... resetiosflags(ios::dec); //aqui me dice que utilizo valores en decimal setiosflags(ios::oct); //aqui que la salida d datos k obtendré será en octal.... ya despue //ya despues solo imprimo la variable con lo que dice -| Sir_Lance |- yo creo que no.. porque nos marcaria error ya que no hay comparacion en el while..... y se traduce "mientras que" <comparacion>.............
|
|
|
|
|
En línea
|
|
|
|
(*<>*) HaCKinG_SkrIP
Desconectado
Mensajes: 210
|
En referente al la relación for-while.
Corregirme si me equivoco:
*condición_1--> cond1, condición_2---> cond2 // Sentencia_inicial1--> senti1, etc
************************************
for(senti1, senti2 ; cond1, cond2 ; i++, j--, t+=2) { grupo_de_sentencias; }
*************************************
Con while********* senti1; senti2;
while((cond1) && (cond2)) { grupo_de_sentencias; i++; i--; t+=2; }
***********************
En principio el for suele ser más "rápido de utilizar", pero entiendo que depende de cada situación y lo que queramos hacer.
En cuanto a lo de "algoritmo infinito" o bucle.
Yo tenia entendido que para hacer con un for un buvle infinito era así:
for( ;1; ) { sentencias; }
Y con while pues --> while(1) { sentencias; }
Más o menos es así, no?
|
|
|
|
|
En línea
|
|
|
|
|
Karman
|
lo del for es así: for(senti1, senti2 ; cond1 & cond2 ; i++, j--, t+=2) { grupo_de_sentencias; } y lo del bucle infinito: for(;  { sentencias; } while(1) { sentencias; } Donde el primero es más eficiente, porque no se comprueban condiciones, solo se da vueltas, mientras que el while, internamente comprueba en cada vuelta la condición S2
|
|
|
|
|
En línea
|
|
|
|
renenegrete
Desconectado
Mensajes: 5
|
ahora mi otra pregunta es como rayos imprime las letras le la parte hexadecimal???? gracias a todos los que han contestado por su ayuda
|
|
|
|
|
En línea
|
|
|
|
Ferсhu
Desconectado
Mensajes: 1.221
Menos palabras y Mas codigos.
|
int i=255; printf("0x%x",i); // imprime 0xFF
|
|
|
|
|
En línea
|
|
|
|
|
Karman
|
con:
scanf("%lx",&n);
el %x y %X se imprime el contenido de una variable en hexadecimal, la "l" lo único que hace es modificar la cantidad de números a imprimir (long)
S2
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|