SHOW:
|
|
- or go back to the newest paste.
1 | #include <stdio.h> | |
2 | #include <string.h> | |
3 | #include <ctype.h> // toupper | |
4 | #include <stdlib.h> | |
5 | ||
6 | //DEFINICION DE TIPOS | |
7 | typedef struct{ | |
8 | int nro_legajo; | |
9 | char apellido[45]; | |
10 | char nombre[45]; | |
11 | } alumno; | |
12 | ||
13 | // DECLARACION DE FUNCIONES Y PROCEDIMIENTOS | |
14 | ||
15 | bool continuar_ingreso(); //Solicita finalizar ingreso de datos | |
16 | void imprimir_alumnos(alumno vec[], int dim); //Muestra el vector de alumnos | |
17 | void ingresar_alumnos(alumno vec[],int *dim); //Solicita el ingreso de alumnos al sistema | |
18 | void ingresar_campos_alumno(alumno vec[], int i);//Solicita el ingreso de datos de un alumno en particular | |
19 | ||
20 | void intercambiar_alumnos(alumno *x,alumno *y);//Intercambia dos structuras alumno | |
21 | void insercion(alumno vec[], int dim); //Ordenamiento por método inserción | |
22 | void burbuja(alumno vec[],int dim);//Ordenamiento por método burbuja | |
23 | ||
24 | //CONSTANTES | |
25 | const int tope = 100; //dimesión física del vector | |
26 | ||
27 | //PROGRAMA PRINCIPAL | |
28 | int main(){ | |
29 | int dim; | |
30 | alumno vec[tope]; | |
31 | ||
32 | ingresar_alumnos(vec,&dim); | |
33 | printf("\n\n SIN ORDENAR"); | |
34 | imprimir_alumnos(vec,dim); | |
35 | burbuja(vec,dim); | |
36 | printf("\n\n ORDENADOS POR APELLIDO Y NOMBRE"); | |
37 | imprimir_alumnos(vec,dim); | |
38 | ||
39 | return 0; | |
40 | } | |
41 | ||
42 | ||
43 | //DEFINICION DE FUNCIONES Y PROCEDIMIENTOS | |
44 | ||
45 | bool continuar_ingreso(){ | |
46 | char c; | |
47 | printf("\n Presione <F + ENTER > para finalizar el ingreso de datos \n"); | |
48 | scanf(" %c",&c); | |
49 | if(toupper(c)=='F'){ | |
50 | return false; | |
51 | } | |
52 | return true; | |
53 | } | |
54 | ||
55 | void imprimir_alumnos(alumno vec[], int dim){ | |
56 | int i; | |
57 | for(i=0;i<dim;i++){ | |
58 | printf("\nLegajo: %d", vec[i].nro_legajo); | |
59 | printf("\nApellido y Nombre: %s %s ", vec[i].apellido,vec[i].nombre); | |
60 | printf("\n\n"); | |
61 | } | |
62 | } | |
63 | ||
64 | void ingresar_campos_alumno(alumno vec[], int i){ | |
65 | printf("ID de Alumno %d",i,"/n/n"); | |
66 | ||
67 | printf("\nLegalo:"); | |
68 | scanf("%d",&vec[i].nro_legajo); | |
69 | fflush(stdin); | |
70 | ||
71 | printf("Apellido:"); | |
72 | scanf("%s",&vec[i].apellido); | |
73 | fflush(stdin); | |
74 | ||
75 | printf("Nombre:"); | |
76 | scanf("%s",&vec[i].nombre); | |
77 | fflush(stdin); | |
78 | } | |
79 | ||
80 | ||
81 | void ingresar_alumnos(alumno vec[],int *dim){ | |
82 | int i=-1; | |
83 | do{ | |
84 | i++; | |
85 | ingresar_campos_alumno(vec, i); | |
86 | }while(continuar_ingreso() && i<tope); | |
87 | *dim=i+1; | |
88 | } | |
89 | ||
90 | void intercambiar_alumnos(alumno *x,alumno *y){ | |
91 | alumno aux; | |
92 | aux = *x; | |
93 | *x = *y; | |
94 | *y = aux; | |
95 | } | |
96 | ||
97 | void insercion(alumno vec[],int dim){ | |
98 | alumno temp; | |
99 | int i,j; | |
100 | ||
101 | for(i=1;i<dim;i++){ | |
102 | temp = vec[i]; | |
103 | j = i-1; | |
104 | while(j>=0 && (strcmp(temp.apellido,vec[j].apellido)>0)){ | |
105 | vec[j+1]=vec[j]; | |
106 | j--; | |
107 | } | |
108 | vec[j+1] = temp; | |
109 | } | |
110 | } | |
111 | ||
112 | void burbuja(alumno vec[],int dim){ | |
113 | int i,j; | |
114 | alumno aux; | |
115 | for(i=0; i<dim; i++){ | |
116 | for(j=0 ; j<1; j++){ | |
117 | if (strcmp(vec[j].apellido,vec[j+1].apellido)>0){ | |
118 | intercambiar_alumnos(&vec[j],&vec[j+1]); | |
119 | }else if (strcmp(vec[j].apellido,vec[j+1].apellido)==0){ | |
120 | if (strcmp(vec[j].nombre,vec[j+1].nombre)>0){ | |
121 | intercambiar_alumnos(&vec[j],&vec[j+1]); | |
122 | } | |
123 | } | |
124 | } | |
125 | } | |
126 | } |