Descripción del Problema
Quienes recibiran 20 cables de longitudes distintas que van desde 1 cm a 35 cm de manera al azar, nmo recibirán cables de longitudes iguales. Representar cada cable con * por cada centímetro y al final de cada cable su longitud representada en unidades. Por ejemplo:
Imprimir de manera automática todos los pasos de ordenamiento. Debe poder verse cada paso del ordenamiento en pantalla y diga en cuantos pasos se ha realizado una vez terminado el proceso de impresión de ordenamiento. Por ejemplo:
Solución
#include <stdio.h>
#include <stdlib.h>
int NUMERO_DE_CABLES = 20;
int NUMERO_DE_ALUMNOS = 10;
int MINIMO = 1;
int MAXIMO = 35;
char nombres[10][50] = {
"Agustin",
"Beatriz",
"Carlos",
"Daniela",
"Eugenio",
"Fabiola",
"Gustavo",
"Hilda",
"Ignacio",
"Juan"
};
int cables[10][20];
void printCablesAlumno(int id)
{
system("cls");
if(id < 0 || id > NUMERO_DE_ALUMNOS-1)
{
printf("El alumno que seleccionaste no existe el rango esta entre 1-10.\n");
}
else
{
printf("%i-\t%s\n",id+1, nombres[id]);
int i,j;
for(i = 0; i < NUMERO_DE_CABLES; i++)
{
for(j=0; j < cables[id][i]; j++)
{
printf("*");
}
printf(" %i cm\n", cables[id][i]);
}
}
}
void ordenarCables(int id_alumno)
{
system("cls");
printf("%i-\t%s\n",id_alumno+1, nombres[id_alumno]);
int i,j,temp, numero_de_permutaciones = 0;
// procedemos a ordenar con el metodo burbuja
for (i=1; i<NUMERO_DE_CABLES; i++)
for(j=0 ; j<NUMERO_DE_CABLES - 1; j++)
if (cables[id_alumno][j] > cables[id_alumno][j+1])
{
system("cls");
printf("%i-\t%s\n",id_alumno+1, nombres[id_alumno]);
// Hacemos una Permutacion
temp = cables[id_alumno][j];
cables[id_alumno][j] = cables[id_alumno][j+1];
cables[id_alumno][j+1] = temp;
// Imprimimos en Pantalla el nuevo ordenamiento de los cables
printCablesAlumno(id_alumno);
// Contabilizamos las permituaciones
numero_de_permutaciones++;
}
printf("Se ordenaron en %i pasos", numero_de_permutaciones);
// scanneamos el enter
fflush(stdin);
getchar();
}
void listarAlumnos()
{
int i;
printf("Alumnos con cables:\n");
for(i = 0; i < NUMERO_DE_ALUMNOS; i++)
{
printf("%i-\t%s\n",i+1, nombres[i]);
}
}
/**
* @brief inicializarCables
* Con esta funcion inicializamos los valores de los cables que tendra cada alumno
*/
void inicializarCables()
{
int N_ALUMNO,N_CABLE;
int numero_aleatorio;
int i;
for(N_ALUMNO=0; N_ALUMNO < NUMERO_DE_ALUMNOS; N_ALUMNO++)
{
for(N_CABLE=0; N_CABLE < NUMERO_DE_CABLES; N_CABLE++)
{
buscar:
numero_aleatorio = (rand() % (MAXIMO - MINIMO + 1)) + MINIMO;
// nos aseguramos que el numero aleatorio no este en uso
for (i = 0; i < NUMERO_DE_CABLES; i++)
{
if(cables[N_ALUMNO][i] == numero_aleatorio )
{
// una vez que ya encontramos que el numero esta en uso no necesitamos segiur checando
goto buscar;
}
}
cables[N_ALUMNO][N_CABLE] = numero_aleatorio;
}
}
}
int main()
{
int opcion;
int opcion_de_ordenamiento;
int alumno_id;
int i,j;
inicializarCables();
do{
system("cls");
listarAlumnos();
printf("\nOpciones:\n");
printf("1-Ver a los alumnos por separado\n");
printf("2-Ordenar a todos los alumnos\n");
printf("3-Salir\n\n");
printf("Opcion:");
scanf("%i",&opcion);
switch (opcion)
{
case 1:
system("cls");
listarAlumnos();
printf("Que alumno Deseas ver? ");
scanf("%i", &alumno_id);
printCablesAlumno(alumno_id-1);
printf("Deseas ordenar (1-SI, 2-NO)");
scanf("%i", &opcion_de_ordenamiento);
if(opcion_de_ordenamiento == 1)
{
// SI
ordenarCables(alumno_id-1);
}
break;
case 2:
for(i = 0; i < NUMERO_DE_ALUMNOS; i++)
{
ordenarCables(i);
}
break;
case 3:
printf("\nPrograma Terminado.\n\n");
break;
}
}while(opcion != 3);
return 0;
}
Comentarios
Publicar un comentario