Autor
|
Tema: Pido Corrección: Conversor Informática (Leído 2,980 veces)
|
Fluflu
Desconectado
Mensajes: 137
|
Hola, estoy intentando aprender a programar y para poner en práctica unas cuantas cosas que he estudiado he hecho este programa que convierte cantidades de bits, megabits, bytes, kilobytes, megabytes, gigabytes y terabytes. Se que seguramente habrá código inútil y lo debo de haber hecho demasiado largo para tan poca cosa. Viendo el nivel que tengo ¿Me podríais dar algunas críticas constructivas? Remarco lo de mi nivel, cosas que pueda entender. Bueno, supongo que leyéndolo se verá que está desarrollado en entorno Linux. Gracias #include <stdio.h> #include <string.h> int main() { char bit[] = "bits"; char megabit[] = "Mb"; char byte[] = "bytes"; char kbyte[] = "KB"; char megabyte[] = "MB"; char gigabyte[] = "GB"; char terabyte[] = "TB"; int opc1; int opc2; /* Guarda la opción escogida por el usuario sobre el tipo de dato en las variables opc1 y opc2 */ printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato origen: "); printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato destino: "); /* Variables para el número introducido por el usuario y el resultado del cálculo */ float num; float result; /* Variables para indicar el tipo de dato original y final. */ char ori[6]; char fin[6]; /* Cálculo del resultado */ printf("\nIntroduce la cifra: "); switch(opc1) { case 1: switch(opc2) { case 1: result = num; break; case 2: result = num / 1000000; break; case 3: result = num / 8; break; case 4: result = num / 1024; break; case 5: result = num / 1024 / 1024; break; case 6: result = num / 1024 / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024 / 1024; break; } break; case 2: switch(opc2) { case 1: result = num * 1000000; break; case 2: result = num; break; case 3: result = num * 1000000 / 8; break; case 4: result = num * 1000000 / 8 / 1024; break; case 5: result = num * 1000000 / 8 / 1024 / 1024; break; case 6: result = num * 1000000 / 8 / 1024 / 1024 / 1024; break; case 7: result = num * 1000000 / 8 / 1024 / 1024 / 1024 / 1024; break; } break; case 3: switch(opc2) { case 1: result = num * 8; break; case 2: result = num * 8 / 1000000 ; break; case 3: result = num; break; case 4: result = num / 1024; break; case 5: result = num / 1024 / 1024; break; case 6: result = num / 1024 / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024 / 1024; break; } break; case 4: switch(opc2) { case 1: result = num * 1024 * 8; break; case 2: result = num * 1024 * 8 / 1000000 ; break; case 3: result = num *1024; break; case 4: result = num; break; case 5: result = num / 1024; break; case 6: result = num / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024; break; } break; case 5: switch(opc2) { case 1: result = num * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024; break; case 4: result = num * 1024; break; case 5: result = num; break; case 6: result = num / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024; break; } break; case 6: switch(opc2) { case 1: result = num * 1024 * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024 * 1024; break; case 4: result = num * 1024 * 1024; break; case 5: result = num * 1024; break; case 6: result = num; break; case 7: result = num / 1024; break; } break; case 7: switch(opc2) { case 1: result = num * 1024 * 1024 * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024 * 1024 * 1024; break; case 4: result = num * 1024 * 1024 * 1024; break; case 5: result = num * 1024 * 1024; break; case 6: result = num * 1024; break; case 7: result = num; break; } break; } /* Impresión en pantalla del resultado. */ printf("\n%f %s es igual a: %f %s\n", num , ori , result , fin ); return 0; }
|
|
« Última modificación: 30 Agosto 2010, 00:45 am por Fluflu »
|
En línea
|
La puerta más segura es la que no necesita ser cerrada...
|
|
|
pucheto
Desconectado
Mensajes: 215
|
Te tiro una pista para q quede mas lindo, podes hacerlo como ejercicio.
char bit[] = "bits"; char megabit[] = "Mb"; char byte[] = "bytes"; char kbyte[] = "KB"; char megabyte[] = "MB"; char gigabyte[] = "GB"; char terabyte[] = "TB";
Todas esas variables que declaraste, comparten tipo, y ademas podemos decir q comparten "función u objetivo" (no se me ocurre una manera prolija de decirlo). Proba metiendolas en un array, de manera q la opcion "i" te manda a la unidad en la i-esima posicion. Eso simplificaría el switch, (algo similar también para la conversión).
|
|
|
En línea
|
|
|
|
clodan
Desconectado
Mensajes: 277
|
mmm yo no le veo nada mal, eso si, tal como dijo nuestro compañero, las variables que tengan igual tipo es mejor agruparlas en 1 sola linea, pero eso depende de tus gustos... mmm despues... ahh... dejo aca para que los que tengan windows puedan tambien ver los problemas sin inconvenientes... mmm no se en linux, pero al final tenes qe poner un system pause, o getchar () para que muestre el resultado, sino el programa se cierra y por la velocidad a la que pasa todo es imposible ver el resultado, pero el programa funciona barbaro... si queres hacer para ambas versiones, windows y linux, lo que podes hacer es una funcion que diga if system("cls")=error system("clear") else system("cls") el problema es que justo ahora no me acuerdo como era para escribir error de comando... para windows: #include <stdio.h> #include <string.h> int main() { char bit[] = "bits"; char megabit[] = "Mb"; char byte[] = "bytes"; char kbyte[] = "KB"; char megabyte[] = "MB"; char gigabyte[] = "GB"; char terabyte[] = "TB"; int opc1; int opc2; /* Guarda la opción escogida por el usuario sobre el tipo de dato en las variables opc1 y opc2 */ printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato origen: "); printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato destino: "); /* Variables para el número introducido por el usuario y el resultado del cálculo */ float num; float result; /* Variables para indicar el tipo de dato original y final. */ char ori[6]; char fin[6]; /* Cálculo del resultado */ printf("\nIntroduce la cifra: "); switch(opc1) { case 1: switch(opc2) { case 1: result = num; break; case 2: result = num / 1000000; break; case 3: result = num / 8; break; case 4: result = num / 1024; break; case 5: result = num / 1024 / 1024; break; case 6: result = num / 1024 / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024 / 1024; break; } break; case 2: switch(opc2) { case 1: result = num * 1000000; break; case 2: result = num; break; case 3: result = num * 1000000 / 8; break; case 4: result = num * 1000000 / 8 / 1024; break; case 5: result = num * 1000000 / 8 / 1024 / 1024; break; case 6: result = num * 1000000 / 8 / 1024 / 1024 / 1024; break; case 7: result = num * 1000000 / 8 / 1024 / 1024 / 1024 / 1024; break; } break; case 3: switch(opc2) { case 1: result = num * 8; break; case 2: result = num * 8 / 1000000 ; break; case 3: result = num; break; case 4: result = num / 1024; break; case 5: result = num / 1024 / 1024; break; case 6: result = num / 1024 / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024 / 1024; break; } break; case 4: switch(opc2) { case 1: result = num * 1024 * 8; break; case 2: result = num * 1024 * 8 / 1000000 ; break; case 3: result = num *1024; break; case 4: result = num; break; case 5: result = num / 1024; break; case 6: result = num / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024; break; } break; case 5: switch(opc2) { case 1: result = num * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024; break; case 4: result = num * 1024; break; case 5: result = num; break; case 6: result = num / 1024 / 1024; break; case 7: result = num / 1024 / 1024 / 1024; break; } break; case 6: switch(opc2) { case 1: result = num * 1024 * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024 * 1024; break; case 4: result = num * 1024 * 1024; break; case 5: result = num * 1024; break; case 6: result = num; break; case 7: result = num / 1024; break; } break; case 7: switch(opc2) { case 1: result = num * 1024 * 1024 * 1024 * 1024 * 8; break; case 2: result = num * 1024 * 1024 * 1024 * 1024 * 8 / 1000000 ; break; case 3: result = num * 1024 * 1024 * 1024 * 1024; break; case 4: result = num * 1024 * 1024 * 1024; break; case 5: result = num * 1024 * 1024; break; case 6: result = num * 1024; break; case 7: result = num; break; } break; } /* Impresión en pantalla del resultado. */ printf("\n%f %s es igual a: %f %s\n", num , ori , result , fin ); return 0; }
|
|
|
En línea
|
|
|
|
Fluflu
Desconectado
Mensajes: 137
|
Gracias por responder, os haré caso con lo del array, respecto a lo de system("pause"); al hacerlo en linux no lo necesito (al menos de momento) porque ejecuto los programas desde la terminal, de forma que el resultado queda visible, pero lo tendré en cuenta si programo en windows y no me interesa abrirlo desde la consola. Y gracias también por esto: if system("cls")=error system("clear") else system("cls") no se me había ocurrido. Si alguien quiere seguir añadiendo cosas lo agradeceré también.
|
|
|
En línea
|
La puerta más segura es la que no necesita ser cerrada...
|
|
|
clodan
Desconectado
Mensajes: 277
|
Gracias por responder, os haré caso con lo del array, respecto a lo de system("pause"); al hacerlo en linux no lo necesito (al menos de momento) porque ejecuto los programas desde la terminal, de forma que el resultado queda visible, pero lo tendré en cuenta si programo en windows y no me interesa abrirlo desde la consola. Y gracias también por esto: if system("cls")=error system("clear") else system("cls") no se me había ocurrido. Si alguien quiere seguir añadiendo cosas lo agradeceré también. igual mira qe ese codigo no existe ehh!! lo vi aca una vez pero no me acuerdo como se ponia cuando un comando da error... por eso...
|
|
|
En línea
|
|
|
|
carlitos_jajajajaja
Desconectado
Mensajes: 30
|
Una forma mas sencilla de hacerlo es usando macros... Despues de los includes, colocas esto #ifdef WINDOWS #define CLEAR_COMMAND "cls" #elif defined(UNIX) #define CLEAR_COMMAND "clear" #else #error "No programas ni en Windows ni en Linux?? Eres raro!!!" #endif
Las macros WINDOWS y UNIX las define normalmente tu compilador de preferencia, no necesariamente con esos nombres, pero averigua q nombres usa Luego, a la hora de hacer la llamada al sistema para limpiar pantalla:
Y tienes codigo limpio portable y elegante
|
|
|
En línea
|
Merodeo los foros, esperando el momento de decir algo inteligente...
Se necesita paciencia
|
|
|
clodan
Desconectado
Mensajes: 277
|
Una forma mas sencilla de hacerlo es usando macros... Despues de los includes, colocas esto #ifdef WINDOWS #define CLEAR_COMMAND "cls" #elif defined(UNIX) #define CLEAR_COMMAND "clear" #else #error "No programas ni en Windows ni en Linux?? Eres raro!!!" #endif
Las macros WINDOWS y UNIX las define normalmente tu compilador de preferencia, no necesariamente con esos nombres, pero averigua q nombres usa Luego, a la hora de hacer la llamada al sistema para limpiar pantalla:
Y tienes codigo limpio portable y elegante CLAAAA!!!! eso es lo que buscaba!!! jaajaja gracias!!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Que esta mal? [Correccion de codigo]
PHP
|
2Fac3R
|
8
|
3,075
|
4 Noviembre 2011, 18:18 pm
por 2Fac3R
|
|
|
Corrección de apuntes sobre Java
Java
|
Dster
|
1
|
1,809
|
20 Octubre 2012, 00:14 am
por sapito169
|
|
|
Corrección de programa en C
Programación C/C++
|
Xgirl12
|
5
|
2,461
|
7 Noviembre 2012, 22:52 pm
por Xgirl12
|
|
|
Corrección de ejercicio
Programación C/C++
|
Soulklax
|
9
|
4,096
|
7 Noviembre 2016, 18:14 pm
por Soulklax
|
|
|
Corrección ejercicio en C de un bingo
Programación C/C++
|
vaillo33
|
6
|
3,155
|
11 Enero 2019, 21:57 pm
por vaillo33
|
|