Código
#include <stdlib.h> #include <stdio.h> #include <iostream> #include <fstream> #include <time.h> #include <string> using namespace std; //Se generan variables globales para evitar el paso de parametros o argumentos entre las funciones int i=0, j=0, k=0, l=0; int n=0; int cn=0; //Numero de datos leidos y a ordenar int guardacn; int temp; int arreglo[1000000]; //maximo se podran ordenar 1000000 de numeros clock_t t_ini, t_fin; double secs; string nombrearchivo; //nombre del archivo de entrada int continuar = 0; int numBuscar = 0; int bandera = 0; struct Entrada { //declaracion de estructura que permiten leer y copiar los numeros en el arreglo "arreglo" int valor; } entrada; //***** Prototipo o definición del metodo de ordenamiento int busSecElimDup(); int busqueda(); void leeArchivo(); //**** Funcion de lectura del archivo //lee los numeros contenidos en el archivo y los copia en el arreglo "arreglo" //Se dejan los numeros en un arreglo llamado "arreglo" para que la función (algoritmo o metodo) de Burbuja los pueda ordenar void leeArchivo(){ FILE *archivo1; //Crea un apuntador de archivo, utilizando en la función fopen, el apuntador se le asigná el llamado al archivo cout<<"\n Teclea el nombre del archivo de entrada (sin espacio, ni caracteres especiales): "; cin>>nombrearchivo; nombrearchivo+= ".txt"; // Se le agrega al nombre del archivo la extension ".txt" archivo1 = fopen(nombrearchivo.c_str(), "r"); // Se abre el archivo de modo lectura if(archivo1== NULL ){ // el archivo contiene los numeros a ordenar cout<<"\n No se puede abrir el archivo "; //si no se puede abrir el archivo termina con error el programa exit(1); } else{ cout<<"\n Se abrio el archivo "<<nombrearchivo.c_str()<<" correctamente"; } //Lee el archivo y copia los numeros contenidos en el archivo en el arreglo "arreglo" cn=0; for (int i=0; !feof(archivo1); i++) { // Repite hasta que sea el fin del archivo fscanf (archivo1, "%i", &entrada.valor); // Lee el numero contenido en el archivo y lo guarda en la estructura arreglo[i]=entrada.valor; // El numero contenido en la estructura lo pasa al arreglo "arreglo" cn++; // suma 1 al contador de numeros leidos } cn--; cout<<"\n\nSe ha generado el arreglo con los datos del archivo de entrada"; cout<<"\nLa cantidad de numeros contenidos en el arreglo son: "<<cn<<"\n\n"; n=cn; fclose(archivo1); //cierra el archivo de entrada system ("pause"); } //Llama en general a una funcion de busqueda int busqueda() { busSecElimDup(); //Se utiliza cuando los datos estan desordenados return (0); } //Metodo de Busqueda Secuencial int busSecElimDup(){ int contador = 0; cout<<"\nDato originales\n"; for (i=0; i<n; i++){ cout<<arreglo[i]<<" "; } // Busca duplicados dentro del arreglo for (i=0; i<n; i++) { if (arreglo [i] == arreglo[i+1]){ // corrimiento a la izquierda for (j=i; j < n; j++) { // eliminar con corrimiento a la izquierda arreglo [j-1] = arreglo[j]; } contador ++; } } cout<<endl; cout<<"\nDato eliminados\n"; for (i=0; i<n; i++){ cout<<arreglo[i]<<" "; } cout<<endl; return (0); } //*** Funcio main () int main() { continuar = 1; leeArchivo(); n = cn; // lee y copia en una arreglo los numeros contenidos en el archivo de entrada /* do { system ("cls"); for (l=0; l<n; l++){ cout<<arreglo[l]<<" "; } cout<<endl<<endl; cout<<"\n\nTeclee el numero a buscar o consultar: "; cin>>numBuscar; */ t_ini = clock(); // guarda tiempo inicial (antes de ordenar) busqueda ( ); //Llama al metodo de ordenamiento t_fin = clock(); // guarda tiempo final (despues de ordenar) // Imprime el tiempo que se tardo el metodo en ordenar los datos secs = (double)(t_fin - t_ini) / (double)CLOCKS_PER_SEC; // determina los milisegundo utilizados printf("%.16g milisegundos", secs * 1000.0); // imprime el tiempo utilizado cout<<"\n\n"; // se utiliza printf porque es una sentencia mas poderosa que cout // permite ver cantidades muy pequeñas o muy grandes /* cout<<"\nDesea consultar otro numero (SI = 1, NO = 0)"; cin>>continuar; cout<<"\n\n"; } while (continuar == 1); */ cout<<"\n\nMetodo de Busqueda Secuencial con eliminacion concluido \n\n"; system ("pause"); }
Editado: Código formateado con geshi.