Sei sulla pagina 1di 7

Prctica Guiada: Vectores y Matrices

1. Objetivos
Al finalizar esta actividad, sers capaz de:
1. Escribir la declaracin de vectores y matrices de tipos bsicos.
2. Escribir el cdigo necesario para recorrer los elementos de vectores y matrices.
3. Escribir el cdigo necesario para acceder a un elemento de un vector o una matriz.
2. Motivacin
Hasta ahora hemos trabajado con datos elementales (enteros, reales, caracteres; int, float, char)
donde podamos almacenar un slo dato del tipo especificado. En muchas ocasiones es necesario trabajar
con gran cantidad de datos de un mismo tipo.
Por ejemplo imagina que tienes que hacer un programa donde el usuario es un profesor que quiere
almacenar las notas de sus alumnos para posteriormente hacer estadsticas y clculos como nota
mxima, mnima, la media, etc.
Podramos hacerlo declarando una variable de tipo float para cada nota pero eso puede llegar a ser
intratable si la cantidad de notas a almacenar fuera muy grande. Adems el programa sera muy
engorroso y difcil de entender.
Con los vectores y las matrices conseguimos, bajo un nico nombre, es decir, con una nica variable,
almacenar tantos valores de un mismo tipo como queramos (segn el tamao que definamos en su
declaracin). En el ejemplo anterior, tendramos un vector de float con longitud, por ejemplo 100,
donde podramos almacenar hasta 100 valores reales.
3. Los vectores y las matrices en C
3.1. Vectores
Los vectores, tambin llamados tablas unidimensionales, son tipos de datos compuestos o estructurados
caracterizados por:
Todos los elementos del vector son del mismo tipo
Todos los elementos del vector son referenciados con el mismo nombre y la diferencia entre ellos
es el ndice de la posicin que ocupan dentro del vector
Todos sus elementos son almacenados en posiciones de memoria contiguas.
El formato general para la declaracin de una variable de tipo vector es la siguiente:
Tipo_de_datos nombre_del_vector [tamao_del_vector]
Donde:
Tipo_de_datos indica el tipo de datos almacenados en la variable vector que se est declarando
(int, float, char o cualquier otro tipo definido).
Nombre_del_vector indica el nombre de la variable vector que se est declarando. Con este
nombre refenciaremos a cada elemento del vector.
Tamao es un entero, o una constante de tipo entero, que indica cuntas posiciones tiene ese
vector, es decir, cul es el nmero mximo de elementos del tipo Tipo_de_datos que se pueden
guardar en la variable Nombre_del_vector que estamos declarando. El tamao no puede ser una
variable.

2

Por ejemplo:
float notas[100];
sera la declaracin de la variable notas donde podramos almacenar hasta 100 nmeros reales.
Graficamente podramos representarlo as:
notas

Para acceder a cada casilla del vector utilizamos un nmero entero llamado subndice, que indica la
posicin del elemento dentro del vector. En C, los elementos empiezan a numerarse en el 0. As el primer
elemento del vector notas ser notas sub 0, el segundo notas sub 1, etc., y el ltimo notas sub 99.
Fjate que el ltimo elemento es el que ocupa la posicin tamao_del_vector menos 1.

notas

0 1 2 3 99
La sintaxis para acceder a estos elementos en C es la siguiente:
notas[0] (primer elemento)
notas[1] (segundo elemento)

notas[99] (ltimo elemento)

Operaciones que podemos hacer con un vector
a.- Consultar o leer el valor de un elemento del vector
Si queremos poner en la variable nota_alu5, la nota del alumno que tenemos en la posicin 5 del vector
anterior, haramos la siguiente asignacin:

float notas[100], nota_alu5; /*Declaracin de variables */
...
nota_alu5 = notas[5];

b.- Asignar o escribir un valor en un elemento del vector
Si queremos poner un 8 al alumno que est en la posicin 5 haramos la siguiente asignacin:

notas[5] = 8;

En estos dos casos, el acceso al elemento del vector que queremos leer o en el que queremos escribir es
directo, porque solamente leemos o modificamos un elemento, el 5 en ambos ejemplos. Si queremos
recorrer todo el vector, ya sea para leer como para escribir, tendremos que utilizar un bucle.
c.- Recorrido de un vector
Para recorrer el vector utilizaremos el bucle while, que dar tantas vueltas como elementos del vector
tengamos que visitar.
Mira el siguiente ejemplo:

#define MAX 20
void main()



3
{
float notas[MAX];
int i;
i=0;
while ( i<MAX)
{ printf(Dame la nota de la posicin %d: , i);
scanf(%f, &notas[i]);
i++;
}
}

Este programa pide las notas de los alumnos y las almacena en el vector notas.

Ejercicio 1: Escribe el anterior programa en el ordenador y verifica con el depurador cmo se van
colocando cada valor en su posicin correspondiente del vector.
Observa como en la pestaa Depurar aparecen las variables del programa, en este caso la variable i, y
la variable notas.


A la izquierda de notas, aparece el contenido de cada elemento del vector. Observa que los elementos a
los que todava no se les ha asignado un valor (para subndices mayores que 1) tienen un valor
inicialmente tienen un valor raro, basura podramos decir, porque el programa todava no le ha
puesto ningn valor. En cuanto se introduzcan los valores por teclado vers como se almacenan en cada
elemento del vector.
Ejercicio 2: Modifica el anterior programa para que una vez introducidos las notas en el vector, muestre
por pantalla las notas suspendidas. El programa ha de indicar tambin en qu posicin del vector se
encuentra la nota. Es decir los mensajes que se escribiran por pantalla seran del tipo
Posicion 2 Nota 4
para cada nota suspendida que encuentres en el vector.
Ejercicio 3: Modifica el anterior programa para que al final diga cuntos suspensos y cuntos aprobados
ha habido, y muestre tambin el porcentaje de ambos.
3.2. Matrices
Las matrices, tambin llamados tablas bidimensionales, son tipos de datos compuestos o estructurados
caracterizados por:
Todos los elementos de la matriz son del mismo tipo
Todos los elementos de la matriz son referenciados con el mismo nombre y la diferencia entre ellos
son los ndices de la posicin que ocupan dentro de la matriz
El formato general para la declaracin de una variable de tipo matriz es la siguiente:

Tipo_de_datos nombre_de_la_matriz [nmero_filas] [nmero_columnas]


4
Donde:
Tipo_de_datos indica el tipo de datos almacenados en la variable matriz que se est declarando
(int, float, char o cualquier otro tipo definido).
Nombre_de_la_matriz indica el nombre de la variable matriz que se est declarando. Con este
nombre refenciaremos a cada elemento de la matriz.
Nmero_filas es un entero, o una constante de tipo entero, que indica cuntas filas tiene esa
matriz
Nmero_columnas es un entero, o una constante de tipo entero, que indica cuntas columnas tiene
esa matriz. El nmero de filas y de columnas no puede ser una variable
Por ejemplo:

#define MAX_ASIG 6 /*Definicin de las constantes */
#define MAX_ALUM 40
...
float notas[MAX_ASIG][MAX_ALUM];

Sera la declaracin de la variable notas donde almacenaramos todas las notas de los alumnos de cada
asignatura. MAX_ASIG y MAX_ALUM seran dos constantes con valores enteros declaradas anteriormente.
Graficamente podramos representarlo as:

En este ejemplo la fila indica la asignatura y la columna el alumno.
Para acceder a cada elemento de la matriz utilizamos dos nmeros enteros llamados subndices, que
indica la fila y la columna donde se encuentra el elemento dentro de la matriz. En C, los elementos
empiezan a numerarse en el 0. As el primer elemento de la matriz notas ser notas[0][0] y el ltimo
notas [MAX_ASIG -1][MAX_ALUM 1].
Si te fijas notars que es exactamente igual que los vectores, pero con 2 dimensiones (la fila y la
columna) en lugar de 1.
Operaciones que podemos hacer con una matriz
a.- Consultar o leer el valor de un elemento de la matriz
Si queremos poner en la variable nota_alu5, la nota del alumno que tenemos en la posicin 5 dentro de
la asignatura 0, haramos la siguiente asignacin:

float nota_alu5, notas[MAX_ASIG][NAX_ALUM]; /*Declaracin de variables*/
...
nota_alu5 = notas[0][5];

b.- Asignar o escribir un valor en un elemento de la matriz
Si queremos poner un 8 en la asignatura 0 al alumno que est en la posicin 5 haramos la
siguiente asignacin:

5

notas[0][5] = 8;

En estos dos casos, el acceso al elemento de la matriz que queremos leer o en el que queremos
escribir es directo, porque solamente leemos o modificamos un elemento, el fila 0, columna 5 en
estos ejemplos. Si queremos recorrer toda la matriz, ya sea para leer como para escribir,
tendremos que utilizar un bucle.
c.- Recorrido de una matriz
Para recorrer la matriz tambin utilizaremos el bucle while, al igual que para recorrer un vector.
Podemos recorrer la matriz por filas o por columnas. La manera de hacerlo depender del
ejercicio.

En el siguiente ejemplo se piden las notas por teclado haciendo un recorrido por filas, pidiendo
consecutivamente las notas de todos los alumnos de cada asignatura:

#define MAX_ASIG 6
#define MAX_ALUM 40
void main()
{
float notas [MAX_ASIG][MAX_ALUM];
int i,j;
i=0;
while(i<MAX_ASIG) /*Para cada asignatura (para cada fila)*/
{ printf(Dame las notas de la asignatura %d: , i);
j=0;
while(j<MAX_ALUM) /* Para cada alumno de cada asignatura
(para cada columna de cada fila) */
{ printf(Nota del alumno %d:, j);
scanf(%f, &notas[i][j]);
j++;
}
i++;
}
}

Escribe el anterior cdigo en el ordenador y comprueba con el debugger como se van almacenando los
valores que introduces por teclado dentro de la matriz notas.
Igual que con los vectores vers en el apartado Depurar la variable notas de tipo matriz de float. En
este caso el depurador del Dev++ funciona bastante mal y no permite ver todos los elementos, sino slo
los primeros.
Habrs observado que ejecutar el programa anterior paso a paso es un poco pesado porque los bucles
dan muchas vueltas. Cuando estamos es fase de pruebas, conviene probar con tamaos pequeos de
vectores y matrices hasta que estemos seguros que el programa funciona correctamente. Entonces lo
ejecutaremos con los tamaos reales. Fjate lo fcil que es cambiar los tamaos para hacer pruebas.
Simplemente tienes que cambiar los valores de las constantes definidas con los #define (el resto de
cdigo se queda igual).

Ejercicio 4: Amplia el programa anterior para que al final muestre por pantalla las notas del alumno 3 en
todas sus asignaturas. Para probarlo utiliza valores ms pequeos de MAX_ASIG y MAX_ALUM.


6
Ejercicio 5: Modifica el anterior programa para que en lugar de solo mostrar las notas del alumno 3,
muestre las notas de todos los alumnos, indicando primero el alumno y despus las notas de cada
asignatura. Es decir:
Notas del alumno 0:
Asignatura 0 Nota 5,6
Asignatura 1 Nota 9,2
etc

Ejercicio 6: Amplia el programa del ejercicio 5 para almacenar en otra variable de tipo vector la nota
media de las asignaturas de cada alumno y las muestre por pantalla. Los mensajes seran del estilo:
La nota media del alumno 0 es 6,9
La nota media del alumno 1 es 5,9
etc
4. Error comn
El error ms comn al trabajar tanto con vectores como con matrices es lo que se suele llamar pasarse
del rango del vector, es decir, acceder a un elemento que no pertenece el vector.
Ilustraremos esto con un ejemplo:

#define MAX 10
void main()
{
float notas[MAX];
int i;
i=0;
while (i<=MAX)
{ printf(Dame la nota de la posicin %d: , i);
scanf(%f, &notas[i]);
i++;
}
}

Ejercicio 7: Escribe el anterior cdigo en el ordenador y ejectalo paso a paso con el debugger. Este
sera el aspecto despus de 1 iteracin, observa como i vale 1 y hemos introducido un 6 en
notas[0].

Ejectalo hasta el final y di Qu valor tiene la variable i al salir del bucle? Cuntos valores hemos
introducido en total? Funciona correctamente? Por qu? Cmo lo arreglaras?
Ejercicio 8. Escribe un programa que dado un vector de caracteres de tamao 100, diga cuntas veces
aparece la letra a. Las letras en el vector ya estn introducidas y el ltimo carcter es el .. Para
declarar un vector de caracteres y asignarle una frase acabada en un . puede hacer lo siguiente:

char frase [80] = Esta es la frase.

Ahora puedes acceder a las posiciones del vector tal y como has visto antes para el caso de los float.

7
Ejercicio 9. Escribe un programa que dada una matriz cuadrada (tantas filas como columnas) de
enteros, almacene en otra variable de tipo matriz de enteros, la transpuesta de la primera. La matriz
transpuesta se obtiene cambiando filas por columnas.
Ejercicio 10. Escribe un programa que dada una matriz de enteros, construya un vector en el que cada
posicin contenga el mximo de todos los valores que hay en la fila correspondiente de la matriz. Por
ejemplo, en la posicin 7 del vector debe quedar el valor mayor de entre todos los que hay en la fila 7 de
la matriz (posiciones [7][0], [7][1], [7][2], etc.).

Potrebbero piacerti anche