View difference between Paste ID: k1PmhJL0 and BL2CSRXM
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
}