Programación General > C++ Builder

 Ayuda Con Metodo Burbuja

(1/1)

sicaliptico89:
Ya hace un tiempo acudi a ustedes y me pudieron ayudar!! espero q esta vez sea igual.
Tengo un proyecto q tiene q leer un archivo .in se tiene q llamar entrada.in y hay q ingresarles numeros en cada linea..
por lo menos

1234
444
0
123456789

luego el progrma los debe ordenar de mayor a menor y restarlos
4321 - 1234 = 3087

Luego el resultado volverlo a ordenar y restarlo
8730 - 378 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174

Y asi hasta que el resultado se repita consecutivamente.

Y luego guardarlo en un archivo salida.out

El problema es que con algunos numeros como el 100 no me hace bien la resta.. y por lo visto es por el metodo de ordenamiento que estoy usando.. q cambiarlo ha esta hora no seria conveniente, entonces me gustaria a ver si le dan un vistaso al codigo a ver q me dicen porq lo tengo q entregar el lunes.. MUCHAS GRACIAS DNUEVO.


--- Código: Text ---  //---------------------------------------------------------------------------#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#pragma hdrstop //--------------------------------------------------------------------------- #pragma argsusedvoid restar(int lon[10], int k,char asc[10],char des[10],char *res);void cabecera(){printf("\t\n");printf("\t .oPYo.                                     o           .oPYo.\n");printf("\t 8    8                                     8               `8\n");printf("\to8YooP' oPYo. .oPYo. o    o .oPYo. .oPYo.  o8P .oPYo.     .oP'\n");printf("\t 8      8  `' 8    8 8    8 8oooo8 8    '   8  8    8      `b.\n");printf("\t 8      8     8    8 8    8 8.     8    .   8  8    8       :8\n");printf("\t 8      8     `YooP' `YooP8 `Yooo' `YooP'   8  `YooP'   `YooP'\n");printf("\t:..:::::..:::::.....::....8 :.....::.....:::..::.....::::.....:\n");printf("\t:::::::::::::::::::::::ooP'.:::::::::::::::::::::::::::::::::::\n");printf("\t:::::::::::::::::::::::...:::::::::::::::::::::::::::::::::::::\n");}int menu(){        int opc;        printf("\n");        cabecera();        printf("\n\t   Menu");        printf("\n\t1. Realizar lectura del archivo entrada.in");        printf("\n\t2. Generar archivo salida.out");        printf("\n\t3. Salir ");        scanf("%d",&opc);        return opc;}void menu2(char *opc,int *opc2){       printf("\n");        cabecera();        printf("\n\t   Menu");        printf("\n\t1. Realizar lectura del archivo entrada.in");        printf("\n\t2. Generar archivo salida.out");        printf("\n\t\ta. Crear en la misma carpeta");        printf("\n\t\tb. Crear en nuevo directorio");        printf("\n\t3. Salir ");        *opc=getch();        if(*opc!='a' || *opc!='b')        {       *opc2=*opc;        }}int main(int argc, char* argv[]){       int opc=0,i=0,cont=0,lon[10],j=0,k=0,contaux,opc2,encon=0,auxatoi;        char numeros[10][20];        char mayor,opcaux;        char directorio[100];        char asc[10],des[10],res[10]="\0",aux[10]="\0";        FILE *p;        do{     clrscr();                opc=menu();                switch(opc)                {       case 1: clrscr();                                p=fopen("entrada.in","r");                                if(p==NULL)                                        printf("Error al abrir el archivo");                                else                                {       printf("Ya se encontro y leyo el archivo");                                        do{                                                fscanf(p,"%s",numeros[i]);                                                lon[i]=strlen(numeros[i]);                                                i++;                                                cont++;                                        }while(!feof(p));                                        encon=1;                                }                                /*for(i=0;i<cont;i++)                                {                                     printf("\n%s",numeros[i]);                                } */                                printf("\n");                                i=0;                                fclose(p);                                getch();                                break;                         case 2: clrscr();                                menu2(&opcaux,&opc);                                if(encon==0)                                {       clrscr();                                        printf("Debe abrir primero el archivo");                                        getch();                                        break;                                 }                                if(opcaux=='a'){                                        clrscr();                                        k=0;                                        p=fopen("salida.out","a");                                        if(p!=NULL)                                                printf("Ya se genero el archivo");                                        else                                                printf("No se pudo crear el archivo");                                }                                if(opcaux=='b'){                                        clrscr();                                        k=0;                                        printf("Ingrese el directorio y el nombre con el que quiere guardar el archivo: ");                                        scanf("%s",directorio);                                        p=fopen(directorio,"a");                                        if(p!=NULL)                                                printf("Ya se genero el archivo");                                }                        for(k=0;k<cont;k++)                        {       int encon=0;                                fprintf(p,"En numero original era %s",numeros[k]);                                contaux=0;                                strcpy(aux,"\0");                            //    auxatoi=atoi(numeros[k]);                              //  strcpy(numeros[k],itoa(auxatoi,numeros[k],10));                                while(encon==0){                                        for(i=0;i<lon[k]-1;i++)                                        {       asc[i]=0;                                                des[i]=0;                                        }                                         if(strlen(numeros[k])>1)                                        {                                         for(i=0;i<lon[k]-1;i++)                                        {                                          for(j=i+1;j<lon[k];j++)                                          {                                            if(numeros[k][i]>numeros[k][j])                                            {                                      mayor=numeros[k][i];                                      numeros[k][i]=numeros[k][j];                                      numeros[k][j]=mayor;                                                        }                                          }                                        }                                        strcpy(asc,numeros[k]);                                        for(i=0;i<=lon[k]-1;i++)                                        {                                          for(j=0;j<=lon[k]-1;j++)                                          {                                            if(numeros[k][j]<numeros[k][j+1])                                            {                                      mayor=numeros[k][j];                                      numeros[k][j]=numeros[k][j+1];                                      numeros[k][j+1]=mayor;                                                        }                                          }                                        }                                        strcpy(des,numeros[k]);                                        }                                        else                                        {       strcpy(des,numeros[k]);                                                strcpy(asc,numeros[k]);                                         }                                         restar(lon,k,asc,des,res);                                        fprintf(p,"\n%d - %d = %s",atoi(des),atoi(asc),res);                                        if(strcmpi(aux,res)!=0)                                        {       strcpy(aux,res);                                        }                                        else                                        encon=1;                                        strncpy(numeros[k],res,10);                                        contaux++;                                 }                                fprintf(p,"\nTamaño de la cadena %d",contaux);                                fprintf(p,"\n\n");                        }                         getch();                    }         }while(opc!=3&&opc!=51);              return 0;}void restar(int lon[10], int k,char asc[10],char des[10],char res[10]){       int i;        int auxdes,auxasc,auxres;        char aux[10];        auxdes=atoi(des);        auxasc=atoi(asc);        auxres=auxdes-auxasc;        itoa(auxres,aux,10);        strcpy(res,aux); }   
Esta elaborado en Builderc++

Navegación

[0] Índice de Mensajes

Ir a la versión completa