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
Ir a la versión completa