Estructuras de Datos 2: Ejercicio con Vectores en Lenguaje C

Buenas amigos estudiantes, hoy les traigo lo que fue para mi, este fin de semana, mi examen de estructuras de datos II. Lo comparto, con mucho cariño, no porque haya sido excelente, sino porque tuve muchas dificultades para hacerlo. Y lo que aprendí, es motivo para publicarlo, así, pueden mejorar el conocimiento, al mismo tiempo, reflexionar en cuánto cómo hacer mejor el programa y cuáles herramientas pueden optimizarlo. El programa a continuación es una base. Sin mas que comentarles, empecemos.

1.El departamento de personal de una escuela tiene registros de nombre, sexo y edad de cada uno de los profesores adscrito al mismo. Diseñe un programa en C modular que calcule e imprima lo siguiente:

a) Edad promedio del grupo de profesores
b) Nombre del profesor más joven del grupo
c) Nombre de profesoras con edad mayor al promedio
d) Nombre de profesores con edades menores al promedio.



#include <stdio.h>
#include <stdlib.h>
//esta libreria es necesaria para poder imprimir los nombres de los profesores
#include <string.h>

//el ejercicio indica que el personal ya tiene los vectores, por ello hay que crearlos con datos
int edad[]={50,35,46,77,24};

//esta fue la mejor manera que encontre para imprimir el vector con nombres, pero sigue sin ser óptima 

char *nombre[100];
char* nombre0= "Luis Morillo";
char* nombre1= "Eglis Perez";
char* nombre2= "Luisa Castillo";
char* nombre3= "Rosa Palma";
char* nombre4= "Jose Rodriguez";

//1 masculino, 2 femenino (es mas sencillo trabajar con numeros)
int sexo[]={1,2,2,2,1};

int edadpromedio(int edad[])
{
    int i=0;
    int suma=0;
    int promedio=0;
    for (i=0; i<5; i++)
    {
        suma = suma + edad[i];
   }    
//dividido entre 5 porque nada mas ubique 5 profesores en el vector inicial
    promedio = suma / 5;

    return promedio;
}

//profesor mas joven del grupo
void profjoven(int edad[5], char nombre[])
{
    int i=0;

//la menor edad debe tener un numero muy alto para poder ejercer la primera comparacion
//solo se comparan vectores
    int menoredad[0]={100};
//posicion se encargara de determinar el punto donde se encuentra la menor edad  
    int posicion;
//el ciclo es para 5 profesores
    for (i=0; i<5; i++)
    {
        if (menoredad[i]> edad[i])
        {
            menoredad[i] = edad[i];
            posicion = i;
        }
    }  
//hace un llamado al vector donde se encuentra el nombre del profesor en dicha posicion
    switch (posicion)
    {
//para imprimir nombres se utiliza %s y no %c a pesar de ser un char
//el  %c no imprime la cadena completa del vector, en cambio el %s si lo hace
 
        case 0 : {printf("\nEl profesor mas joven es: %s\n",nombre0);
        break;}
        case 1 :  {printf("\nEl profesor mas joven es: %s\n",nombre1);
        break;}
        case 2 : {printf("\nEl profesor mas joven es: %s\n",nombre2);
        break;}
        case 3 : {printf("\nEl profesor mas joven es: %s\n",nombre3);
        break;}
        case 4 : {printf("\nEl profesor mas joven es: %s\n",nombre4);
        break;}
    }
  
}

//profesora con edad mayor al promedio
void profmayorprom(char nombre[], int sexo[])
{
    edadpromedio(edad[5]);
    int i=0;
    int j=0;
    int posicion;

//vector que sirve para ejercer las comparaciones 
    int femenino[5] = {2,2,2,2,2};
//como ya había corrido el programa sabía que ese era el valor promedio
//lo ideal es usar edadpromedio para llenar el vector
    int promedio[5] = {46,46,46,46,46};
    printf("\nLas profesoras con edad mayor al promedio son: \n");
    do {
    for (i=0; i<5; i++)
        for (j=0; j<5; j++)
    {
//determina que la edad sea mayor al promedio
        if (edad[j] > promedio[j])
        {
          posicion = j;
        }
                 
        }
//ubica los nombres de las profesoras con edad mayor al promedio
        switch (posicion)
    {
        case 0 : {printf("\n%s\n",nombre0);
        break;}
        case 1 :  {printf("\n%s\n",nombre1);
        break;}
        case 2 : {printf("\n%s\n",nombre2);
        break;}
        case 3 : {printf("\n%s\n",nombre3);
        break;}
        case 4 : {printf("\n%s\n",nombre4);
        break;}
    }
    } while (sexo[i] == femenino[i]); //mientras sean profesoras
      }

//profesores con edad menor al promedio
void profmenorprom(char nombre[], int sexo[])
{
    edadpromedio(edad[5]);
    int i=0;
    int j=0;
    int posicion;
//vector para profesores (hombres)
    int masculino[5]={1,1,1,1,1};
//promedio de las edades (dado previamente por el programa)
    int promedio[5]={46,46,46,46,46};
    printf("\nLos profesores con edad menor al promedio son: \n");
    do {
    for (i=0; i<5; i++)
        for (j=0; j<5; j++)
    {
//compara la menor edad en relacion a la edad promedio
        if (edad[j] < promedio[j])
        {
          posicion = j;
        }
            }
//determina el nombre del profesor con menor edad en relacion al promedio
    
  switch (posicion)
        {
        case 0 : {printf("\n%s\n",nombre0);
        break;}
        case 1 :  {printf("\n%s\n",nombre1);
        break;}
        case 2 : {printf("\n%s\n",nombre2);
        break;}
        case 3 : {printf("\n%s\n",nombre3);
        break;}
        case 4 : {printf("\n%s\n",nombre4);
        break;}
    }
}while (sexo[i] == masculino[i]); //mientras sea hombre el profesor
}
 

//parte principal del programa, solo llamara los metodos en el orden pre establecido
int main(int argc, char** argv) {
edadpromedio(edad);
//como el metodo edadpromedio estaba pensado para ser usado como una variable entera
//se procedio a imprimir en el principal y no desde su mismo metodo para evitar errores
printf("\nEdad Promedio del grupo de profesores: %d\n",edadpromedio(edad));
profjoven(edad,nombre);
profmayorprom(nombre,sexo);
profmenorprom(nombre,sexo);
//pausa la pantalla para ver los resultados
system("pause");
return (EXIT_SUCCESS);
}

De todas maneras, para defender mi código debía hacer un video, el cual les dejaré acá; sin embargo, sé que no se escucha a la perfección, debido a que mis amables vecinos tenían una fiesta (no los juzgo, era sábado por la noche!) pero, la idea les servirá para perfeccionar este programa! 


Muchas gracias por leerme! 
A estudiar!
 

Comentarios