• Miércoles 15 de Mayo de 2024, 06:11

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - lorekilia

Páginas: [1]
1
C/C++ / Problema Ordenacion Ficheros
« en: Jueves 22 de Mayo de 2008, 09:51 »
Hola, a ver si me pueden ayudar con un problema al ordenar un fichero. Es la primera vez que lo hago y no tengo mucha idea la verdad. Quiero crear un fichero de control de los viajantes de una empresa para cada registro se controlaran el dni (8 digitos), nombre y apellidos,antiguedad, kms realizados e importe total de las ventas. El de crear los registros creo que lo he hecho bien solo que nose como hacer para que el dni solo tenga 8 digitos (si me lo pueden decir les estaria muy agradecida) y luego quiero hacer otro programa para que saque un listado ordenado de menor a mayor de los diez viajantes que mas han vendido.El codigo que he hecho para ordenarlos me compila pero no me va y ya nose como hacerlo y seguramente lo he hecho fatal :(  Echenme una mano porfavor. Les dejo los codigos que tengo:

Código: Text
  1. Creacion de registros al azar:
  2.  
  3. //creacion registros al azar
  4.  
  5. #include <iostream.h>
  6. #include <map.h>
  7. #include<stdio.h>
  8. #include <time.h>
  9. #include<conio.h>
  10. using namespace std;
  11. typedef unsigned int direc;
  12. typedef unsigned int dni;
  13. void inserta(map<dni,direc,less<dni> >&,dni,direc);
  14. void buscar(map<dni,direc,less<dni> >,dni,direc &);
  15. void guarda(map<dni,direc,less<dni> >);
  16. void creacion(map<dni,direc,less<dni> >&,int cuantos);
  17. FILE *pclave;
  18. FILE *datos;
  19. FILE *indice;
  20. FILE * lapila;
  21. typedef struct ficha
  22. {
  23.    dni clave;
  24.    char apellido[40];
  25.    char nombre [30];
  26.    int antiguedad;
  27.    int kms;
  28.    int importe;
  29. }PERSONA;
  30.  
  31. void main (void)
  32. {
  33. randomize();
  34. clrscr();
  35. int max;
  36. dni busc;
  37. direc registro;
  38. PERSONA tmp;
  39. lapila=fopen("lapila.txt","w+b");
  40. fclose(lapila);
  41. datos=fopen("datos.txt","w+b");
  42. map<dni, direc, less<dni> > m;
  43. map<dni, direc, less<dni> >::iterator pos;
  44. cout <<"cuantos registros deseas crear?:"<<endl;
  45. cin >> max;
  46. creacion(m,max);
  47. indice=fopen("indice.txt","w+b");
  48. fprintf(indice,"%d %d\n",max,0);
  49. fclose(indice);
  50. guarda(m);
  51. fclose(datos);
  52. fclose(indice);
  53. fclose(pclave);
  54.  
  55. }// fin de main
  56.  
  57. void inserta(map<dni,direc,less<dni> >& m,dni alfa,direc beta)
  58. {
  59.  m.insert(pair<dni,direc>(alfa,beta));
  60.  
  61. }  // fin de inserta
  62. void buscar(map<dni,direc,less<dni> > m,dni alfa,direc & registro)
  63. {
  64.  
  65.    map<dni, direc, less<dni> >::iterator i;
  66.    map<dni, direc, less<dni> >::iterator j;
  67.    i=m.find(alfa);
  68.  
  69.    if (i!=m.end())
  70.           registro= (*i).second;
  71.    else
  72.         registro= 0;
  73.  
  74.  
  75. } // fin de busca
  76.  
  77. void guarda(map<dni,direc,less<dni> > m)
  78. {
  79. map<dni, direc, less<dni> >::iterator inicio,final;
  80. inicio=m.begin();
  81. final=m.end();
  82. pclave=fopen("claves.txt","w+b");
  83. for(inicio=m.begin();inicio!=m.end();inicio++)
  84.   fprintf(pclave,"%d %d\n",(*inicio).first,(*inicio).second);
  85. } // fin de guarda
  86.  
  87. void creacion(map<dni,direc,less<dni> >& m,int cuantos)
  88. {
  89. dni d1;
  90. direc d2;
  91. int t;
  92. PERSONA tmp;
  93.  
  94. char nom[10][30]={"Jose","David","Pedro","Maria","Carlos","Susana","Vicente","Manuel","Sergio","Ana"};
  95. char apel[10][30]={"Garcia","Gonzalez","Martinez","Perez","Alvarez","Gimeno","Vazquez","Madrid","Rodriguez","Calvo"};
  96.  
  97. // Introducción de elementos
  98.    cout <<"creando....."<< endl;
  99.    for (t=1;t<=cuantos;t++)
  100.       {
  101.       do
  102.       {
  103.        d1=random(99000000)+ 1;
  104.          d2=t;
  105.       }while (m.find(d1)!=m.end());
  106.    // inserto en el mapa
  107.       inserta (m,d1,t);
  108.    // inserto en el archivo
  109.    strcpy(tmp.nombre,nom[random(10)]);
  110.    strcpy(tmp.apellido,apel[random(10)]);
  111.    tmp.antiguedad=random(40)+1;
  112.    tmp.kms=random(5000)+200;
  113.    tmp.importe=random(800)+20;
  114.    
  115.    tmp.clave=d1;
  116.    fseek(datos,(d2-1)*sizeof(PERSONA),0);
  117.   fwrite(&tmp,sizeof(PERSONA),1,datos);
  118.    //if (d1 % 100000==0)
  119.    //    cout << d1<<endl;
  120.    }
  121.    cout <<"creado...."<<endl;
  122. } // fin de creacion
  123.  
  124.  
  125.  
  126.  


Ordenacion de los diez viajantes que mas han vendido de menor a mayor:


Código: Text
  1. #include <stdio.h>
  2. #include <conio.h>
  3. //ordenacion
  4.  
  5. #include<string.h>
  6. #include<stdlib.h>
  7. #include<iostream>
  8. #include <map>
  9. #include<time.h>
  10. #define numreg 10000
  11. #define max 10
  12.  
  13. using namespace std;
  14.  
  15. typedef struct ficha
  16.  
  17. {
  18.    int dni;
  19.    char apellido[30];
  20.    char nombre [30];
  21.    int antiguedad;
  22.    int kms;
  23.    int importe;
  24.    }PERSONA;
  25.  
  26. typedef multimap< float, int, greater<float> > ventas;
  27.  
  28. FILE * lapila;
  29.  
  30.  
  31. main()
  32. {
  33. PERSONA datos;
  34. ventas ordenado;
  35. ventas :: iterator pos;
  36.  
  37. float venta;
  38. int reg;
  39. clock_t q1,q2;
  40. lapila = fopen("lapila.txt","r+b");
  41.  
  42. // tomamos tpos de ordenacion = llenado del mapa
  43. q1=clock();
  44. for (reg=1;reg<=10;reg++)
  45.   {
  46.    fseek(lapila,(reg-1)*sizeof(datos),0);
  47.    fread(&datos,sizeof(datos),1,lapila);
  48.    venta =(datos.importe);
  49.    ordenado.insert(pair<float,int>(venta,reg));
  50.    }
  51. q2=clock();
  52. cout <<"tipo de ordenaciones:"<<(q2-q1)/CLK_TCK;
  53. getch();
  54.  
  55. clrscr();
  56. for (pos = ordenado.begin (); pos!= ordenado.end(); pos ++)
  57.   {
  58.    reg=(*pos).second;
  59.    fseek(lapila,(reg-1)*sizeof(datos),0);
  60.    fread(&datos,sizeof(datos),1,lapila);
  61.    cout.width(12);
  62.    cout.setf(ios::left);
  63.    cout << "Nombre:";
  64.    cout.width(10);
  65.    cout.setf(ios::left);
  66.    cout<<datos.nombre;
  67.    cout.width(10);
  68.    cout<<"importe:";
  69.    cout.width(6);
  70.    cout.precision(2);
  71.    cout<<(*pos).first;
  72.    cout.width(4);
  73.    cout<<"Reg:";
  74.    cout<<reg;
  75.    cout<<endl;
  76.  
  77.    }
  78. fclose(lapila);
  79. }
  80.  
  81.  
  82.  

Páginas: [1]