Práctico 10: funciones

Los ejercicios se deben hacer dentro de JSLinux, con el editor de texto vi y el compilador gcc.

Parte 1: Funciones que hacen algo pero no devuelven mada

cantidad de participantes 1 o 2 participantes.

  1. Definí un programa robot.c que muestra exactamente la salida siguiente:
1. limpiar
2. girar a la derecha
3. avanzar
1. limpiar
2. girar a la derecha
3. avanzar
1. limpiar
2. girar a la derecha
3. avanzar
1. limpiar
2. girar a la derecha
3. avanzar
FIN

El programa debe contener una función void pasos(void) además de la función main. La función pasos se encarga de imprimir solo lo siguiente:

1. limpiar
2. girar a la derecha
3. avanzar

Llamá la función pasos cuatro veces desde la función main para conseguir la salida más arriba.

  1. Modificá este programa para que tenga una función void fecha(int a). LLamá a esta función tres veces para que el programa imprima lo siguiente:
Estamos en el 2000!
Estamos en el 2016!
Estamos en el 2999!

Es decir, queremos que 2000, 2016, 2999 sean parámetros de las llamadas a la función fecha.

Parte 2: Funciones que devuelven valores

cantidad de participantes 1 o 2 participantes.

Escribir un programa bool.c que tenga el main siguiente:

main(){
 int i;
 for ( i = 0; i < 30 ; i = i + 1 )
   if ( divisible_por_3(i) )
    printf("%d es divisible por 3.\n", i);
}

Completar este programa con la función int divisible_por_3(int a) que devuelve:

Parte 3: Más funciones

cantidad de participantes 1 o 2 participantes.

Trabajamos en un archivo funciones.c nuevo.

  1. Definir la función int cuadrado(const int a) que calcula la función matemática : x ↦ x2.

Llamarla desde el main sobre algun entero aleatorio entre -50 y 50:

main(){
  int a;
  srand(time(0));
  a = (rand() % 101) - 50;  /* a tiene un valor entre -50 y +50 */
  printf("a vale %d\n", a);
  printf("a^2 vale %d\n", cuadrado(a));
}
  1. Definir la función int absoluto(const int a) que calcula la función matemática : x ↦ |x| (valor absoluto). Se puede hacer de la forma siguiente: si el parametro formal a es positivo, devolver a, sino, devolver  − a.

Llamarla desde el main:

...
printf("|a| vale %d\n", absoluto(a));
  1. Definir la función int mayor(const int a, const int b) que calcula la función matemática (x, y) ↦ {x si x ≥ y, sino y}.

Llamarla desde el main:

int b;
....
b = rand() %100; /* b tiene algun valor entre 0 y 99 */
...
printf("mayor(a, b) vale %d\n", mayor(a,b) );
  1. Agregar al programa la función int mayor_abs(const int a, const int b) que calcula el mayor del valor absoluto de dos enteros: (x, y) ↦ |x| si |x| ≥ |y|, sino |y|. Definir mayor_abs haciendo llamadas a las funciones existentes mayor y absoluta, sin usar condiciones.
...
printf("mayor_abs(a, b) vale %d\n", mayor_abs(a,b) );

Parte 4: Funciones con caracteres

cantidad de participantes 1 o 2 participantes.

En un programa cadenas.c:

  1. Escribir la función int es_minuscula(const char c) que devuelve 1 si el carácter dado es dentro del rango ‘a’ hasta ‘z’, y 0 sino.

  2. Escribir la función int es_mayuscula(const char c) que devuelve 1 si el carácter dado es dentro del rango ‘A’ hasta ‘Z’, y 0 sino.

  3. Escribir la función char cambiar_char(const char c) que, dada una minúscula, devuelve la correspondiente mayúscula, y vice versa. Si es dada otro carácter, devuelve el mismo carácter.

  4. Escribir la función void cambiar_cadena(char cadena[]) que aplica carácter por carácter la función cambiar_chara una cadena.

  5. Escribir un programa cadenas.c que lee una cadena dada por el usuario le aplica cambiar_cadena y la muestra de nuevo:

main(){
   char entrada[100];
   gets(entrada);  // gets acepta texto con espacios
   cambiar_cadena(entrada);
   printf("%s\n"entrada);
}

El resultado esperado es:

tcc -run cadenas.c
Hola Mundo!
hOLA mUNDO!

Parte 5: Ejercicio no obligatorio (arreglos)

cantidad de participantes 1 a 4 participantes.

Este ejercicio se debe hacer dentro de JSLinux, y con el editor de texto vi.

Hacer este ejercicio en un programa desfilar.c. Queremos hacer un programa que tenga la salida siguiente:

LA CALERA 
A CALERA L
 CALERA LA
CALERA LA
ALERA LA C
LERA LA CA
ERA LA CAL
RA LA CALE
A LA CALER
 LA CALERA
  1. Definir una constante T de valor 11.
  2. Declarar un arreglo de caracteres (char) de tamaño T e inicializarlo con el valor "LA CALERA " (con un espacio al final).
  3. Para observar: ¿cuántos carácteres tiene la constante cadena de caracteres "LA CALERA "? ¿Qué valor tiene el último carácter? En lo que sigue, nunca modificar este último carácter.
  4. Mostrar la cadena texto usando printf, de forma que se le agregue un salto de línea. Basta usar una sola llamada a printf sin bucle y con un solo especificador de conversión.
  5. Hacer desfilar el texto de la forma siguiente:
  6. Poner el código anterior en el bucle adecuado para que el programa tenga la salida deseada.
  7. Asegurarse que todas las declaraciones necesarias de variables estén al principio del cuerpo del main.
  8. Modificar el programa anterior para que se compile sin ningun mensaje de advertencia (warning) con gcc. Para ello consultar el PDF “Aprenda C”, ultima sección.