Hola buenas, estoy aprendiendo a programar en c, y estoy haciendo una base de datos, que coje 3 datos de un archivo, nombre, nº de registro y nº de serie.
Bueno el problema es que al querer ordenarlo, usando el metodo de burbuja, que es el unico que se, solo me ordena uno de los valores, me explico, yo pido los datos, el usuario los teclea y se guardan en 3 variables distintas, y al ordenarlo solo me ordena una de ella, pero las otras se quedan igual, y lo que quiero es que a partir de cada una de las variables se me ordenen todas, tambien las otras dos, bueno no se si eso es posible, he pensado que a lo mejor habria que crear otra variable con todos los datos de cada archivo, pero no se muy bien como programarlo...
Aqui os dejo el codigo del programa para ver si me podeis ayudar...
Y aqui os dejo la forma de la que lo ordeno, para ver si se puede hacer algo:
Muchas gracias de antemano, Feliz Navidad y Feliz año
Bueno el problema es que al querer ordenarlo, usando el metodo de burbuja, que es el unico que se, solo me ordena uno de los valores, me explico, yo pido los datos, el usuario los teclea y se guardan en 3 variables distintas, y al ordenarlo solo me ordena una de ella, pero las otras se quedan igual, y lo que quiero es que a partir de cada una de las variables se me ordenen todas, tambien las otras dos, bueno no se si eso es posible, he pensado que a lo mejor habria que crear otra variable con todos los datos de cada archivo, pero no se muy bien como programarlo...
Aqui os dejo el codigo del programa para ver si me podeis ayudar...
Código (c) [Seleccionar]
#include <stdio.h>
#include <string.h>
struct{
char nombreFich[41];
unsigned long numeroregistro;
unsigned long numeroserie;
} fichas[1000000];
int numeroFichas=0;
int i;
int opcion;
char textoTemporal[40];
unsigned long numeroTemporal;
main()
{
do {
printf("Escoja una opción: (Teclee el numero de la opcion)\n");
printf("1.- Añadir datos de un nuevo fichero\n");
printf("2.- Mostrar todos los ficheros\n");
printf("3.- Mostrar ficheros a partir de un cierto numero de registro\n");
printf("4.- Mostrar ficheros a partir de un cierto numero de serie\n");
printf("5.- Ver datos de un fichero\n");
printf("6.- Salir\n");
gets (textoTemporal);
sscanf(textoTemporal, "%d", &opcion);
switch(opcion){
case 1:
if (numeroFichas < 1000000) {
printf("Introduce el nombre del fichero: ");
gets(fichas[numeroFichas].nombreFich);
printf("Introduce el numero de registro(si el valor no es un numero no aparecera o aparecera 0): ");
gets(textoTemporal);
sscanf(textoTemporal,"%ld",&fichas[numeroFichas].numeroregistro);
printf("Introduce el numero de serie(si el valor no es un numero no aparecera o aparecera 0): ");
gets(textoTemporal);
sscanf(textoTemporal,"%ld",&fichas[numeroFichas].numeroserie);
numeroFichas++;
} else
printf("Máximo de fichas alcanzado (1000000)!\n");
break;
case 2:
for (i=0; i<numeroFichas; i++)
printf("Nombre: %s; Nº Registro: %ld; Nº Serie: \n",
fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 3:
printf("¿A partir de que nº de registro quieres que se muestre?");
gets(textoTemporal);
sscanf(textoTemporal, "%ld", &numeroTemporal);
for (i=0; i<numeroFichas; i++)
if (fichas[i].numeroregistro >= numeroTemporal)
printf("Nombre: %s; Nº Registro: %ld; Nº Serie: %1d; \n",
fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
else printf("No hay ficheros o no hay ficheros con un nº de registro mayor que el introducido.\n");
break;
case 4:
printf("¿A partir de que nº de serie quieres que se muestre?");
gets(textoTemporal);
sscanf(textoTemporal, "%ld", &numeroTemporal);
for (i=0; i<numeroFichas; i++)
if (fichas[i].numeroserie >= numeroTemporal)
printf("Nombre: %s; Nº Registro: %ld; Nº Serie: %1d; \n",
fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
else printf("No hay ficheros o no hay ficheros con un nº de serie mayor que el introducido.\n");
break;
case 5:
printf("¿De qué fichero quiere ver todos los datos?");
gets(textoTemporal);
for (i=0; i<numeroFichas; i++)
if (strcmp(fichas[i].nombreFich, textoTemporal) == 0)
printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d \n",
fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
for (i=0; i<numeroFichas; i++)
if (strcmp(fichas[i].nombreFich, textoTemporal) != 0)
if (strstr (fichas[i].nombreFich, textoTemporal) != NULL)
printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d (Busqueda a partir de la palabra tecleada, archivos coincidentes)\n",
fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 6:
printf("Fin del programa\n");
break;
default:
printf("Opción desconocida!\n");
break;
}
} while (opcion != 6);
}
Y aqui os dejo la forma de la que lo ordeno, para ver si se puede hacer algo:
Código (c) [Seleccionar]
for(i=0; i<(numeroFichas-1); i++) {
for (j=i+1; j<numeroFichas; j++) {
if(fichas[j].numeroregistro<fichas[i].numeroregistro) {
temp = fichas[j].numeroregistro;
fichas[j].numeroregistro = fichas[i].numeroregistro;
fichas[i].numeroregistro = temp;
}
if(fichas[j].numeroregistro<fichas[i].numeroregistro) {
temp = fichas[j].numeroserie;
fichas[j].numeroserie = fichas[i].numeroserie;
fichas[i].numeroserie = temp;
}
}
}
for(i=0; i<numeroFichas ; i++) {
printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d\n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
}
Muchas gracias de antemano, Feliz Navidad y Feliz año
