Merge branch 'getopt' of UBB/sort into master

This commit is contained in:
Chris Cromer 2018-11-11 13:34:33 -03:00 committed by Gitea
commit c59c90d215
2 changed files with 131 additions and 2 deletions

View File

@ -16,8 +16,17 @@
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
/**
* Flag para inicilizar srand solo una vez
*/
static int sort_rand_initialized = 0; static int sort_rand_initialized = 0;
/**
* Generar un númer al azar entre un mínimo y máximo
* @param min El limite míninmo
* @param max El limite máximo
* @return Retorna el número generado
*/
int gen_rand(int min, int max) { int gen_rand(int min, int max) {
if (sort_rand_initialized == 0) { if (sort_rand_initialized == 0) {
srand((unsigned int) time(NULL)); srand((unsigned int) time(NULL));

View File

@ -14,6 +14,11 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include "random.h"
#define SORT_VERSION "1.0.0"
/** /**
* Imprimir el uso del programa * Imprimir el uso del programa
@ -34,12 +39,127 @@ void print_usage() {
fprintf(stdout, " -v, --version mostrar la versión del programa\n"); fprintf(stdout, " -v, --version mostrar la versión del programa\n");
} }
/**
* Imprimir un mensaje de error y salir
*/
void extra_algorithm() {
fprintf(stderr, "Error: Solo se puede elegir un algoritmo al vez!\n");
print_usage();
exit(2);
}
/** /**
* La entrada del programa * La entrada del programa
* @param argc La cantidad de argumentos pasado al programa * @param argc La cantidad de argumentos pasado al programa
* @return Returna el codigo de error o 0 por exito * @return Retorna el codigo de error o 0 por exito
*/ */
int main (int argc, char **argv) { int main (int argc, char **argv) {
int i;
int n = 10;
int elegir = 0;
int algoritmo = -1;
int opt;
int long_index = 0;
static struct option long_options[] = {
{"merge", no_argument, 0, 'm'},
{"quick", no_argument, 0, 'q'},
{"bubble", no_argument, 0, 'b'},
{"bitonic", no_argument, 0, 'B'},
{"count", no_argument, 0, 'c'},
{"selection", no_argument, 0, 's'},
{"n", required_argument, 0, 'n'},
{"elegir", no_argument, 0, 'e'},
{"version", no_argument, 0, 'v'},
{0, 0, 0, 0}
};
if (argc == 1) {
print_usage(); print_usage();
return 0; return 0;
}
while ((opt = getopt_long(argc, argv, "mqbBcsn:ev", long_options, &long_index)) != -1) {
switch (opt) {
case 'm':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 0;
break;
case 'q':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 1;
break;
case 'b':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 2;
break;
case 'B':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 3;
break;
case 'c':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 4;
break;
case 's':
if (algoritmo != -1) {
extra_algorithm();
}
algoritmo = 5;
break;
case 'n':
n = atoi(optarg);
if (n <= 1) {
fprintf(stderr, "Error: n tiene que ser mayor de 1!\n");
return 3;
}
break;
case 'e':
elegir = 1;
break;
case 'v':
printf("sort versión: %s\n", SORT_VERSION);
return 0;
break;
default:
print_usage();
return 1;
}
}
if (algoritmo == -1) {
fprintf(stderr, "Error: No se seleccionó un algoritmo!\n");
print_usage();
return 4;
}
int array[n];
// Llenar el array con valores para ordenar después
for (i = 0; i < n; i++) {
if (elegir == 0) {
array[i] = gen_rand(0, 100000);
}
else {
opt = 0;
while (opt <= 1) {
fprintf(stdout, "Elegir elemento %d: ", i + 1);
fscanf(stdin, "%d", &opt);
if (opt <= 1) {
fprintf(stdout, "Número invalido! Tiene que ser mayor de 1!\n");
}
}
array[i] = opt;
}
}
return 0;
} }