Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Luifs en 7 Junio 2013, 21:04 pm



Título: Estructuras y archivos en c++
Publicado por: Luifs en 7 Junio 2013, 21:04 pm
Alguien me podria ayudar con mi codigo
Citar
#include <stdio.h>

int main(){
   printf("\nBienvenidos al lector \n");

   FILE* miarchivo;
   char* nombrearchivo= "texto1.txt";
   char lectura[80];
   int i;
   miarchivo= fopen(nombrearchivo, "r");

   for(i=0; i<10; i++)
   {
      if(miarchivo==NULL)return -1;

      fscanf(miarchivo," %[^\n]",&lectura);
      printf("Linea %d: %s  \n",i+1,lectura);
   }

fclose(miarchivo);
}

Solamente me muestra el contenido del archivo

este es el contenido del archivo de texto
as 10 08
as 20 15
as 30 35
as 70 94
as 90 75
as 84 74
as 75 12
as 08 15
as 25 98
as 12 15

Pero ahora necesito que me ordene del mayor al menor segun las cantidades que estan en medio y luego del mayor al menor segun las cantidades de la tercera columna..




Título: Re: Estructuras y archivos en c++
Publicado por: Puntoinfinito en 7 Junio 2013, 21:54 pm
Pues no hagas el output directamente, simultáneamente puedes guardar todo en alguna matriz y con condicionales vas mostrando de mayor a menor. Crea por ejemplo una matriz para la columna del medio y para la última.
Código:
int columna_Medio[10];
int columna_Derec[10];

Entonces en cambio de hacer scanf guardar en variables.

Código:
lectura = columna_Medio[i]
// y en el siguiente bucle ...
lecutra = columna_Derec[i]

Para eso no podrás leer toda una linea de golpe, sino de espacio en espacio e ir almacenando. Después de esto, podrías crear una función para que quede más bonito :3 que se ocupe de hacer comparaciones del palo:

Código:
while (true) {
    for (int i = 0; i++; i < 10) {
        // Comparación con matriz controlada por i
        for (int z = 0; z++ ; z < 10) {
            // Comparación matriz controlada por variable z
           // Y así hasta llegar a comparar todos con todos  
      }
   }
}


Título: Re: Estructuras y archivos en c++
Publicado por: Luifs en 7 Junio 2013, 22:02 pm
Y no puedes asignar cada campo a una estructura?


Título: Re: Estructuras y archivos en c++
Publicado por: Puntoinfinito en 7 Junio 2013, 22:46 pm
No se a que te refieres exactamente, si te refieres a poner cada uno de los cadena de números, sí, podrías hacerlo. Puedes hacer otra división de matrices dentro de otras y tenerlo mejor ordenado.

Código:
int asdf[10][3];

Y vas poniendo del asdf[0] (primera linea) el segundo valor ([1]) debe compararse con tal:

Código:
if (asdf[0][1] == "aksdjsakld") etc {

Saludooos



Título: Re: Estructuras y archivos en c++
Publicado por: Luifs en 8 Junio 2013, 00:00 am
Disculpa como podria hacer que me ordene del mayor al menor tomando en cuenta la columna del centro
Citar
#include <stdio.h>

struct
{
   char nombre[35];
   int venta;
   int importe;
} productos;

int main(){
   printf("\nBienvenidos al lector \n");

   FILE* miarchivo;
   char* nombrearchivo= "texto1.txt";
   int i;
   miarchivo= fopen(nombrearchivo, "r");

   for(i=0; i<10; i++)
   {
      fscanf(miarchivo,"%s",&productos.nombre);
      printf("Linea %d: %s  ",i+1,productos.nombre);

      fscanf(miarchivo,"%d",&productos.venta);
      printf(" %d  ",productos.venta);

      fscanf(miarchivo,"%d",&productos.importe);
      printf(" %d  \n",productos.importe);
   }


(http://sphotos-b.ak.fbcdn.net/hphotos-ak-prn2/954857_541571919223042_106937381_n.jpg)


Título: Re: Estructuras y archivos en c++
Publicado por: rir3760 en 8 Junio 2013, 02:27 am
Los pasos en lo general son:

1) Declaras un array de estructuras para almacenar ahí cada uno de los registros.
2) Lees cada registro, lo políticamente correcto es utilizar fgets para leer una linea de texto y a continuación sscanf para extraer los tres campos pero, por sencillez, puedes empezar con fscanf.
3) Una vez tienes todos los registros en memoria los ordenas manualmente mediante una función propia o utilizando la función qsort (prototipo en <stdlib.h>). Sin importar el caso te conviene crear una función que compare dos registros y te diga su relación (si el primero es menor, igual o mayor que el segundo).

Empieza a desarrollarlo tu solo y te ayudamos en las partes donde tengas dificultades.

Un saludo