Práctico 8: Manipulaciones y cálculos con arreglos

Parte 1: Florilegio de cálculos sobre arreglos

cantidad de participantes 1 o 2 participantes.

Este ejercicio se debe hacer en tu computadora equipada de algún sistema Linux, usando el compilador gcc.

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.

1.1. Inicializar aleatoriamente un arreglo

En un programa arr.c escribí lo siguiente.

  1. Definí una constante T de valor 5.
  2. Declará un arreglo a de tamaño T
  3. Llená aleatoriamiente el arreglo a con valores entre 0 y 9.
  4. Imprimí el arreglo tal como lo hace el programa dado en este enunciado.

1.2. Calculos sobre elementos de un arreglo

Para cada punto siguiente, agregá el bucle necesario para llevar a cabo el cálculo.

Las tareas para realizar son:

  1. Calcular e imprimir la suma de los elementos del arreglo.
  2. Calcular e imprimir el promedio de los elementos (para este no hace falta agregar un bucle).
  3. Calcular e imprimir el elemento máximo.
  4. Calcular e imprimir el elemento mínimo.

1.3. Comprobar si el arreglo está ordenado

Para esta última etapa, observá bien las salidas dadas más arriba como ejemplo.

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

Agregá a tu programa el código necesario para reproducir el comportamiento del programa dado.

Necesitás una variable de conteo para recorrer el arreglo, y una variable de acumulación para guardar el dato de si el arreglo está ordenado. Podés llamarla ord y inicializarla a 1 antes de recorrer el arreglo, y solo cambiarla a 0 si encontrás dos elementos consecutivos tales que ai > ai + 1. Pensá bien en la condición del bucle.

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

Parte 2: Recorrer una cadena de caracteres terminada en cero

En un programa en PythonTutor declará las dos variables siguientes:

char * holaPuntero = "Hola!";
char holaArreglo[5] = "Hola!";

Visualizá en la diferencia entre esas dos variables en memoria.

Luego, con un bucle while, recorré carácter por carácter la cadena holaPuntero hasta encontrar el valor 0.

Para cada iteración del bucle, imprimí el carácter.

Una vez que esto funciona, cambiá el valor de la cadena holaPuntero a una cadena más larga como "Bienvenidos!" y volvé a visualizar la ejecución para confirmar que tu código anda.

Parte 3: Modificar una string dada en línea de comando

Como referencia, vas a necesitar la Sección 7.5 del manual “Aprenda C”.

Escribí un programa cuyo ejecutable pueda ser usado de la forma siguiente:

$ ./a.out hola
ubyn
$ ./a.out ubyn
hola
$ ./a.out universidad
havirefvqnq
$ ./a.out havirefvqnq
universidad

Esta transformación se llama rot13, para “rotación de 13 caracteres”. Cada letra se cambia por la letra ubicada 13 pasos adelante en el alfabeto. Si llegamos al final del alfabeto, se vuelve al principio. No se toma en cuenta la letra ñ.

En este ejercicio, podés suponer que el usuario solo te proveé una palabra escrita en minúsculas. Pero si lo resolvés temprano, podés extenderlo para que tome cualquier palabra, y que solo aplique rot13 sobre los caracteres alfabéticos (minúsculas y majúsculas).