Práctico 9: Cálculos con arreglos

1. Cálculos con arreglos

cantidad de participantes 1 o 2 participantes.

En estos ejercicios, no es necesario imprimir el valor final de la variables o de los arreglos con printf. Basta visualizarlos en la interfaz de PythonTutor.

1.1. Copiar el contenido de un arreglo a otro

Entrar al link siguiente: https://goo.gl/oxWNnG

Contiene un programa que declara dos arreglos, a y b. Inicializa el arreglo b con ceros y el arreglo a con valores aleatorios entre 0 y 9.

Modificar este programa para que se copie el contenido del arreglo a al arreglo b.

1.2. Suma en parallelo

Entrar al link siguiente: https://goo.gl/79CB9A

Contiene un programa que declara dos arreglos, a y b, y los inicializa con valores aleatorios entre 0 y 9. Además declara un tercer arreglo c inicializado con ceros.

Modificar este programa para que cada elemento del arreglo c sea tal que ci = ai + bi.

1.3. Cálculo del producto de los elementos de un arreglo

Entrar al link siguiente: https://goo.gl/ciU5RR

Contiene un programa que declara e inicializa un arreglo con valores aleatorios entre 1 y 5.

Modificar este programa para que calcule el producto de los elementos de ese arreglo en una variable prod.

1.4. Elemento máximo de un arreglo

Entrar al link siguiente: https://goo.gl/ciU5RR

Contiene un programa que declara e inicializa un arreglo con valores aleatorios entre 1 y 5.

Modificar este programa para que guarde el elemento máximo del arreglo en una variable max.

1.5. Copiar el contenido de un arreglo a otro, invirtiendo el orden

Entrar al link siguiente: https://goo.gl/oxWNnG.

Contiene un programa que declara dos arreglos, a y b. Inicializa el arreglo a con valores aleatorios entre 0 y 9 y b con ceros.

Modificar este programa para que se copie el contenido del arreglo a al arreglo b al reves.

Por ejemplo si a contiene [3,6,0,0,2] , b tendrá que tener [2,0,0,6,3].

1.6. Buscar un elemento en un arreglo

Entrar al link siguiente: https://goo.gl/K82pjs

Contiene un programa que declara e inicializa un arreglo a con valores aleatorios entre 1 y 5, y declara una variable x con un valor aleatorio entre 1 y 5.

Modificar este programa de la manera siguiente:

2. Mover elementos dentro de un arreglo: simular letrero de un colectivo

cantidad de participantes 1 a 4 participantes.

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

2.1. Hacerlo andar con tcc

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.

2.2. Satisfacer gcc

Modificar el programa anterior para que se compile sin ningun mensaje de advertencia (warning) con gcc.

Para saber qué archivo incluir, ver el PDF “Aprenda C”, ultima sección.

3. Florilegio de cálculos sobre arreglos

cantidad de participantes 1 o 2 participantes.

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

El objetivo de este ejercicio es escribir un programa que tenga el comportamiento mostrado en los ejemplos que siguen:

/var/root # ./arrcalc
[2,2,0,7,2]
Suma: 13
Promedio: 2
Maximo: 7
Minimo: 0
La lista no esta ordenada porque 2 > 0.

/var/root # ./arrcalc
[6,6,5,7,1]
Suma: 25
Promedio: 5
Maximo: 7
Minimo: 1                                                                       
La lista no esta ordenada porque 6 > 5.

/var/root # ./arrcalc
[0,7,3,2,7]
Suma: 19
Promedio: 3
Maximo: 7
Minimo: 0
La lista no esta ordenada porque 7 > 3.

/var/root # ./arrcalc
[6,7,9,7,5]
Suma: 34
Promedio: 6
Maximo: 9
Minimo: 5
La lista no esta ordenada porque 9 > 7.

/var/root # ./arrcalc
[1,1,1,6,6]
Suma: 15
Promedio: 3
Maximo: 6
Minimo: 1
La lista esta ordenada.

La idea es usar correctamente los arreglos para que el programa que vamos a hacer sea fácilmente modificable para andar con arreglos del tamaño que queremos.

3.1. Inicializar aleatoriamente un arreglo

En un programa arr.c escribir lo siguiente.

  1. Definir una constante T de valor 5.
  2. Declarar un arreglo a de tamaño T
  3. Llenar aleatoriamiente el arreglo a con valores entre 0 y 9.

Como generar valores aleatorios:

  1. Imprimir el arreglo tal como lo hace el programa dado en este enunciado.

3.2. Calculos sobre elementos de un arreglo

Para cada punto siguiente (salvo el 2), agregar el bucle for necesario para llevar a cabo el cálculo. Recordar que hace falta en cada caso dos variables:

Las tareas para realizar son:

  1. Imprimir la suma de los elementos del arreglo.
  2. Imprimir el promedio de los elementos.
  3. Imprimir el elemento máximo.
  4. Imprimir el elemento mínimo.

3.3. Comprobar si el arreglo está ordenado

Para esta última etapa, observar bien la salida del programa dado.

Un arreglo a está ordenado si para todos par de elementos consecutivos (ai, ai + 1), tenemos ai ≤ ai + 1.

Agregar a su programa el código necesario para reproducir el comportamiento del programa dado.

Esta vez usar un bucle while. Necesitamos una variable de conteo para recorrer el arreglo, y una variable de acumulación para guardar el dato de si el arreglo está ordenado. Podemos llamarla ord y inicializarla a 1 antes de recorrer el arreglo, y solo ponerla a 0 si encontramos dos elementos consecutivos tales que ai > ai + 1. La condición del bucle es una expresión lógica.

Después del bucle, mostrar un mensaje que indica si el arreglo está ordenado, y en el caso contrario, indicar el primer par de elementos consecutivos que no están ordenados.