PRACTICA 6. VECTORES Y MATRICES. 1. Introducción. Los

Anuncio
Fundamentos de Informática
Primero de Ingeniería Técnica Industrial
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
PRACTICA 6. VECTORES Y MATRICES.
1. Introducción.
Los vectores y matrices son uno de los medios principales para el almacenamiento de
los datos en un programa. En esta práctica veremos todos los conceptos relativos a la
creación y manejo en C de vectores, matrices y cadenas de caracteres.
2. Conceptos nuevos.
Los conceptos nuevos introducidos son:
1)
2)
3)
4)
5)
Definición y manejo de vectores o arrays unidimensionales.
Definición y manejo de matrices o tablas.
Definición y manejo de cadenas de caracteres.
Búsqueda de un elemento dentro de un vector.
Búsqueda de un elemento dentro de una tabla.
3. Lenguaje C.
Las nuevas características de C que ha aprendido y que necesita saber para la
realización de la práctica son:
1) Definición y funcionamiento de vectores o arrays unidimensionales.
2) Definición y funcionamiento de matrices o tablas.
3) Definición y funcionamiento de cadenas de caracteres.
4. Entorno DevC++.
La única funcionalidad nueva de DevC++ necesaria para esta práctica es saber cómo
visualizar un vector en la ventana de depuración Watch.
5. Búsqueda en vectores y matrices.
Como ya hemos comentado inicialmente, los vectores y matrices son uno de los medios
principales mediante los cuales se almacenan los datos en un programa C. Debido a esta
causa, existen operaciones fundamentales cuyo tratamiento es imprescindible conocer.
Estas operaciones esenciales son la búsqueda de elementos y la ordenación. En este
curso sólo se abordará la primera de ellas.
Veremos cómo realizar una búsqueda en un vector y cómo realizar una búsqueda en una
matriz.
Fundamentos de Informática
Primero de Ingeniería Técnica Industrial
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
5.1. Búsqueda en un vector.
La búsqueda de un elemento dentro de un vector se basa en ir recorriendo
secuencialmente el vector, de una posición a la siguiente, comenzando en la primera
posición del vector y deteniéndose únicamente cuando se encuentra el elemento
buscado o bien cuando se alcanza el final del vector.
El pseudocódigo asociado a lo anteriormente expuesto sería el siguiente:
Inicio
encontrado = 0
indice = 0
mientras (encontrado == 0) y (indice < ultimo) hacer
si (Vector[indice] == elemento_buscado) entonces
encontrado = 1
sino
incrementar indice
fin_mientras
si (encontrado == 1) entonces
Escribir “Elemento encontrado en posición” indice
sino
Escribir “Elemento no encontrado”
Fin
Observando el pseudocódigo anterior vemos que se utiliza una variable entera
encontrado que indica si el elemento se encontró en la búsqueda. La variable
encontrado se inicializa a 0 (falso) y se activa a 1 (verdadero) cuando se encuentra el
elemento buscado. Se utiliza un operador and (en C &&), que permite evaluar las dos
condiciones de terminación de la búsqueda: que el elemento se haya encontrado o que
no haya más elementos (cuando el índice del vector excede al último valor válido del
mismo). Cuando el bucle se termina, el elemento o bien se ha encontrado o bien no se
ha encontrado. Si el elemento se ha encontrado, el valor de la variable encontrado será 1
y el valor de la variable indice será la posición del vector donde se encuentra el
elemento buscado. Por el contrario, si el elemento no se ha encontrado el valor de la
variable encontrado será 0.
Fundamentos de Informática
Primero de Ingeniería Técnica Industrial
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
5.2. Búsqueda en una matriz.
Utilizando un razonamiento análogo al expuesto en la sección anterior, la búsqueda de
un elemento dentro de una matriz se basa en ir recorriendo secuencialmente la matriz.
La única diferencia con el caso anterior es que ahora hay que recorrer filas y columnas
comenzando en la primera fila y primera columna del vector y deteniéndose únicamente
cuando se encuentra el elemento buscado o bien cuando se alcanza la última fila y la
última columna.
El pseudocódigo asociado a una búsqueda en una matriz bidimensional, sería el
siguiente:
Inicio
encontrado = 0
indice_fila = 0
mientras (encontrado == 0) y (indice_fila < ultima_fila) hacer
indice_columna = 0
mientras (encontrado == 0) y (indice_columna < ultima_columna) hacer
si (Vector[indice_fila, indice_columna] == elemento_buscado) entonces
encontrado = 1
sino
incrementar indice_columna
fin_mientras
si (encontrado == 0)
incrementar indice_fila
fin_mientras
si (encontrado==1) entonces
Escribir “Elemento encontrado en posición” indice_fila “,” indice_columna
sino
Escribir “Elemento no encontrado”
Fin
La única diferencia con el código visto en la sección anterior es que en este caso son
necesarios dos bucles anidados, uno para recorrer las filas y otro para recorrer las
columnas.
Fundamentos de Informática
Primero de Ingeniería Técnica Industrial
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
6. Ejercicios propuestos.
A continuación se propone el enunciado de una serie de ejercicios que el alumno tiene
que realizar antes de asistir a la sesión de prácticas, con el fin de presentar las dudas
que hayan aparecido en la realización de los mismos durante la sesión de prácticas.
1) Escribir un programa que pida 10 números enteros por teclado y que imprima por
pantalla:
i. Cuántos de esos números son pares.
ii. Cuál es el valor del número máximo.
iii. Cuál es el valor del número mínimo.
2) Escribir un programa que lea un vector de 10 elementos. Deberá imprimir el mismo
vector por pantalla pero invertido. Ejemplo: dado el vector 1 2 3 4 5 6 7 8 9 10 el
programa debería imprimir 10 9 8 7 6 5 4 3 2 1.
3) Escribir un programa que lea 10 números por teclado. Luego lea dos más e indique
si éstos están entre los anteriores.
4) Escribir un programa que lea una matriz de 3 filas y 3 columnas de valores enteros.
A continuación, el programa debe pedir el número de una fila. El programa deberá
devolver el máximo de esa fila.
5) Escribir un programa que lea un matriz de enteros de 2 filas y 4 columnas y
muestre por pantalla la traspuesta a dicha matriz. Ejemplo:
Entrada: 2 3 4 5 Salida
2 7
7 6 5 4
Æ
3 6
4 5
5 4
6) Escribir un programa que lea una matriz de números enteros y que devuelva la suma
de los elementos positivos de la matriz y la suma de los elementos negativos.
7) Escribir un programa que lea una matriz de enteros de 4 filas y 4 columnas y a
continuación intercambie la fila i con la fila j, siendo i y j dos valores introducidos
por teclado.
8) Escribir un programa que lea una matriz de 4 filas y 3 columnas, la visualice por
pantalla y a continuación encuentre el mayor y el menor elemento de la matriz y sus
posiciones.
9) Escribir un programa que lea una frase y determine la frecuencia de aparición de
cada vocal con respecto al total de caracteres de la frase.
Fundamentos de Informática
Primero de Ingeniería Técnica Industrial
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
10) Escribe un programa que lea del teclado una cadena y muestre en la pantalla la
cantidad de consonantes y de vocales que contiene.
11) Escribe un programa que lea del teclado una cadena y construya y muestre en la
pantalla otra cadena en la que cada vocal haya sido reemplazada por un punto.
7. Ejercicios propuestos de un nivel de dificultad mayor
Los ejercicios anteriores no presentaban una gran dificultad, en el sentido que la
solución se consigue realizando una serie de pasos conocidos: inicialización de
variables, uso de uno o varios bucles (anidados o no) y dentro de dichos bucles uso de
sentencias condicionales if else para actualizar el valor de ciertas variables. Los
siguientes ejercicios tienen una complejidad mayor a los propuestos anteriormente, en el
sentido que la solución a simple vista no es tan obvia como los anteriores. Intente
realizar los ejercicios siguientes. Encontrará que algunos son más difíciles de lo que
parecen y que otros, en cambio, son más fáciles de lo que en un principio pensamos:
12) Escribir un programa que lea una frase y a continuación visualice cada palabra de la
frase una debajo de otra, seguida cada palabra del número de letras que compone
cada palabra.
13) Escribir un programa que lea una frase y sustituya todas las secuencias de dos o más
blancos por un solo blanco y visualice la frase.
14) Una palabra es palíndroma si se puede leer igual de izquierda a derecha que de
derecha a izquierda, por ejemplo: reconocer es palíndroma. Construye un programa
que pida una palabra por teclado e imprima por pantalla si es o no palíndroma.
15) Un cuadrado mágico 3 x 3 es una matriz 3 x 3 formada por números del 1 al 9 donde
la suma de sus filas, sus columnas y sus diagonales son idénticas. Crear un
programa que permita introducir un cuadrado por teclado y determine si este
cuadrado es mágico o no. El programa deberá comprobar que los números
introducidos son correctos, es decir, están entre el 1 y el 9.
16) Se dice que una matriz tiene un punto de silla si alguna posición de la matriz es el
menor valor de su fila y a la vez el mayor de su columna. Escribir un programa que
tenga como entrada una matriz de números enteros y calcule la posición de un punto
de silla (si es que existe).
8. La Frase.
« Non pudeat, quae nescieris, te velle doceri: scire aliquid laus est, cupa est nil discere
velle»
“Pregunta sin reparos lo que quieras saber: más que ignorar, es malo no querer
aprender”
Marco Porcio Catón (234-149 a.C.)
Descargar