/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con metodo de ordenacion

 
      Índice del Foro elrincondelc.com -> Windows
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Rilax



Registrado: 21 Abr 2009
Mensajes: 1

MensajePublicado: 17/06/2010 4:15 pm
Título: Ayuda con metodo de ordenacion

Hola a todos, bueno quieresa ver si me echan la mano para aser que corra bien un programita que ya me saco CANAS tras CANAS no ya sta la mayoria lo uniko k me falta es el metodo de ordenacion que no me corre en la Universidad el Ingeniero nos dijo que por el metodo de ordenacion que queramos y yo lo ise por el de la burbuja pero no me sale no se si alguien de ustedes me podria ayudar si lo asen MIL gracias o si ven en donde esta mi error DIGANME por que yo ya no doy mas xD saluditos y espero respuesta aqui les dejo el codigo (lo corri en Turbo C)

Código:
#include <stdio.h>         
#include <conio.h>         
#include <string.h>         
#include <graphics.h>       
#include <stdlib.h>
#include <process.h>
#define TAM 20
#include <ctype.h>
#include "graphics.h"
char nombre[20];
/****************************estructura principal************************/
     struct ferreteria
          {
           char articulo[TAM]; /*c articulo*/
           char clave[10];
           char precio[10]; /* precio*/
           char marca[10];    //otro
          }datos;
/***********************************funciones*******************************/
             void ordenar(struct ferreteria);
         //    void crear();
             void insertar(struct ferreteria );
             void visualizar(struct ferreteria );
             void buscar(struct ferreteria );
             void modificar(struct ferreteria );
             void borrar(struct ferreteria );
             void acerca();
             void articulo(struct ferreteria );
             void precio(struct ferreteria );
             void clave(struct ferreteria );
             void marca(struct ferreteria );
             int valido(char *, struct ferreteria );
/***************************iniciamos el menu principal******************/
       void main()
    {
   /*********************************iniciamos los graficos**************/

     int gdriver = DETECT, gmode, errorcode;
     int midx, midy, i;

      initgraph(&gdriver, &gmode, "");
      errorcode = graphresult();
      if (errorcode != grOk)
         {
          printf("Error de Graficos: %s\n", grapherrormsg(errorcode));
          printf("Presiona una tecla para continuar:");
          getch();
          exit(1);
         }

          char opcion;
          int salir=0;
     /**************************terminamos graficas********************/
       do
   {

     clrscr();

     setfillstyle(SOLID_FILL,BLUE);
     bar(120,60,550,240);                /*primer bar 3d*/
         /*sobre el primer*/

     printf("\n\n\n");
     printf("\n\n\t\tCONTROL DE FERRETERIA\n\n");
    // printf("\n\n\t0. CREAR\n"        );
     printf("\t\t\t1. ALTAS\n"        );
     printf("\t\t\t2. MOSTRAR TODO\n" );
     printf("\t\t\t3. CONSULTAR\n"    );
     printf("\t\t\t4. MODIFICAR \n"   );
     printf("\t\t\t5. BAJAS\n"        );
     printf("\t\t\t6. INTEGRANTES\n");
     printf("\t\t\t7. ORDENAR\n\n"    );
      moveto(250,300);outtext("PULSA ESC PARA SALIR");   /*pocision de esc*/
     setfillstyle(SOLID_FILL,7);       /*color de fondo 2*/
     bar(0,0,120,240);
     setbkcolor(BLUE);                    /*color de fondo3*/
     rectangle(120,60,550,240);
     rectangle(116,56,554,244);        /*rectangulo sobre otro*/
     rectangle(240,295,420,310);
     rectangle(236,291,424,314);

     opcion=getch();
     clrscr();
     switch(opcion)
         {
          case '1':  insertar(datos);
          break;

          case '2':  visualizar(datos);
          break;

          case '3':  buscar(datos);
          break;

          case '4':  modificar(datos);
          break;

          case '5':  borrar(datos);
          break;

          case '6':  acerca();
          break;

         case '7':
                ordenar(datos);

          case 27:  salir=1;
          break;
         }
   }
    while(!salir);
}

/**************************insertar los datos en la estructura**************/
    void insertar(struct ferreteria datos)
   {
    clrscr();                                            /*limpiamos pantalla*/
    FILE *f;
    FILE *control;
    int result;
    char clave[10];
    printf("\t\t LOS DIRECTORIOS SON \n C: \n D: \n K: \n\n");

    printf("\n INTRODUCE EL NOMBRE DE EL ARCHIVO\n");

     gets(nombre);
    f=fopen(nombre,"at+");
    //control=fopen("contro.doc","w+");
    clrscr();
    if(!f)
   {
   printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
   getch();
   exit(1);
   }


   /*************************************************/
   printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");
//   fprintf(control,"clave");      /* l clave l producto l precio l marca l */
  //   fprintf(control,"\t\t producto");   /* l_______l__________l________l_______l */
    //   fprintf(control,"\t\t precio");
      //   fprintf(control,"\t\t marca\n");             /*imprimimos con formato*/
   printf("CLAVE:");
   gets(clave);   fflush(stdin);
   fclose(f);
   result=valido(clave, datos);
   f=fopen(nombre,"at+");
   while(!result)
       {
       printf("LA CLAVE YA EXISTE\n");
       printf("CLAVE: ");
       gets(clave);   fflush(stdin);
       fclose(f);
       result=valido(clave, datos);
       f=fopen(nombre,"at+");
       }   strcpy(datos.clave,clave);
    while(strcmp(datos.clave,"*"))
   {




   printf("ARTICULO: ");
   gets(datos.articulo);   fflush(stdin);
   printf("PRECIO ");
   gets(datos.precio);   fflush(stdin);

   printf("MARCA: ");
   gets(datos.marca);   fflush(stdin);

   fwrite(&datos,sizeof(datos),1,f);
   fprintf(control,"%s",datos.clave);
   fprintf(control,"%s\t\t",datos.articulo);
   fprintf(control,"%s\t\t",datos.precio);
   fprintf(control,"%s\t\t\n",datos.marca);

       //   system("cls");

   clrscr();
   printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");

   printf("CLAVE:");
   gets(clave);   fflush(stdin);
   fclose(f);
   result=valido(clave, datos);
   f=fopen(nombre,"at+");
   while(!result)
       {
       printf("LA CLAVE YA EXISTE\n");
       printf("CLAVE: ");
       gets(clave);   fflush(stdin);
       fclose(f);
       result=valido(clave, datos);
       f=fopen(nombre,"at+");
       }   strcpy(datos.clave,clave);

   }
    fclose(f);
    fclose(control);
}
/**********************************ver los datos introducidos***************/
void visualizar(struct ferreteria datos)
{
    clrscr();
    FILE *f;

    f=fopen(nombre,"rt+");
    if(!f)
   {
   printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
   getch();
   exit(1);
   }
    while(fread(&datos,sizeof(datos),1,f))
   {
   printf("ARTICULO: %s\n", datos.articulo);
   printf("CLAVE: %s\n", datos.clave);
   printf("PRECIO: %s\n", datos.precio);
   printf("MARCA: %s\n", datos.marca);
   getch();
   clrscr();
   }
    fclose(f);
}

void buscar(struct ferreteria datos)
{
    clrscr();
    char opcion;
    int salir=0;
    do
   {              /*metemos el do while para seguir buscando*/
     clrscr();
       setfillstyle(SOLID_FILL,5);
       bar(0,0,640,120);
       printf("\t\t\t\tBUSCAR\n");
       printf("\t\t\t\t------\n");
       printf("\t\t\t1. ARTICULO\n");
       printf("\t\t\t2. CLAVE\n");
       printf("\t\t\t3. PRECIO\n");
       printf("\t\t\t4. MARCA\n\n");
       moveto(250,300);outtext("PULSA ESC PARA SALIR");
       rectangle(240,295,420,310); //rectan de salir
       rectangle(236,291,424,314); //rectan1 de salir
       rectangle(0,0,638,120);


   opcion=getch();
   switch(opcion)
       {
       case '1':  articulo(datos);
       break;
       case '2':  clave(datos);
       break;
       case '3':  precio(datos);
       break;
       case '4':  marca(datos);
       break;
       case 27:  salir=1;
       break;
       }
   }
    while(!salir);
}
/**************************FUNCION PARA MODIFICAR FERRETERIA...************/
void modificar(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    FILE *control;
    char opcion, articulo[TAM],clave[10];
    int salir=0,salirf=0, encontrado=0;
    do
   {
   system("cls");
   f=fopen(nombre,"rt+");

   printf("INGRESA LA CLAVE A MODIFICAR: ");
   gets(clave);   fflush(stdin);
   fread(&datos,sizeof(datos),1,f);
   while(!feof(f)&&!salir)
       {
       if(!strcmp(datos.clave,clave))
      {
      printf("ARTICUL0 (antiguo): %s\n", datos.articulo);
      printf("ARTICULO (nuevo): ");
      gets(datos.articulo);   fflush(stdin);
      printf("CLAVE (antiguo): %s\n", datos.clave);
      printf("CLAVE (nuevo): ");
      gets(datos.clave);   fflush(stdin);
      printf("PRECIO (antiguo): %s\n", datos.precio);
      printf("PRECIO(nuevo): ");
      gets(datos.precio);   fflush(stdin);
      printf("MARCA (antiguo): %s\n", datos.marca);
      printf("MARCA (nuevo): ");
      gets(datos.marca);   fflush(stdin);
      fseek(f,-(long)sizeof(datos),SEEK_CUR);
      fwrite(&datos,sizeof(datos),1,f);

      fwrite(&datos,sizeof(datos),1,control);
      encontrado=1;
      salir=1;
      }
       else
       fread(&datos,sizeof(datos),1,f);

       }
   if(!encontrado)
       printf("NO SE HA ENCONTRADO EL REGISTRO QUE BUSCA\n");
   fclose(f);

   printf("¨DESEA MODIFICAR OTRO REGISTRO? (S/N)?\n");
   opcion=toupper(getch());
   if(opcion=='N')
       salirf=1;
   else
       salir=0;
   }
    while(!salirf);
}

void borrar(struct ferreteria datos)
{
    clrscr();
    FILE *f, *f_temp;
    char opcion, clave[10];
    int salir=0;
    do
   {
   system("cls");
   f=fopen(nombre,"rt+");
   f_temp=fopen("ferreteria_temp","wt+");
   if(!f)
       {
       printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
       getch();
       exit(1);
       }
   if(!f_temp)
       {
       printf("ERROR EN LA APERTURA DEL ARCHIVO TEMPORAL\n");
       getch();
       exit(1);
       }
   printf("INGRESA LA CLAVE A BORRAR: ");
   gets(clave);   fflush(stdin);
   fread(&datos,sizeof(datos),1,f);
   while(!feof(f))
       {
       if(strcmp(clave,datos.clave))
      fwrite(&datos,sizeof(datos),1,f_temp);
       fread(&datos,sizeof(datos),1,f);
       }
   fclose(f);
   fclose(f_temp);
   remove(nombre);
   rename("ferreteria_temp",nombre);
     //   remove("ferreteria_temp" );
   printf("¨DESEA BORRAR OTRO REGISTRO? (S/N)\n");
   opcion=toupper(getch());
   if(opcion=='N')
       salir=1;
   }
    while(!salir);
}

void acerca()
{   clrscr();
       setfillstyle(SOLID_FILL,5);
       bar(26,76,604,184);
       rectangle(26,76,604,184);
       gotoxy(5,5);   printf("INTEGRANTES\n\n");
       printf("\t\t\t\tARTURO GONZALEZ\n");
       printf("\t\t\t\tCARLOS ABRAHAM\n ");
       printf("\t\t\t\tMAYRA SANTANA\n");
       printf("\t\t\t\tCLAUDIA ACU¥A\n");
       rectangle(30,80,600,180);
       moveto(250,300);outtext("PULSA ESC PARA SALIR");
       rectangle(240,295,420,310);
       rectangle(236,291,424,314);

                 //para que no tape los
                    //printfllllllllllllllll


       getch();
}
/***********************************funcion de el articulo a escribir*******/
   void articulo(struct ferreteria datos)
     {
    clrscr();
    FILE *f;
    char articulo[TAM], opcion;
    int salir=0, encontrado=0;
      do
   {
   system("cls");
   f=fopen(nombre,"rt+");
   if(!f)
       {
       printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
       getch();
       exit(1);
       }
   printf("INGRESA EL ARTICULO A BUSCAR: ");
   gets(articulo);   fflush(stdin);
   while(fread(&datos,sizeof(datos),1,f))
       {
       if(!strcmp(datos.articulo,articulo))
      {
      printf("ARTICULO %s\n", datos.articulo);
      printf("CLAVE: %s\n", datos.clave);
      printf("PRECIO: %s\n", datos.precio);
      printf("MARCA: %s\n\n", datos.marca);
      encontrado=1;
      }
       }
   if(!encontrado)
       printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
       printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
       opcion=toupper(getch());
       if(opcion=='N')
       salir=1;
   else
       encontrado=0;
   fclose(f);
   }
    while(!salir);
}
 /***************************funcion de el precio *************************/
      void precio(struct ferreteria datos)
      {
      clrscr();
      FILE *f;
      char opcion, precio[10];
      int salir=0, encontrado=0;
   do
     {
      system("cls");
      f=fopen(nombre,"rt+");
      if(!f)
       {
        printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
        getch();
        exit(1);
       }
     printf("INTRODUCE EL PRECIO A BUSCAR: ");
     gets(precio);   fflush(stdin);
     while(fread(&datos,sizeof(datos),1,f))
       {
        if(!strcmp(precio,datos.precio))
      {
       printf("ARTICULO: %s\n", datos.articulo);
       printf("CLAVE: %s\n", datos.clave);
       printf("PRECIO: %s\n", datos.precio);
       printf("MARCA: %s\n\n", datos.marca);
       encontrado=1;
      }
       }
   if(!encontrado)
       printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
   printf("¨DESEA BUSCAR OTRO REGISTRO (S/N)\n");
   opcion=toupper(getch());
   if(opcion=='N')
       salir=1;
   else
       encontrado=0;
   fclose(f);
   }
    while(!salir);
}
/**************************funcion para el campo clave y todo su desarrollo**/
void clave(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    char opcion, clave[10];
    int salir=0, encontrado=0;
    do
   {
   system("cls");
   f=fopen(nombre,"rt+");
   if(!f)
       {
       printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
       getch();
       exit(1);
       }
   printf("INGRESA LA CLAVE A BUSCAR: ");
   gets(clave);   fflush(stdin);
   while(fread(&datos,sizeof(datos),1,f))
       {
       if(!strcmp(clave,datos.clave))
      {
      printf("ARTICULO: %s\n", datos.articulo);
      printf("CLAVE: %s\n", datos.clave);
      printf("PRECIO: %s\n", datos.precio);
      printf("MARCA: %s\n\n", datos.marca);
      encontrado=1;
      }
       }
   if(!encontrado)
       printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
   printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
   opcion=toupper(getch());
   if(opcion=='N')
       salir=1;
   else
       encontrado=0;
   fclose(f);
   }
    while(!salir);
}
/**********************************funcion  para el campo marca*************/
       void marca(struct ferreteria datos)
      {
       FILE *f;
       char opcion, marca[10];
       int salir=0, encontrado=0;
       do
    {
     system("cls");
     f=fopen(nombre,"rt+");
     if(!f)
         {
          printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
          getch();
          exit(1);
         }
          printf("INGRESA LA MARCA A BUSCAR: ");
          gets(marca);   fflush(stdin);
          while(fread(&datos,sizeof(datos),1,f))
      {
       if(!strcmp(marca,datos.marca))
            {
         printf("ARTICULO: %s\n", datos.articulo);
         printf("CLAVE: %s\n", datos.clave);
         printf("PRECIO: %s\n", datos.precio);
         printf("MARCA: %s\n\n", datos.marca);
         encontrado=1;
            }
      }
   if(!encontrado)
       printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
   printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)?\n");
   opcion=toupper(getch());
   if(opcion=='N')
       salir=1;
   else
       encontrado=0;
   fclose(f);
   }
    while(!salir);
}

/***********esta funcion es para ver si el archivo esta bien hecho o no****/
int valido(char clave[], struct ferreteria datos)
{
    FILE *f;
    int esvalido=1;
    f=fopen(nombre,"rt+");
    fread(&datos,sizeof(datos),1,f);
    while(!feof(f)&&esvalido)
   {
   if(!strcmp(clave,datos.clave))
       esvalido=0;
   else
       fread(&datos,sizeof(datos),1,f);
   }
    fclose(f);
    return esvalido;
}


/***************************ordenar las claves por m. de burbuja*************************************/


   void ordenar(struct ferreteria datos)
       {

   FILE *f;
   int p, aux;
   int nclaves=1;
   int arreglo1[50];
   int arreglo2[50];
   int valor[200];
   int x,i=1,j=2, temp;
   int a;


   int valor1[23];





   if((f=fopen(nombre,"rt+"))==NULL)
    {
     printf("\nEL FICHERO NO EXISTE.");
     getch();
     exit(0);
     }

     while(!feof(f)&&!exit)
    {
     fread(&datos, sizeof(datos),1,f);


     valor1[nclaves]=atoi(datos.clave);
     nclaves=nclaves+1;
    }

     if(valor1[i]>valor1[j])
       {
        valor[j]=aux;
        valor[i]=valor[j];
        valor[j]=valor[i];
        j++;
        i++;
       }
     else
      {
       i++;
       j++;
      }

      for(i=1;i<=nclaves;i++)
       {
        printf("%d",valor[i]);
       }

    fclose(f);
    getch();


   }

/***************************************************************************************/

  /* void crear()
   {
    FILE *f;
    printf("\t\t Los directorios son \n C: \n D: \n K: \n\n");
    printf("\n INTRODUCE EL NOMBRE DE EL ARCHIVO\n");

    gets(nombre);
    f=fopen(nombre,"w+");
    if(f!=NULL)
       {
   printf("\n Fichero creado.....\n");
       }
   else
    {
     printf("\n Error en el archivo\n");
    }
    getch();
   }
    */


O descargarlo de donde kieran lo subi a varios...





http://www.2shared.com/file/exh0kCVc/ProyectoFinal.html

http://www.filefactory.com/file/b21675f/n/ProyectoFinal.CPP

http://ifile.it/3t9evgj/ProyectoFinal.CPP

Porfa ayudenme si no c puede con ese metodo ayudenme con otro si ? PLIS!
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 998
Ubicación: Blumenau (Br)

MensajePublicado: 18/06/2010 12:02 pm
Título:

Pues dile a tu profesor ingeniero que ya es hora de actualizar el IDE...

Saludos
_________________
With enough eyes, all bugs are easy to find.

Eric S. Raymond
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 380
Ubicación: MICA S.A.

MensajePublicado: 21/06/2010 7:10 am
Título:

Hola,
El método de la burbuja viene a funcionar así para cuatro elementos y ordenando de menor a mayor:
Comparas el primero con el segundo. Si es mayor el primero los intercambias.
Comparas el segundo con el tercero. Si es mayor el segundo los intercambias.
Comparas el tercero con el cuarto. Si es mayor el tercero los intercambias.
Ya tienes el mayor en la cuarta posición.
Comparas el primero con el segundo. Si es mayor el primero los intercambias.
Comparas el segundo con el tercero. Si es mayor el segundo los intercambias.
Ya tienes el mayor en la cuarta posición y el segundo mayor en la tercera.
Comparas el primero con el segundo y si es mayor los intercambias.
Y ya los tienes los cuatro ordenaditos.
Las comparaciones vienen a ser para 4: 3 + 2 + 1
Para 5 elementos: 4 + 3 + 2 + 1
Para 6 elementos: 5 + 4 + 3 + 2 + 1
Para 1000 elementos: 1000+999+...+2+1

Esto se viene a hacer con un bucle externo para definir el último elemento que se compara y con un bucle interno para compararlos e intercambiarlos según haga falta. El bucle externo va decrementando y el bucle interno va incrementando hasta llegar a la variable del bucle externo.

No te pongo código porque este método de ordenación es super lento y mi método favorito requiere escribir un buen rato.
Volver arriba
      Índice del Foro elrincondelc.com -> Windows
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com