elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa de Educacion Asistida por Computadora en C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programa de Educacion Asistida por Computadora en C.  (Leído 5,607 veces)
oblivionxor

Desconectado Desconectado

Mensajes: 19


No hay mayor fracaso que apresurar el exito


Ver Perfil
Programa de Educacion Asistida por Computadora en C.
« en: 11 Febrero 2013, 03:50 am »

Hola de nuevo, pues ahora hice un programa para practicar las operaciones aritméticas básicas (suma, resta, multiplicación y división). Solamente me gustaría su opinión sobre el mismo, es decir, que les parece la estructura del código. Hice un programa anteriormente (distinto a este) y me hicieron la recomendación de no comentar tanto el código por que se veia muy adornado y pues puse en practica ese consejo, esta comentado pero solo lo necesario. Me gustaría saber en que aspectos podría mejorar mi programa, me refiero a la estructura del código, hago este tipo de preguntas por que quiero aprender a programar limpiamente y hacer que mi código sea fácil de comprender. Agradecimientos por adelantado.

Código
  1. /* Este programa sirve para practicar sumas, restas, multiplicaciones y divisiones */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. /* Prototipos de funciones */
  7. float generarNumero( int nivelDificultad );
  8. float operacion( float numero1, float numero2, int operacionElegida );
  9. void respuestaCorrecta( void );
  10. void respuestaIncorrecta( void );
  11. void impresionTipoDeOperacion( int tipoDeOperacion );
  12.  
  13. /* Inicia la ejecucion del programa */
  14. int main()
  15. {
  16. int i, correcta, nivel, operando, operando2;
  17. float num1, num2, resultado, intento;
  18. correcta = 0;
  19.  
  20. srand( time( NULL ) ); /* Modificacion de la semilla de los numeros pseudoaleatorios */
  21.  
  22. printf( "Bienvenido al sistema de aprendizaje asistido por computadora, se te preguntaran\n" );
  23. printf( "10 operaciones y luego se te mencionara si necesitas ayuda tutorial.\n" );
  24.  
  25. printf( "Por favor ingresa el nivel que quieres practicar ( 1 al 3 )..." );
  26.  
  27. do {
  28. scanf( "%d", &nivel );
  29.  
  30. if ( nivel < 1 || nivel > 3 ) {
  31. printf( "Nivel no valido, intenta otravez..." );
  32. }
  33. } while ( nivel < 1 || nivel > 3 );
  34.  
  35. printf( "Que tipo de operaciones quiere resolver:\n" );
  36. printf( "1. Sumas\n2. Restas\n3. Multiplicaciones\n4. Divisiones\n" );
  37. printf( "5. Operaciones Aleatorias\n" );
  38. printf( "Recuerda que no es obligatorio hacer las operaciones mentalmente, puedes\n" );
  39. printf( "apoyarte de lapiz y papel para realizarlas. ATENCION! No se permite el\n" );
  40. printf( "uso de calculadora.\n..." );
  41.  
  42. do {
  43. scanf( "%d", &operando );
  44.  
  45. if ( operando < 1 || operando > 5 ) {
  46. printf( "Opcion no valida, intenta de nuevo..." );
  47. }
  48. } while ( operando < 1 || operando > 5 );
  49.  
  50. operando2 = operando; /* Esta variable guarda el valor de operando, esto es para tener intacta nuestra variable y modificar la copia */
  51.  
  52. for ( i = 1; i <= 10; i++ ) {
  53. /* Llamamos a las funciones generadoras de numeros aleatorios */
  54. num1 = generarNumero( nivel );
  55. num2 = generarNumero( nivel );
  56.  
  57. if ( operando == 5 ) { /* Y por este motivo es por el que debemos mantener intacta nuestra variable operando */
  58. operando2 = 1 + rand() % 4; /* Genera una operacion aleatoria */
  59. }
  60.  
  61. resultado = operacion( num1, num2, operando2 ); /* Llamamos a la funcion que resuelve la operacion elegida ( o generada ) */
  62.  
  63. printf( "Cuanto es %.0f ", num1 );
  64. impresionTipoDeOperacion( operando2 );
  65. printf( " %.0f?...", num2 );
  66.  
  67. do {
  68. scanf( "%f", &intento );
  69.  
  70. if ( intento != resultado ) {
  71. respuestaIncorrecta(); /* Llamada a la funcion que genera los mensajes aleatorios cuando se responde incorrectamente */
  72. correcta--; /* Se decrementa en uno cada vez que se ingresa una respuesta correcta */
  73. }
  74. } while ( intento != resultado );
  75.  
  76. /* Cuando se ingresa la respuesta correcta, se llama a a funcion que genera el mensaje aleatorio y se incrementa correcta */
  77. respuestaCorrecta();
  78. correcta++;
  79.  
  80. } /* Fin de for */
  81.  
  82. if ( correcta < 7 ) { /* Si hubo mas de 3 respuestas incorrectas, se imprime este mensaje */
  83. printf( "Cometiste varios errores, por favor pide ayuda adicional a tu profesor. Hasta la proxima!\n" );
  84. }
  85.  
  86. return 0;
  87. } /* Fin de main */
  88.  
  89. /* Definicion de funciones */
  90. float generarNumero( int nivelDificultad )
  91. {
  92. switch ( nivelDificultad ) { /* Para generar numeros de 1, 2 y 3 digitos en los niveles 1, 2 y 3 respectivamente */
  93. case 1:
  94. return 1 + rand() % 9;
  95. break;
  96.  
  97. case 2:
  98. return 10 + rand() % 90;
  99. break;
  100.  
  101. case 3:
  102. return 100 + rand() % 900;
  103. break;
  104. } /* Fin de switch */
  105. } /* Fin de funcion generaNumero */
  106.  
  107. float operacion( float numero1, float numero2, int operacionElegida )
  108. {
  109. switch ( operacionElegida ) { /* Para la resolucion de nuestra operacion, esto es para compararlo posteriormente con la respuesta del
  110. user*/
  111. case 1:
  112. return numero1 + numero2;
  113. break;
  114.  
  115. case 2:
  116. return numero1 - numero2;
  117. break;
  118.  
  119. case 3:
  120. return numero1 * numero2;
  121. break;
  122.  
  123. case 4:
  124. return numero1 / numero2;
  125. break;
  126. }
  127. } /* Fin de funcion operacion */
  128.  
  129. void respuestaCorrecta( void )
  130. {
  131. switch ( 1 + rand() % 4 ) {
  132. case 1:
  133. printf( "Muy bien!!\n" );
  134. break;
  135.  
  136. case 2:
  137. printf( "Excelente!!\n" );
  138. break;
  139.  
  140. case 3:
  141. printf( "Manten ese buen rendimiento!!\n" );
  142. break;
  143.  
  144. case 4:
  145. printf( "Buen trabajo!!\n" );
  146. break;
  147. } /* Fin de switch */
  148. } /* Fin de funcion respuestaCorrecta */
  149.  
  150. void respuestaIncorrecta( void )
  151. {
  152. switch ( 1 + rand() % 4 ) {
  153. case 1:
  154. printf( "No. Por favor intenta de nuevo...\n" );
  155. break;
  156.  
  157. case 2:
  158. printf( "Incorrecto. Trata una vez mas\n" );
  159. break;
  160.  
  161. case 3:
  162. printf( "No te rindas!!\n" );
  163. break;
  164.  
  165. case 4:
  166. printf( "No. Sigue intentando\n" );
  167. break;
  168. } /* Fin de switch */
  169. } /* Fin de funcion respuestaIncorrecta */
  170.  
  171. void impresionTipoDeOperacion( int tipoDeOperacion )
  172. {
  173. switch ( tipoDeOperacion ) {
  174. case 1:
  175. printf( "mas" );
  176. break;
  177.  
  178. case 2:
  179. printf( "menos" );
  180. break;
  181.  
  182. case 3:
  183. printf( "por" );
  184. break;
  185.  
  186. case 4:
  187. printf( "entre" );
  188. break;
  189. }
  190. } /* Fin de funcion impresionTipoDeOperacion */


« Última modificación: 11 Febrero 2013, 03:54 am por oblivionxor » En línea

capsulasinformaticas

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #1 en: 11 Febrero 2013, 05:08 am »

El codigo, estan bien, mucho mejor explicado que la mayoria de codigos que veo.


« Última modificación: 11 Febrero 2013, 05:11 am por capsulasinformaticas » En línea

oblivionxor

Desconectado Desconectado

Mensajes: 19


No hay mayor fracaso que apresurar el exito


Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #2 en: 11 Febrero 2013, 05:35 am »

Que tal capsulasinformaticas! ¿Entonces no hay necesidad de modificarle nada respecto a la estructuración de código? ¿Alguna recomendación o algo?
   
En línea

capsulasinformaticas

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #3 en: 11 Febrero 2013, 06:54 am »

Que tal capsulasinformaticas! ¿Entonces no hay necesidad de modificarle nada respecto a la estructuración de código? ¿Alguna recomendación o algo?
  

Tampoco lo lei todo, pero note que al compilarlo se quejaba de las funciones generarNumero y operacion no les pusiste el caso default y un return en el  para hacer que en "cualquier caso" se devuelva un float (por que decia que esas funciones no retornaban un tipo float), pero igual con el while te aseguras que se ingrese un 1, 2 o un 3, asi que no encuentro que haya que cambiarle algo xD, igual no encuentro ser muy experto, pero bueno, esa es mi humilde opinion xD.
« Última modificación: 11 Febrero 2013, 06:59 am por capsulasinformaticas » En línea

oblivionxor

Desconectado Desconectado

Mensajes: 19


No hay mayor fracaso que apresurar el exito


Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #4 en: 11 Febrero 2013, 07:10 am »

Ok capsulasinformaticas muchas gracias por tu opinion :D
 Respecto a lo de la compilacion, creo que es tu compilador por que a mi me compila sin ningun problema.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #5 en: 11 Febrero 2013, 08:39 am »

Bueno yo le cambiaría el diseño de las llaves:

Código
  1.  
  2. do {
  3.         scanf( "%d", &operando );
  4.  
  5.         if ( operando < 1 || operando > 5 ) {
  6.              printf( "Opcion no valida, intenta de nuevo..." );
  7.         }
  8. } while ( operando < 1 || operando > 5 );

Siguiendo las normativas de estilo las pondría abajo:

Código
  1.  
  2. do
  3. {
  4.         scanf( "%d", &operando );
  5.  
  6.         if ( operando < 1 || operando > 5 )
  7.         {
  8.              printf( "Opcion no valida, intenta de nuevo..." );
  9.         }
  10. } while ( operando < 1 || operando > 5 );

La ventaja que tiene es que puede ver mejor a que corresponde cada llave cerrada, ya que se encuentran al mismo nivel.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
oblivionxor

Desconectado Desconectado

Mensajes: 19


No hay mayor fracaso que apresurar el exito


Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #6 en: 11 Febrero 2013, 20:29 pm »

Ok tomare en cuenta tu consejo amchacon! Muchas gracias!
En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #7 en: 11 Febrero 2013, 20:45 pm »

Así por encima, respeto a los comentarios yo creo que siguen sobrando cosas como "Fin de switch", "Fin de for", etc. Cualquiera ve que se acaba, para eso está bien identado :rolleyes:

Otra cosa que veo es en todos esos bucles do-while, realizas la misma comprobación dos veces (con el if).

Saludos!
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #8 en: 11 Febrero 2013, 21:03 pm »

Así por encima, respeto a los comentarios yo creo que siguen sobrando cosas como "Fin de switch", "Fin de for", etc. Cualquiera ve que se acaba, para eso está bien identado :rolleyes:

Otra cosa que veo es en todos esos bucles do-while, realizas la misma comprobación dos veces (con el if).

Saludos!

No!! es mejor dejarlo así, a veces es muy bueno indicar en que momento se acaba el while, pues dependiendo del ide o el editor puede que muestre o no esa ubicación, por eso muy buena idea colocar esas referencias.

Y lo de los if, es solo una forma de validar el dato, hay otras formas, pero esa esta bien, es solo una tecnica, cada quien tiene su propio estilo.

Muy bueno el código, no lo compile, así que no puedo decirte que tal corre, pero mirandolo por encima no le veo problema, es la organización lo que me sorprende, me siento un poco avergonzado al darme cuenta lo mal que documento (o hago poco o nada, o a veces ocupo muchisimas lineas comentando) y creo que es buena idea hablar de este punto.

Lo que acaba de ocurrirseme es diferenciar un poco sobre comentar de una forma la estructura del codigo (fin do-while, fin funcion...) y comentar de otra el funcionamiento del programa (por ejm: Esta variable guarda el valor de operando...) creo que se podria empezar con un signo como % cuando es de estructura y con $ cuando de es de funcionamiento. desde ahora, todo el código que realice, lo hare de esta forma. Gracias muchachos me inspiraron a trabajar mejor, sea el lenguaje que sea.
En línea


leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Programa de Educacion Asistida por Computadora en C.
« Respuesta #9 en: 11 Febrero 2013, 21:43 pm »

Pues como sólo va una instrucción después del if, yo no pondría llaves:

Código
  1. do
  2. {
  3.         scanf( "%d", &operando );
  4.  
  5.         if ( operando < 1 || operando > 5 )
  6.               printf( "Opcion no valida, intenta de nuevo..." );
  7.  
  8. } while ( operando < 1 || operando > 5 );

y arreglaría el "scanf( "%d", &operando );" por si entran un carácter en vez de un número.

Saluditos!.
« Última modificación: 11 Febrero 2013, 21:57 pm por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Educación
Sugerencias y dudas sobre el Foro
‭lipman 5 1,988 Último mensaje 22 Diciembre 2006, 21:13 pm
por
No puedo ejecutar ningun programa en mi Computadora
Seguridad
sakuracards87 2 7,267 Último mensaje 28 Marzo 2012, 16:36 pm
por ro_djm
Con que programa o técnica puedo sacara a los intrusos de mi computadora?
Seguridad
ba_ca 2 2,255 Último mensaje 22 Abril 2012, 17:18 pm
por ba_ca
La educacion prohibida.
Foro Libre
0xDani 3 1,913 Último mensaje 12 Diciembre 2012, 15:14 pm
por Stakewinner00
En mi computadora funciona el programa, en otras no...
Programación C/C++
Trollwer 1 1,254 Último mensaje 2 Diciembre 2020, 18:26 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines