Laboratorio 5

Introducción

En este laboratorio trabajaremos con arreglos unidimensionales, bidimensionales y strings (cadenas de caracteres), que son un
caso particular de arreglos unidimensionales

Arrays

Un array es básicamente un conjunto de datos de un mismo tipo, que están adyacentes en memoria.
Para ver una definición más técnica, click aquí.

Para declarar un array, lo que se hace es definir su nombre, tipo y cantidad de elementos que contendrá, por ejemplo:
int array[5]

Dicho array contendrá 5 elementos de tipo entero y su nombre será "array". Si se desea inicializar un array, se puede
de la siguiente forma:

int array[5] = {0, 1, 2, 3, 4}

Ello significa que el primer elemento será array[0] = 0
el segundo elemento será array[1] = 1
El tercer elemento será array[2] = 3
El cuarto elemento será array[3] = 4
El quinto elemento será array[4] = 5

De aquí, podemos concluir:

array[0] // Acceder al primer elemento del array
array[N - 1] // Acceder al ultimo elemento de un array de tamanho N
  

Cabe destacar que los array pueden ser de mayores dimensiones, como por ejemplo una matriz. Una matriz
podría considerarse como un array de arrays. Por ejemplo, si quisieramos la siguiente matriz de enteros:

Matriz Ejemplo
En c se declararía de la siguiente forma:
int matriz[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Puede observarse que se declara como un array, donde cada elemento del array, es un array de por sí.
Y podríamos acceder al elemento de la fila i y la columna j mediante matriz[i][j].

Strings (o cadenas de caracteres)

Ahora que entendemos arrays, podemos entender lo que es un string o cadena.
Básicamente, una cadena es un array de caracteres, donde el último elemento es el caracter nulo '\0'
Este caracter, le sirve al computador para saber dónde termina el string. Tener este caracter extra
trae como consecuencia que para almacenar una frase o palabra de N caracteres, se necesita un array
tipo char de N + 1 elementos, pues se requiere un espacio extra para el caracter nulo. Por ejemplo suponga
el siguiente string: hola mundo
Para que esté correctamente definido, debiese estar de la siguiente forma:

char[11] = "hola mundo\0";
Algunos comentarios aparte, para leer un string como entrada, tiene las siguientes opciones:
char string[40];
scanf("%s", string);
gets(string);
fgets(string, 40, stdin);
La primera es la que menos sirve, pues hay problemas con los espacios. Existen formas de solventar este problema y utilizar
scanf, pero requiere uso de expresiones regulares (concepto más avanzado y no es recomendable para un curso introductorio y tampoco es buena solución).
La segunda forma, permite solventar el problema de los espacios que tiene scanf, pero es mala práctica, pues no asegura que se lea
una cantidad de caracteres limitada al tamaño del string. Esto podría traer consecuencias desastrozas para los programas.
La última forma es la "aceptada" en la práctica, debido a que la función fgets, leerá N - 1 caracteres, si es que no se encuentra
un salto de línea o EOF. Ello permite asegurar que no ocurran errores como "salirse de los límites del array". Cabe destacar
que la función puede agregar un salto de línea al final del string (el cual es simple de eliminar). Para más información de fgets
Click aquí.

Algunos Ejercicios Resueltos

Ejercicio 1

Dados los arreglos: a {0, 1, 2, 3, 4} y b {5, 6, 7, 8, 9}, escriba un programa en C que:

  1. Muestre en pantalla dichos arreglos utilizando un ciclo for.
  2. Genere un nuevo arreglo llamado c, a partir de los arreglos a y b.

Ejercicio 2

Escriba un programa que calcule el producto escalar de 2 arreglos de largo 3. Ingrese cada uno de los valores
de los dos arreglos por teclado e imprima el resultado en pantalla.

Ejercicio 3

Escriba un programa que implemente la multiplicación de matrices. Para ello defina 2 matrices A y B,
ambas de 3x3, inicialice sus valores, y luego guarde el resultado de la multiplicación en una tercera
matriz C. Imprima las matrices y verifique sus resultados.

Ejercicio 4

Escriba una función en C que dado un arreglo de enteros, un valor X y el largo del arreglo, busque X
en el arreglo. La función debe imprimir en pantalla si encontró X y en qué posición.

Ejercicio 5

Implemente un programa que:

  1. Ordene un vector de manera ascendente.
  2. Implemente Binary Search para encontrar X en un arreglo ordenado.

Ejercicio 11

Escriba un programa donde se pida ingresar una palabra (nombre de persona, nombre de objeto, etc.) y
que invierta el orden los elementos e imprime la palabra invertida.

Ejercicio 12

Escriba un programa donde se ingrese una frase y esta sea dividida en sus palabras e imprima cada una por separado: