Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AlbertoBSD en 21 Noviembre 2018, 23:59 pm



Título: Plantillas programas escolares en C
Publicado por: AlbertoBSD en 21 Noviembre 2018, 23:59 pm
El siguiente post muestra  fragmentos de código en C que seguido son utilizados en los programas pedidos de Tareas en las escuelas.

Plantilla de un Menu de opciones usando do-while + switch

Descargar Menu_do_while_switch.c (http://bit.ly/2OWAqtf)

Código
  1. /*
  2. Twitter: @albertobsd
  3. email: alberto.bsd@gmail.com
  4.  
  5. Buscame tambien en:
  6. web: https://programaciontrabajosescolares.blogspot.com/
  7. e-mail: ProgramacionTrabajosEscolares@gmail.com
  8. facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
  9. */
  10.  
  11. #include<stdio.h>
  12. #include<stdlib.h>
  13.  
  14. int main() {
  15. int opcion;
  16. int entrar =1;
  17. char temp[10];
  18. do {
  19. printf("1) Opcion 1\n");
  20. printf("2) Opcion 2\n");
  21. printf("3) Opcion 3\n");
  22. printf("4) Salir\n");
  23. do{
  24. printf("Ingrese una opcion");
  25. fgets(temp,10,stdin);
  26. opcion  = strtol(temp,NULL,10);
  27. }while(opcion < 0);
  28. switch(opcion) {
  29. case 1:
  30. printf("Usted selecciono %i\n",opcion);
  31. break;
  32. case 2:
  33. printf("Usted selecciono %i\n",opcion);
  34. break;
  35. case 3:
  36. printf("Usted selecciono %i\n",opcion);
  37. break;
  38. case 4:
  39. printf("Usted selecciono %i\n",opcion);
  40. entrar = 0;
  41. break;
  42. default:
  43. printf("Opcion incorrecta - Mensaje de Error\n");
  44. break;
  45. }
  46. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  47. return 0;
  48. }
  49.  



Fuente: Plantilla de para Capturar Datos y Mostrarlos (https://albertobsd.blogspot.com/2018/11/plantilla-de-para-capturar-datos-y.html)


Plantilla de para Capturar Datos y Mostrarlos

Usando estructura de datos y memoria dinámica para los datos almacenados.

Descarga plantilla_capturar_mostrar_datos.c (http://bit.ly/2FykbmA)

Código
  1. /*
  2. Twitter: @albertobsd
  3. email: alberto.bsd@gmail.com
  4.  
  5. Buscame tambien en:
  6. web: https://programaciontrabajosescolares.blogspot.com/
  7. e-mail: ProgramacionTrabajosEscolares@gmail.com
  8. facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
  9. */
  10.  
  11. #include<stdio.h> //Funciones printf, fgets
  12. #include<stdlib.h> //realloc
  13. #include<string.h> //strcspn
  14. #include<ctype.h> //tolower
  15.  
  16. #define MAX_LEN_ALFANUMERICA_1 100
  17. #define MAX_LEN_ALFANUMERICA_2 50
  18. #define MAX_LEN_ALFANUMERICA_3 20
  19.  
  20. typedef struct plantilla_struct {
  21. char variable_alfanumerica_1[MAX_LEN_ALFANUMERICA_1];
  22. char variable_alfanumerica_2[MAX_LEN_ALFANUMERICA_2];
  23. char variable_alfanumerica_3[MAX_LEN_ALFANUMERICA_3];
  24. int variable_entera_1;
  25. int variable_entera_2;
  26. int variable_entera_3;
  27. float variable_flotante_1;
  28. }TIPO;
  29.  
  30. int funcion_ingreso_de_datos();
  31. int funcion_imprimir_datos();
  32.  
  33.  
  34. TIPO *tipos = NULL;
  35. int contador_tipos = 0;
  36.  
  37. int main() {
  38. int opcion;
  39. int entrar =1;
  40. char temp[10];
  41. do {
  42. printf("1) funcion_ingreso_de_datos\n");
  43. printf("2) funcion_imprimir_datos\n");
  44. printf("3) Salir\n");
  45. do{
  46. printf("Ingrese una opcion: ");
  47. fgets(temp,10,stdin);
  48. opcion  = strtol(temp,NULL,10);
  49. }while(opcion <= 0); //Mientras sea menor o igual que 0
  50.  
  51. switch(opcion) {
  52. case 1:
  53. printf("Usted selecciono %i\n",opcion);
  54. funcion_ingreso_de_datos();
  55. break;
  56. case 2:
  57. printf("Usted selecciono %i\n",opcion);
  58. funcion_imprimir_datos();
  59. break;
  60. case 3:
  61. printf("Usted selecciono %i\n",opcion);
  62. entrar = 0;
  63. break;
  64. default:
  65. printf("Opcion incorrecta - Mensaje de Error\n");
  66. break;
  67. }
  68. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  69. return 0;
  70. }
  71.  
  72. int funcion_ingreso_de_datos() {
  73. int opcion;
  74. int entrar =1,entrar_opcion_si_no;
  75. char temp[10];
  76. do {
  77.  
  78. tipos = realloc(tipos,(contador_tipos+1)*sizeof(struct plantilla_struct)); //Incrementamos el espacio para 1 Variable TIPO mas en el arreglo
  79.  
  80. //Capturamos variable_alfanumerica_1
  81. printf("Capture variable_alfanumerica_1: ");
  82. fgets(tipos[contador_tipos].variable_alfanumerica_1,MAX_LEN_ALFANUMERICA_1,stdin);
  83. tipos[contador_tipos].variable_alfanumerica_1[strcspn(tipos[contador_tipos].variable_alfanumerica_1,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  84.  
  85. //Capturamos variable_alfanumerica_2
  86. printf("Capture variable_alfanumerica_2: ");
  87. fgets(tipos[contador_tipos].variable_alfanumerica_2,MAX_LEN_ALFANUMERICA_2,stdin);
  88. tipos[contador_tipos].variable_alfanumerica_2[strcspn(tipos[contador_tipos].variable_alfanumerica_2,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  89.  
  90. //Capturamos variable_alfanumerica_3
  91. printf("Capture variable_alfanumerica_3: ");
  92. fgets(tipos[contador_tipos].variable_alfanumerica_3,MAX_LEN_ALFANUMERICA_3,stdin);
  93. tipos[contador_tipos].variable_alfanumerica_3[strcspn(tipos[contador_tipos].variable_alfanumerica_3,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  94.  
  95.  
  96. //Capturamos variable_entera_1
  97. do {
  98. printf("Capture variable_entera_1: (Solo mayores que 0) ");
  99. fgets(temp,10,stdin);
  100. tipos[contador_tipos].variable_entera_1 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  101.  
  102. }while(tipos[contador_tipos].variable_entera_1 <= 0); // Salimos del DO solo si el valore leido es mayor o igual a 1
  103.  
  104. //Capturamos variable_entera_2
  105. do {
  106. printf("Capture variable_entera_2: (Solo mayores o iguales que 0) ");
  107. fgets(temp,10,stdin);
  108. tipos[contador_tipos].variable_entera_2 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  109. }while(tipos[contador_tipos].variable_entera_2 < 0); // Salimos del DO solo si el valore leido es mayor o igual a 0
  110.  
  111.  
  112. //Capturamos variable_entera_3
  113. do {
  114. printf("Capture variable_entera_3: (Solo Negativos) ");
  115. fgets(temp,10,stdin);
  116. tipos[contador_tipos].variable_entera_3 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  117. }while(tipos[contador_tipos].variable_entera_3 >= 0); // Salimos del DO solo si el valor leido es negativo
  118.  
  119. //Capturamos variable_flotante_1
  120. do {
  121. printf("Capture variable_flotante_1: (Solo distintos que 0) ");
  122. fgets(temp,10,stdin);
  123. tipos[contador_tipos].variable_flotante_1 = strtof(temp,NULL);
  124. }while(tipos[contador_tipos].variable_flotante_1 == 0.0); // Salimos del DO solo si el valor leido distinto de 0
  125.  
  126. entrar_opcion_si_no = 1;
  127. do{
  128. printf("Desea segir ingresando mas datos? (s/n)\n");
  129. fgets(temp,10,stdin);
  130. switch(tolower(temp[0])) {
  131. case 's':
  132. entrar_opcion_si_no = 0;
  133. printf("Selecciono SI\n");
  134. break;
  135. case 'n':
  136. entrar_opcion_si_no = 0;
  137. printf("Selecciono NO\n");
  138. entrar = 0; // Se cambia la variable para salir del menu principal
  139. break;
  140. default:
  141. printf("opcion incorrecta, solo 's' o 'n'\n");
  142. break;
  143. }
  144. opcion  = strtol(temp,NULL,10);
  145. }while(entrar_opcion_si_no == 1);
  146.  
  147. contador_tipos++; //Aqui incrementamos el contador_tipos que indica cuantos valores completos tenemos de la estructura plantilla_struct
  148. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  149. }
  150.  
  151. int funcion_imprimir_datos() { //Imprimir los datos no tiene mucho sentido, solo hay que recorrer correctamente la cantidad de registros previamente capturados
  152. int i = 0;
  153. while(i < contador_tipos) {
  154. printf("Datos del registro %i\n",(i+1));
  155. printf("variable_alfanumerica_1: %s\n",tipos[i].variable_alfanumerica_1);
  156. printf("variable_alfanumerica_2: %s\n",tipos[i].variable_alfanumerica_2);
  157. printf("variable_alfanumerica_3: %s\n",tipos[i].variable_alfanumerica_3);
  158. printf("variable_entera_1: %i\n",tipos[i].variable_entera_1);
  159. printf("variable_entera_2: %i\n",tipos[i].variable_entera_2);
  160. printf("variable_entera_3: %i\n",tipos[i].variable_entera_3);
  161. printf("variable_flotante_1: %f\n",tipos[i].variable_flotante_1);
  162. printf("\n");//Enter adicional
  163. i++;
  164. }
  165. }
  166.  


Título: Re: Plantillas programas escolares en C
Publicado por: CalgaryCorpus en 22 Noviembre 2018, 02:27 am
- El primer do while tiene la condición mal.
- Los siguientes codigos repiten varias veces el mismo código con distintas variables. Sugiero refactorizar en vez de repetir el código como lo haces.


Título: Re: Plantillas programas escolares en C
Publicado por: AlbertoBSD en 22 Noviembre 2018, 16:11 pm
- El primer do while tiene la condición mal.


Listo!


- Los siguientes codigos repiten varias veces el mismo código con distintas variables. Sugiero refactorizar en vez de repetir el código como lo haces.

La plantilla va orientada a alguien que esta empezando con la programación. Y apenas esta aprendiendo conceptos básicos, si ya después el usuario que utilice la plantilla quiere refactorizar el código entonces sera cosa del usuario que utilice la plantilla.

Saludos