Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- /*prototipos del archivo h*/
- //int leeAlumno(int )
- void lea_datos(int**,char***,int*);
- void imprimir_datos(int*,char**,int);
- void ordenar(int *,char**,int,int);
- void cambiar(int *,char**,int,int);
- void cambiar(int *codigos,char**nombres,int i,int j){
- int auxCod;char * auxNomb;
- auxCod=codigos[i];
- codigos[i]=codigos[j];
- codigos[j]=auxCod;
- auxNomb=nombres[i];//nombres sondirecciones de memoria
- nombres[i]=nombres[j];
- nombres[j]=auxNomb;
- }
- void ordenar(int *codigos,char** nombres,int izq,int der){
- int limite;
- if(izq>=der) return;
- cambiar(codigos,nombres,izq,(izq+der/2));
- limite=izq;
- for(int i=izq+1;i<der;i++){
- if(strcmp(nombres[i],nombres[izq])<0){
- cambiar(codigos,nombres,limite++,i);
- }
- }
- cambiar(codigos,nombres,izq,limite);
- ordenar(codigos,nombres,izq,limite-1);
- ordenar(codigos,nombres,limite+1,der);
- }
- int leeAlumno(int &cod,char*&nomb){
- char buffer[100];
- char* b=buffer; //con esto voy a ver si se leyo correctamente , sirve para depurar
- if((scanf("%d",&cod))==EOF) return EOF;
- gets(buffer);//vamos a sacar por espacios en blanco
- /*puede ser tambien scanf("%*d",&aux); para ubicar hasta los epsacios hasta llegar
- */
- while(*b==' ') b++;
- //b va a moveres hasta llegar a un caracter
- nomb= new char[strlen(b)+1];
- strcpy(nomb,b);
- //return &cod;
- return 0;
- }
- void lea_datos(int *& codigos,char**& nombres,int &n){
- int buffCod[100],cod;char *buffNom[100],*nomb;
- n=0;
- while(true){
- //if((leeAlumno(cod,nomb)!=NULL)
- if((leeAlumno(cod,nomb))!=EOF){
- break;
- }
- //una vez que ya asigne los valores, lo paso al buffer asignado
- buffCod[n]=cod;buffNom[n]=nomb;
- n++;
- }
- //una vez llenamos el arreglo estatico , comenzamos llenando el
- //arreglo dinamico
- //El primer paso a trabajar e sgestar la memoria
- codigos=new int[n];nombres= new char*[n];
- for(int i=0;i<n;i++){
- codigos[i]=buffCod[i];
- nombres[i]=buffNom[i];
- }
- }
- void imprimir_datos(int *codigos,char** nombres,int n){
- for(int i=0;i<n;i++){
- printf("%d ",codigos[i]);
- printf("%s",nombres[i]);
- }
- printf("\n");
- }
- int main() {
- int *codigos; char **nombres;
- int n;//numero de datos
- lea_datos(codigos,nombres,n);
- imprimir_datos(codigos,nombres,n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement