Plantillas programas escolares en C

Iniciado por AlbertoBSD, 21 Noviembre 2018, 23:59 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

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


/*
Twitter: @albertobsd
email: alberto.bsd@gmail.com

Buscame tambien en:
web: https://programaciontrabajosescolares.blogspot.com/
e-mail: ProgramacionTrabajosEscolares@gmail.com
facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
*/

#include<stdio.h>
#include<stdlib.h>

int main() {
int opcion;
int entrar =1;
char temp[10];
do {
printf("1) Opcion 1\n");
printf("2) Opcion 2\n");
printf("3) Opcion 3\n");
printf("4) Salir\n");
do{
printf("Ingrese una opcion");
fgets(temp,10,stdin);
opcion  = strtol(temp,NULL,10);
}while(opcion < 0);
switch(opcion) {
case 1:
printf("Usted selecciono %i\n",opcion);
break;
case 2:
printf("Usted selecciono %i\n",opcion);
break;
case 3:
printf("Usted selecciono %i\n",opcion);
break;
case 4:
printf("Usted selecciono %i\n",opcion);
entrar = 0;
break;
default:
printf("Opcion incorrecta - Mensaje de Error\n");
break;
}
}while(entrar == 1); //Se puede dejar como  "}while(entrar);"
return 0;
}





Fuente: Plantilla de para Capturar Datos y Mostrarlos


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


/*
Twitter: @albertobsd
email: alberto.bsd@gmail.com

Buscame tambien en:
web: https://programaciontrabajosescolares.blogspot.com/
e-mail: ProgramacionTrabajosEscolares@gmail.com
facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
*/

#include<stdio.h> //Funciones printf, fgets
#include<stdlib.h> //realloc
#include<string.h> //strcspn
#include<ctype.h> //tolower

#define MAX_LEN_ALFANUMERICA_1 100
#define MAX_LEN_ALFANUMERICA_2 50
#define MAX_LEN_ALFANUMERICA_3 20

typedef struct plantilla_struct {
char variable_alfanumerica_1[MAX_LEN_ALFANUMERICA_1];
char variable_alfanumerica_2[MAX_LEN_ALFANUMERICA_2];
char variable_alfanumerica_3[MAX_LEN_ALFANUMERICA_3];
int variable_entera_1;
int variable_entera_2;
int variable_entera_3;
float variable_flotante_1;
}TIPO;

int funcion_ingreso_de_datos();
int funcion_imprimir_datos();


TIPO *tipos = NULL;
int contador_tipos = 0;

int main() {
int opcion;
int entrar =1;
char temp[10];
do {
printf("1) funcion_ingreso_de_datos\n");
printf("2) funcion_imprimir_datos\n");
printf("3) Salir\n");
do{
printf("Ingrese una opcion: ");
fgets(temp,10,stdin);
opcion  = strtol(temp,NULL,10);
}while(opcion <= 0); //Mientras sea menor o igual que 0

switch(opcion) {
case 1:
printf("Usted selecciono %i\n",opcion);
funcion_ingreso_de_datos();
break;
case 2:
printf("Usted selecciono %i\n",opcion);
funcion_imprimir_datos();
break;
case 3:
printf("Usted selecciono %i\n",opcion);
entrar = 0;
break;
default:
printf("Opcion incorrecta - Mensaje de Error\n");
break;
}
}while(entrar == 1); //Se puede dejar como  "}while(entrar);"
return 0;
}

int funcion_ingreso_de_datos() {
int opcion;
int entrar =1,entrar_opcion_si_no;
char temp[10];
do {

tipos = realloc(tipos,(contador_tipos+1)*sizeof(struct plantilla_struct)); //Incrementamos el espacio para 1 Variable TIPO mas en el arreglo

//Capturamos variable_alfanumerica_1
printf("Capture variable_alfanumerica_1: ");
fgets(tipos[contador_tipos].variable_alfanumerica_1,MAX_LEN_ALFANUMERICA_1,stdin);
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

//Capturamos variable_alfanumerica_2
printf("Capture variable_alfanumerica_2: ");
fgets(tipos[contador_tipos].variable_alfanumerica_2,MAX_LEN_ALFANUMERICA_2,stdin);
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

//Capturamos variable_alfanumerica_3
printf("Capture variable_alfanumerica_3: ");
fgets(tipos[contador_tipos].variable_alfanumerica_3,MAX_LEN_ALFANUMERICA_3,stdin);
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


//Capturamos variable_entera_1
do {
printf("Capture variable_entera_1: (Solo mayores que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_1 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10

}while(tipos[contador_tipos].variable_entera_1 <= 0); // Salimos del DO solo si el valore leido es mayor o igual a 1

//Capturamos variable_entera_2
do {
printf("Capture variable_entera_2: (Solo mayores o iguales que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_2 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
}while(tipos[contador_tipos].variable_entera_2 < 0); // Salimos del DO solo si el valore leido es mayor o igual a 0


//Capturamos variable_entera_3
do {
printf("Capture variable_entera_3: (Solo Negativos) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_entera_3 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
}while(tipos[contador_tipos].variable_entera_3 >= 0); // Salimos del DO solo si el valor leido es negativo

//Capturamos variable_flotante_1
do {
printf("Capture variable_flotante_1: (Solo distintos que 0) ");
fgets(temp,10,stdin);
tipos[contador_tipos].variable_flotante_1 = strtof(temp,NULL);
}while(tipos[contador_tipos].variable_flotante_1 == 0.0); // Salimos del DO solo si el valor leido distinto de 0

entrar_opcion_si_no = 1;
do{
printf("Desea segir ingresando mas datos? (s/n)\n");
fgets(temp,10,stdin);
switch(tolower(temp[0])) {
case 's':
entrar_opcion_si_no = 0;
printf("Selecciono SI\n");
break;
case 'n':
entrar_opcion_si_no = 0;
printf("Selecciono NO\n");
entrar = 0; // Se cambia la variable para salir del menu principal
break;
default:
printf("opcion incorrecta, solo 's' o 'n'\n");
break;
}
opcion  = strtol(temp,NULL,10);
}while(entrar_opcion_si_no == 1);

contador_tipos++; //Aqui incrementamos el contador_tipos que indica cuantos valores completos tenemos de la estructura plantilla_struct
}while(entrar == 1); //Se puede dejar como  "}while(entrar);"
}

int funcion_imprimir_datos() { //Imprimir los datos no tiene mucho sentido, solo hay que recorrer correctamente la cantidad de registros previamente capturados
int i = 0;
while(i < contador_tipos) {
printf("Datos del registro %i\n",(i+1));
printf("variable_alfanumerica_1: %s\n",tipos[i].variable_alfanumerica_1);
printf("variable_alfanumerica_2: %s\n",tipos[i].variable_alfanumerica_2);
printf("variable_alfanumerica_3: %s\n",tipos[i].variable_alfanumerica_3);
printf("variable_entera_1: %i\n",tipos[i].variable_entera_1);
printf("variable_entera_2: %i\n",tipos[i].variable_entera_2);
printf("variable_entera_3: %i\n",tipos[i].variable_entera_3);
printf("variable_flotante_1: %f\n",tipos[i].variable_flotante_1);
printf("\n");//Enter adicional
i++;
}
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

CalgaryCorpus

- 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.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

AlbertoBSD

Cita de: CalgaryCorpus en 22 Noviembre 2018, 02:27 AM
- El primer do while tiene la condición mal.


Listo!


Cita de: CalgaryCorpus en 22 Noviembre 2018, 02:27 AM
- 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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW