En un programa arreglos.c definir una constante MAX para el tamaño de todos nuestros arreglos:
Definir las funciones siguientes:
void mostrar(const int a[])
: muestra el arreglo en una sola líneavoid llenar_random(int a[])
: una función que llena el arreglo de valores aleatorios entre 0 y 99.Luego, en el main
, declarar un arreglo, llenarlo con llenar_random
y mostrarlo con mostrar
.
Luego, definir una función void invertir(const int a[], int b[])
, que no modifique la lista a y que escribe en la lista b el inverso de a.
Usarla desde la funcion main
de la forma siguiente:
En un programa busqueda.c, definir una constante ERROR con el valor -1.
Implementar la función int buscar(const int arr[], const int elem)
, que realiza la búsqueda de un elemento en un arreglo.
Esta función devuelve un valor de tipo int
, que tiene que ser:
i
tal que elem == arr[i]
, si existeERROR
, cuando el elemento buscado no está en el arreglo.Unos ejemplos:
arr |
elem |
buscar(arr,elem) |
---|---|---|
[2,10,4] | 2 | 0 |
[2,10,4] | 4 | 2 |
[3,7,7] | 7 | 1 |
[3,7,3] | 3 | 0 |
[3,7,3] | 4 | ERROR |
Probar esta función desde el main sobre dos arreglos definidos manualmente.
Hacer este ejercicio dentro de JSLinux, y con el editor de texto vi
.
Copiar el código siguiente en un programa llamado gnome.c
.
#define MAX 8
#define VERDE "\x1b[102m"
#define MAGENTA "\x1b[105m"
#define RESET "\x1b[0m"
/* https://es.wikipedia.org/wiki/Algoritmo_Fisher-Yates */
void mezclar(int a[]){
int i,j,t;
for (i=0; i<MAX; i = i+1){
a[i] = i;
}
for(i=MAX-1; i>0; i = i-1){
j = rand() % (i+1);
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
void mostrar_color(const int a[]){
int i;
for(i=0; i<MAX; i=i+1)
printf("%s%02d%s%s",(i<1||*(i+a)>=*(i-1+a))?VERDE:
MAGENTA,a[i],RESET,(i<(MAX-1))?",":"");
printf("\n");
}
main(){
int lista[MAX];
srand(time(0));
mezclar(lista);
mostrar_color(lista);
}
mezclar
y mostrar_color
?Este ejercicio consiste en implementar una función que haga el ordenamiento del arreglo, siguiendo el algoritmo “Gnome Sort”.
La idea de este algoritmo es imaginarse un duende del jardín ordenando macetas. La única acción que puede hacer el duende (aparte moverse) es intercambiar dos macetas una al lado de la otra.
El duende empieza por el principio del arreglo (posición 0) y termina cuando llega al final:
a[0]
), o si el elemento que mira es mayor o igual al elemento que está justo a la izquierda (a[i] >= a[i-1]
), entonces hace un paso a la derecha sin intercambiar nada.a[i] < a[i-1]
), entonces intercambia los dos valores, y hace un paso a la izquierda.El duende repite este proceso hasta que llegue al final del arreglo.
Agregar al programa una función void gnome_sort(int a[])
, que consiste en ordenar el arreglo dado como parámetro, siguiendo el algoritmo Gnome Sort.
Hagamos más visual y dramático a este programa. Dentro de la función gnome_sort
, agregar una llamada a color_ord
después de cada intercambio de valores en el arreglo.
Probar aumentando el valor de la constante MAX
.
Usar la función usleep
en el bucle de la función gnome_sort
para hacerlo más lento.