1 o 2 participantes.
Considerar el programa siguiente en PythonTutor https://goo.gl/yo1x3j.
Agregar a este programa una función llamada void anunciarSiPrimo(int n)
, tal que se pueda reescribir el main
como sigue, manteniendo el comportamiento del programa:
La función anunciarSiPrimo
tiene que ser la más general posible, es decir, tiene que andar con cualquier valor entero positivo como parámetro.
Nota: el programa del link arriba es:
int esPrimo(int n){
int i;
// buscamos si n tiene divisor
for(i=2; i <= n/2; i=i+1)
{
if (n%i == 0)
return 0;
}
// si llegamos aca es que no tiene divisor, es primo
return 1;
}
main(){
if ( esPrimo(49) )
printf("49 es primo.\n");
else
printf("49 no es primo.\n");
if ( esPrimo(13) )
printf("13 es primo.\n");
else
printf("13 no es primo.\n");
}
Hacer este ejercicio dentro de JSLinux, y con el editor de texto vi
.
int sumar(int n){
if (n != 0)
return n + sumar(n-1);
else
return n;
}
main(){
int max=10;
printf("La suma de 1 a %d vale %d.", max, sumar(max));
}
Imitando la función sumar
, agregar una función fact
que calcule la factorial del entero dado como parámetro, usando recursión. Imprimir el resultado de esa función desde el main.
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. Los únicos intercambios que puede hacer son 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.
Escribir el algoritmo del Gnome Sort (sobre papel). Pensar bien en cuál es la condición de repetición del bucle.
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.