Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - RedHood

#1
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.