Ayuda con comparación de ficheros en C++

Iniciado por Deby93, 1 Diciembre 2011, 22:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Deby93

Hola, necesitaría ayuda con un programa, que compara dos archivos/ficheros con números enteros, compáralos entre si, y ordenar los números de ambos ficheros de menor a mayor y guardarlo en otro fichero.
Acá dejo lo que tengo de código. Agradecería su ayuda.


/*
    1. Crear dos archivos que contengan la siguiente informacion:
           
            archivo 1: 1    5   11  15  19  21
            archivo 2: 2    4   6   8   10  14
           
    2. Con los archivos 1 y 2 generar un tercer archivo donde se guarde la información
        ordenada, es decir, el resultado debeerá ser:
           
            1 2 4 5 6 8 10 11 14 15 19 21
           
    NOTA: no utilizar vectores
   
    3. Agregar las opciones para mostrar por pantalla los 3 archivos.


*/

#include<iostream.h>
#include <stdio.h>

struct numeros{
   
    int num;
    int nu;
   
}nume, numeA, numeB;

FILE *fichero;
FILE *archivo;
FILE *doc;
void menu();
void cargar();
void MostrarFicheroU();
void cargarS();
void MostrarFicheroD();
void CargarT();
void MostrarFicheroT();

main (){
   
    menu();
   
}

void menu(){
   
    int opcion =0;
   
    cout << "\n Ingrese la opcion que desee ";
    cout << "\n1.Cargar 1° Fichero \n2.Mostrar Fichero 1 \n3.Cargar 2° Fichero \n4.Mostrar Fichero 2 \n5.Fichero 3 \n6.Mostrar Fichero 3 \n7.Salir \n";
    cin >> opcion;
    system("cls");
    switch (opcion){
       
        case 1:
                cargar();
                break;
        case 2:
                MostrarFicheroU();
                break;
        case 3:
                cargarS();
                break;
        case 4:
                MostrarFicheroD();
                break;
        case 5:
                CargarT();
                break;
        case 6:
                MostrarFicheroT();
                break;
        case 7:
                system("exit");
                break;
        default:
                cout<<"\nOpcion incorrecta";
                menu();
    }

}

void cargar(){
   
    fichero =fopen("Fichero.dat","w");
   
    cout << "\n \tIngrese los numeros del primer Fichero ";
   
    for (int r=0; r<=5; r++){
       
        cout<< "\nIngrese " << r << "° numero del fichero";
       
        cin >> nume.num;
       
        fwrite(&nume, sizeof(struct numeros), 1, fichero);
       
    }
   
    fclose(fichero);
    menu();
}

void MostrarFicheroU(){

    fichero = fopen("Fichero.dat", "r");

        if(fichero == NULL)
        {
                printf("\nFichero no existe! \nPor favor creelo");
                menu();
        }

        fread(&nume, sizeof(struct numeros), 1, fichero);

        cout<<"\n \t Numeros primer fichero";

        while(!feof(fichero))
        {
                cout<<"\n "<< nume.num;
                fread(&nume, sizeof(struct numeros), 1, fichero);
       
        }
       
    fclose (fichero);
    menu();
}

void cargarS(){
   
    archivo = fopen("Archivo.dat","w");
   
    cout << "\n \tIngrese los numeros del primer Fichero ";
   
    for (int r=0; r<=5; r++){
       
        cout<< "\nIngrese " << r << "° numero del fichero";
       
        cin >> numeA.num;
       
        fwrite (&numeA, sizeof(struct numeros), 1, archivo);
       
    }
   
    fclose(archivo);
    menu();
}

void MostrarFicheroD(){
 
    archivo = fopen("Archivo.dat", "r");

    if(archivo == NULL)
    {
        printf("\nFichero no existe! \nPor favor creelo");
        menu();
    }

    fread(&numeA, sizeof(struct numeros), 1, archivo);

    cout<<"\n \t Numeros segundo fichero";

    while(!feof(archivo))
    {
        cout<<"\n "<< numeA.num;
        fread(&numeA, sizeof(struct numeros), 1, archivo);
       
    }
       
    fclose (archivo);
    menu();
}

void CargarT(){
   
    doc = fopen("Documento.dat","w");
    fichero = fopen ("Fichero.dat", "r");
    archivo =fopen ("Archivo.dat", "r");
   
    int menor=0;
    int nu=0;
    fread (&nume, sizeof(struct numeros), 1, fichero);
    fread (&numeA, sizeof(struct numeros), 1, archivo);
   
    while(!feof (fichero)){
       
        while(!feof(archivo)){
           
            if ((nume.num < numeA.num)&&(nume.num > menor))
            {
                menor = nume.num;
                nu = numeA.num;       
            }
            else
            {
                menor = numeA.num;
                nu = nume.num;   
            }
           
            fread (&numeA, sizeof(struct numeros), 1, archivo);
            fread (&nume, sizeof(struct numeros), 1, fichero);
           
            numeB.num = menor;
            numeB.nu = nu;
            fwrite(&numeB, sizeof(struct numeros), 1, doc);   
           
        }
       
    }

    fclose(fichero);
    fclose(archivo);
    fclose(doc);
    menu();
}

void MostrarFicheroT(){
   
    doc = fopen("Documento.dat", "r");

    if(doc == NULL)
    {
        printf("\nFichero no existe! \nPor favor creelo");
        menu();
    }

    fread(&numeB, sizeof(struct numeros), 1, doc);

    cout<<"\n \t Numeros tercer fichero";

    while(!feof(doc))
    {
        cout<<"\n "<< numeB.num << "\n" << numeB.nu;
        fread(&numeB, sizeof(struct numeros), 1, doc);
       
    }
       
    fclose (doc);
    menu();
}

Del código lo único que no funciona del todo bien es la parte de la comparación.
Después de todo tu eres tu única muralla, si no te saltas no darás un sólo paso.