Advertisement
gonzalob

Untitled

Jun 2nd, 2020
1,138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7.     int matricula;
  8.     char nombre[30];
  9.     char genero; //m, f, o
  10. } stAlumno;
  11.  
  12. int cargarArreglo(stAlumno alumnos[100], int dim);
  13. void mostrarAlumno(stAlumno alumno);
  14. void mostrarArreglo(stAlumno alumnos[100],int validos);
  15. int mostrarAlumnoXmatricula(stAlumno alumnos[100],int validos,int matricula);
  16. void ordenacionXseleccion(stAlumno alumnos[100],int validos);
  17. int buscaPosMenorAlumno(stAlumno alumnos[100], int posInicial, int validos);
  18. int insertarAlumnoArregloOrdenado(stAlumno alumnos[100],int validos,stAlumno nuevoAlumno);
  19. void ordenacionXinsercion(stAlumno alumnos[100],int validos);
  20. int cantidadAlumnosXgenero(stAlumno alumnos[100],int validos,char genero);
  21. void mostrarAlumnoXgenero(stAlumno alumnos[100],int validos,char genero);
  22. stAlumno cargarAlumno();
  23.  
  24.  
  25. int main()
  26. {
  27.     stAlumno alumnos[100];
  28.     int alumnosCargados = cargarArreglo(alumnos,100);
  29.     int encontrado = 0;
  30.     char genero = 'm';
  31.     stAlumno nuevoAlumno;
  32.     int opcion = 0;
  33.     int matricula = 0;
  34.     do
  35.     {
  36.         printf("1-Mostrar arreglo\n");
  37.         printf("2-Mostrar alumno con matricula)\n");
  38.         printf("3-Ordenar x Seleccion)\n");
  39.         printf("4-Mostrar alumnos segun genero\n");
  40.         printf("5-Insertar nuevo alumno\n");
  41.         printf("6-Ordenar x Insercion\n");
  42.         printf("7-Cantidad de alumnos con genero\n");
  43.         printf("8-Salir\n");
  44.         scanf("%d", &opcion);
  45.         system("cls");
  46.  
  47.         // ------ LLAMADO DE FUNCIONES -----------
  48.         switch(opcion)
  49.         {
  50.         case 1:
  51.             mostrarArreglo(alumnos, alumnosCargados);
  52.             break;
  53.         case 2:
  54.             printf("Ingrese la matricula: \n");
  55.             fflush(stdin);
  56.             scanf("%d", &matricula);
  57.             encontrado =mostrarAlumnoXmatricula(alumnos, alumnosCargados,matricula);
  58.             if (encontrado == 0)
  59.                 printf("no encontrado!\n");
  60.             break;
  61.         case 3:
  62.             ordenacionXseleccion(alumnos, alumnosCargados);
  63.             mostrarArreglo(alumnos, alumnosCargados);
  64.             break;
  65.         case 4:
  66.             printf("Ingrese el genero: ");
  67.             fflush(stdin);
  68.             scanf("%c", &genero);
  69.             mostrarAlumnoXgenero(alumnos, alumnosCargados, genero);
  70.             break;
  71.         case 5:
  72.             nuevoAlumno = cargarAlumno();
  73.             alumnosCargados = insertarAlumnoArregloOrdenado(alumnos, alumnosCargados,nuevoAlumno);
  74.             break;
  75.         case 6:
  76.             ordenacionXinsercion(alumnos, alumnosCargados);
  77.             mostrarArreglo(alumnos, alumnosCargados);
  78.             break;
  79.         case 7:
  80.             printf("Ingrese el genero: ");
  81.             fflush(stdin);
  82.             scanf("%c", &genero);
  83.             printf("Alumnos encontrados: %d\n",cantidadAlumnosXgenero(alumnos, alumnosCargados, genero));
  84.             break;
  85.         default:
  86.             printf("Opcion invalida");
  87.             break;
  88.         }
  89.  
  90.     }
  91.     while (opcion != 8);
  92.  
  93.     return 0;
  94. }
  95.  
  96. stAlumno cargarAlumno()
  97. {
  98.     stAlumno aux;
  99.     printf("ingrese matricula\n");
  100.     fflush(stdin);
  101.     scanf("%d",&aux.matricula);
  102.     printf("ingrese genero\n");
  103.     fflush(stdin);
  104.     scanf("%c",&aux.genero);
  105.     printf("ingrese nombre\n");
  106.     fflush(stdin);
  107.     scanf("%s",&aux.nombre);
  108.     return aux;
  109. }
  110.  
  111. //Hacer una función que cargue un arreglo de alumnos, hasta que el usuario lo decida.
  112. int cargarArreglo(stAlumno alumnos[100], int dim)
  113. {
  114.     char mander = 's';
  115.     int indice = 0;
  116.     stAlumno alumnoAux;
  117.     while ((mander == 's')&&(indice<dim))
  118.     {
  119.         alumnoAux = cargarAlumno();
  120.  
  121.         alumnos[indice] = alumnoAux;
  122.  
  123.         printf("desea seguir?\n");
  124.         fflush(stdin);
  125.         scanf("%c",&mander);
  126.  
  127.         indice++;
  128.     }
  129.     return indice;
  130. }
  131.  
  132. //Hacer una función que muestre un arreglo de alumnos por pantalla. Modularizar.
  133. void mostrarArreglo(stAlumno alumnos[100],int validos)
  134. {
  135.     int indice = 0;
  136.     for (indice =0; indice<validos; indice++)
  137.     {
  138.         stAlumno alumAux = alumnos[indice];
  139.         printf("mostrando alumno %d -> ",indice+1);
  140.         mostrarAlumno(alumAux);
  141.         printf("\n");
  142.     }
  143. }
  144.  
  145. void mostrarAlumno(stAlumno alumno)
  146. {
  147.     printf("el nombre es ... %s\n",alumno.nombre);
  148.     printf("el genero es ... %c\n",alumno.genero);
  149.     printf("el matricula es ... %d\n",alumno.matricula);
  150. }
  151.  
  152. //Hacer una función que muestre por pantalla los datos de un alumno, conociendo su matrícula. Modularizar.
  153.  
  154. int mostrarAlumnoXmatricula(stAlumno alumnos[100],int validos,int matricula)
  155. {
  156.     int encontrado = 0;
  157.     int indice = 0;
  158.     while ((encontrado==0)&&(indice<validos))
  159.     {
  160.         stAlumno alumAux = alumnos[indice];
  161.         if (alumAux.matricula == matricula)
  162.         {
  163.             mostrarAlumno(alumAux);
  164.             encontrado = 1;
  165.         }
  166.         indice++;
  167.     }
  168.     return encontrado;
  169. }
  170.  
  171. //Hacer una función que ordene el arreglo de alumnos por medio del método de selección. El criterio de ordenación es el número de matrícula.
  172. void ordenacionXseleccion(stAlumno alumnos[100],int validos)
  173. {
  174.     int indice = 0;
  175.     int posMenor = 0;
  176.     stAlumno alumnoMenor;
  177.  
  178.     while (indice<validos)
  179.     {
  180.         posMenor = buscaPosMenorAlumno(alumnos,indice,validos);
  181.         alumnoMenor = alumnos[posMenor];
  182.         alumnos[posMenor] = alumnos[indice];
  183.         alumnos[indice] = alumnoMenor;
  184.         indice++;
  185.     }
  186. }
  187.  
  188. int buscaPosMenorAlumno(stAlumno alumnos[100], int posInicial, int validos)
  189. {
  190.     int posMenor = posInicial;
  191.     int menorMatricula = alumnos[posMenor].matricula;
  192.     int indice = posInicial + 1;
  193.  
  194.     while(indice < validos)
  195.     {
  196.         if (menorMatricula > alumnos[indice].matricula)
  197.         {
  198.             menorMatricula = alumnos[indice].matricula;
  199.             posMenor = indice;
  200.         }
  201.         indice++;
  202.     }
  203.     return posMenor;
  204. }
  205.  
  206. //Hacer una función que muestre por pantalla los datos de los estudiantes de un género determinado (se envía por parámetro). Modularizar.
  207. void mostrarAlumnoXgenero(stAlumno alumnos[100],int validos,char genero)
  208. {
  209.     for (int indice = 0; indice<validos; indice++)
  210.     {
  211.         if (genero == alumnos[indice].genero)
  212.         {
  213.             mostrarAlumno(alumnos[indice]);
  214.         }
  215.     }
  216. }
  217.  
  218. //Hacer una función que inserte en un arreglo ordenado por matrícula un nuevo dato, conservando el orden.
  219. int insertarAlumnoArregloOrdenado(stAlumno alumnos[100],int validos,stAlumno nuevoAlumno)
  220. {
  221.     int nuevosValidos = validos + 1;
  222.     int ultimo = validos - 1;
  223.  
  224.     while ((ultimo>=0)&&(alumnos[ultimo].matricula > nuevoAlumno.matricula))
  225.     {
  226.         alumnos[ultimo+1] = alumnos[ultimo];
  227.         ultimo--;
  228.     }
  229.  
  230.     alumnos[ultimo+1] = nuevoAlumno;
  231.  
  232.     return nuevosValidos;
  233. }
  234.  
  235. void insertarAlumnoArregloOrdenadoxNombre(stAlumno alumnos[100],int ultimo,stAlumno nuevoAlumno)
  236. {
  237.     int indice = ultimo;
  238.  
  239.      while ( (indice >= 0) && (strcmp(alumnos[indice].nombre,nuevoAlumno.nombre) > 0))
  240.     {
  241.         alumnos[indice+1] = alumnos[indice];
  242.         indice--;
  243.     }
  244.     alumnos[indice+1] = nuevoAlumno;
  245. }
  246.  
  247. //Hacer una función que ordene el arreglo de alumnos por medio del método de inserción. El criterio de ordenación es el nombre
  248. void ordenacionXinsercion(stAlumno alumnos[100],int validos)
  249. {
  250.     int indice = 0;
  251.     while (indice < validos)
  252.     {
  253.         insertarAlumnoArregloOrdenadoxNombre(alumnos,indice,alumnos[indice+1]);
  254.         indice++;
  255.     }
  256. }
  257.  
  258. //Hacer una función que cuente y retorne la cantidad de estudiantes de un género determinado (se envía por parámetro) que tiene un arreglo de alumnos.
  259. int cantidadAlumnosXgenero(stAlumno alumnos[100],int validos,char genero)
  260. {
  261.     int contador=0;
  262.     for (int indice = 0; indice<validos; indice++)
  263.     {
  264.         if (genero == alumnos[indice].genero)
  265.         {
  266.             contador++;
  267.         }
  268.     }
  269.     return contador;
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement