Práctico 5: bucle while, el operador %, valores aleatorios

Los ejercicios se hacen dentro de JSLinux, con el editor de texto vi y el compilador tcc.

1. Expresiones aritméticas

cantidad de participantes 1 o 2 participantes.

  1. Escribir un programa que permita ingresar dos valores numéricos, que representan la base y la altura de un rectángulo, luego calcular y publicar su perímetro y superficie.

  2. Necesitamos hacer un mueble de madera, para eso necesitamos listones de pino de tamaño adecuado. Conocemos un negocio de maderas solo vende listones de 2,44 m de longitud.

    Escribir un programa llamado madera.c que pide al usuario el tamaño de los listones que necesita para su mueble, en cm. El programa tiene que imprimir la cantidad de listones del tamaño dado que el usuario puede hacer con uno de 2,44 m, y el tamaño del sobrante.

    Por ejemplo si el usuario ingresa 40 (cm), el programa tiene que imprimir:

    Ud. va a poder cortar 6 listones de 40 cm, y tendra un sobrante de 4 cm.

2. Bucles

cantidad de participantes 1 o 2 participantes.

2.1. Bucle while

  1. Escribir un programa while.c que use un bucle while para imprimir 3 veces el mensaje “Hola!”, cada vez en una línea nueva.

  2. Modificar este programa para que imprima los mensajes: “Hola! Vuelta 1.”, “Hola! Vuelta 2.”, etc. hasta la vuelta 10.

  3. Modificar este programa para que se imprimen todos los mensajes salvo el de la vuelta 5. Hacerlo sin usar un segundo bucle while, pero usando una condición if en el cuerpo del bucle.

Probar estos programas en http://www.pythontutor.com/c.html para ver su ejecución paso a paso.

2.2. Bucle while y condiciones

Hacer un programa selectivo.c que muestra las secuencias siguientes:

  1. los enteros de 0 a 100 salvo los que son múltiples de 7.
  2. los enteros de 0 a 30 salvo los que son múltiples de 3.
  3. los enteros de 50 a 500 salvo los que son múltiples de 11

Recordar que n es múltiple de m siempre y cuando la condición n % m == 0 es verdadera.

3. Valores aleatorios

cantidad de participantes 1 o 2 participantes.

3.1 Inicializar y utilizar el generador de números aleatorios

Crear una copia del programa del ejercicio 2, llamada alea.c.

Modificar esta copia nueva de forma que no se use más scanf, sino que se consiguen valores aleatorios para las dos variables.

El cuerpo del main deber conformarse de la forma siguiente:

main(){
  int a;
  srand(time(0));
  a = rand();
  printf("este es un valor aleatorio:\n", a);

Este programa dejó de ser interactivo, ya no necesitamos darle valores manualmente, ¡los consigue solo!

3.2: Volviendo a la línea de comando con watch

watch es un comando que sirve para repetir otros comandos. Es interesante para repetir comandos cuya salida puede cambiar en el tiempo. Por ejemplo para ejecutar ls -l cada 2 seguntos (el intervalo de repetición por defecto), se ejecuta el comando:

watch ls -l

Para salir de watch, apretar la combinación de teclas Control + c (en línea de comando, control+c no sirve para copiar texto sino para matar el proceso corriente).

watch acepta el flag -n para especificar el intervalo de ejecución. Para ejecutar el comando date cada 5 segundos:

watch -n 5 date

Ejecutar el programa anterior cada 1 segundo, usando adecuadamente watch y tcc.

3.3. Juego “adivinar el número”

En este ejercicio vamos a programar un juego donde la computadora elige un número al azar entre 1 y 10, y el jugador tiene que adivinarlo.

La estructura del programa es la siguiente:

  1. el programa elige al azar un número n entre 1 y 10
  2. el usuario ingresa un número u
  3. si u no es el número exacto, el programa dice si n es más grande o más chiquito que el número ingresado
  4. repetimos desde 2. hasta que u sea igual a n

Usemos un bucle para que el programa le pida un entero al usuario por lo menos una vez y se repita hasta que sea encontrada el entero n.

El programa tiene que imprimir los mensajes adecuados para informarle al usuario qué hacer y qué pasó.

Para conseguir un número aleatorio dentro de un programa en C, usar las siguientes sentencias:

srand(time(0));
n = rand();

Para que ese número aleatorio sea entre 1 y 10 (inclusive), reemplazar la segunda sentencia por:

n = (rand() % 10) + 1;

Programar el juego en un archivo adivina.c.

4. Conversión de caracteres a numeros (ejercicio no obligatorio)

cantidad de participantes 1 o 2 participantes.

Hacer lo siguiente en un programa llamado entero.c.

  1. Declarar una variable de tipo char con nombre c, y una variable de tipo int con nombre x. Imprimir el mensaje “Por favor ingrese un numero entre 0 y 9.”. Pedir un carácter al usuario con getchar y asignarlo a la variable char. Convertirlo a un valor entero y asignarlo a la variable de tipo int.

  2. Mostrar el valor de esa variable con printf, para eso usar el especificador de sustitución %d (d = decimal).

  3. Agregar una estructura condicional, tal que si x es mayor o igual a 5, se imprima “x es grande!” sino se imprima “x es chiquito!”.

  4. Si el número es divisible por 3, imprimir “Este numero es divisible por 3.”, sino imprimir “Este numero no es divisible por 3.”