Código (cpp) [Seleccionar]
#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.