Vectores
Vectores
Vectores
elementos, todos los cuales son del mismo tipo. Estos elementos tendrán todos el mismo nombre, y
ocuparán un espacio contiguo en la memoria.
int ejemplo[4];
Podemos acceder a cada uno de los valores individuales indicando su nombre (ejemplo) y el número de
elemento que nos interesa, pero con una precaución: se empieza a numerar desde 0, así que en el caso
anterior tendríamos 4 elementos, que serían ejemplo[0], ejemplo[1], ejemplo[2], ejemplo[3].
// Ejemplo 05.01:
#include <iostream>
int main()
numero[1] = 150;
numero[2] = 100;
numero[3] = -50;
numero[4] = 300;
Ya lo iremos mejorando */
return 0;
Ejercicios propuestos:
(5.1.1) Un programa que pida al usuario 4 números, los memorice (utilizando una tabla), calcule su
media aritmética y después muestre en pantalla la media y los datos tecleados.
(5.1.2) Un programa que pida al usuario 5 números reales y luego los muestre en el orden contrario al
que se introdujeron.
Al igual que ocurría con las variables “normales”, podemos dar valor a los elementos de una tabla al
principio del programa. Será más cómodo que dar los valores uno por uno, como hemos hecho antes.
Esta vez los indicaremos todos entre llaves, separados por comas:
// Ejemplo 05.02:
int main()
return 0;
Ejercicios propuestos:
(5.2.1) Un programa que almacene en una tabla el número de días que tiene cada mes (supondremos
que es un año no bisiesto), pida al usuario que le indique un mes (1=enero, 12=diciembre) y muestre en
pantalla el número de días que tiene ese mes.
(5.2.2) Un programa que almacene en una tabla el número de días que tiene cada mes (año no bisiesto),
pida al usuario que le indique un mes (ej. 2 para febrero) y un día (ej. el día 15) y diga qué número de día
es dentro del año (por ejemplo, el 15 de febrero sería el día número 46, el 31 de diciembre sería el día
365).
Es de esperar que exista una forma más cómoda de acceder a varios elementos de un array, sin tener
siempre que repetirlos todos, como hemos hecho en
El “truco” consistirá en emplear cualquiera de las estructuras repetitivas que ya hemos visto (while,
do..while, for). Lo más habitual, ya que sabemos cuántos elementos tiene un array, es usar un "for" para
contar, así:
// Ejemplo 05.03:
#include <iostream>
int main()
suma += numero[i];
return 0;
En este caso, que sólo sumábamos 5 números, no hemos escrito mucho menos, pero si trabajásemos
con 100, 500 o 1000 números, la ganancia en comodidad sí que está clara.
Ejercicios propuestos:
(5.3.1) A partir del programa propuesto en 5.2.2, que almacenaba en una tabla el número de días que
tiene cada mes, crear otro que pida al usuario que le indique la fecha, detallando el día (1 al 31) y el mes
(1=enero, 12=diciembre), como respuesta muestre en pantalla el número de días que quedan hasta final
de año.
(5.3.2) Crear un programa que pida al usuario 10 números enteros y luego los muestre en orden inverso
(del último al primero), usando "for".
(5.3.3) Crear un programa que pida al usuario 10 números reales, calcule su media y luego muestre los
que están por encima de la media.
(5.3.4) Un programa que pida al usuario 10 números enteros y calcule (y muestre) cuál es el mayor de
ellos.
En física se usan mucho los "vectores", para representar magnitudes que no se pueden expresar sólo con
un número. Por ejemplo, para una temperatura basta con decir cosas como "tengo 39 grados", pero para
una fuerza no basta con decir que es de 200 N, sino que también es importante en qué dirección (y
sentido) se aplica esa fuerza: no tendrá el mismo efecto si se aplica en el centro de un cuerpo o en un
extremo, ni si comprime que si estira. Un vector se suele representar a partir de sus "componentes", que
son las coordenadas de su extremo (suponiendo que comienza en el punto (0,0). Un vector en el plano
tendrá dos componentes (x,y) y un vector en el espacio tendrá 3 componentes (x,y,z).como un conjunto
de varias coordenadas. Así, un programa que pida al usuario las coordenadas de 2 vectores en el espacio
y halle su vector suma sería:
// Ejemplo 05.04:
#include <iostream>
int main()
float vector1[3];
float vector2[3];
float vectorSuma[3];
int i;
// Calculamos la suma
// Y mostramos el resultado
return 0;
No veremos más detalles sobre vectores, porque este no es un curso de física. Pero sí propondemos
algunos ejercicios para que pueda aplicar sus conocimientos quien ya ha estudiado con anterioridad lo
que es un vector...
(5.3.5) Un programa que pida al usuario los datos de dos vectores en el plano (2 coordenadas) y calcule
su diferencia.
(5.3.6) Un programa que pida al usuario las componentes de dos vectores en el espacio (3 coordenadas)
y calcule su producto escalar.
(5.3.7) Un programa que pida al usuario las componentes de dos vectores en el espacio y calcule su
producto vectorial.
(5.3.8) Un programa que pida al usuario dos vectores en el plano (2 coordenadas) y diga si son
linealmente dependientes (sus componentes son proporcionales).
Podemos declarar tablas de dos o más dimensiones. Por ejemplo, si queremos guardar datos de dos
grupos de alumnos, cada uno de los cuales tiene 20 alumnos, tenemos dos opciones:
Podemos usar int datosAlumnos[40] y entonces debemos recordar que los 20 primeros datos
corresponden realmente a un grupo de alumnos y los 20 siguientes a otro grupo.
O bien podemos emplear int datosAlumnos[2][20] y entonces sabemos que los datos de la forma
datosAlumnos[0][i] son los del primer grupo, y los datosAlumnos[1][i] son los del segundo.
En cualquier caso, si queremos indicar valores iniciales, lo haremos entre llaves, igual que si fuera una
tabla de una única dimensión. Vamos a verlo con un ejemplo de su uso:
// Ejemplo 05.05:
#include <iostream>
int main()
{
int notas[2][10] =
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
};
cout << "La nota del tercer alumno del grupo 1 es "
<< notas[0][2];
return 0;
Este tipo de tablas son las que se usan también para guardar matrices, cuando hay que resolver
problemas matemáticos más complejos. Por ejemplo, un programa que pida al usuario los datos de dos
matrices de 3x3 y luego muestre su suma podría ser así:
// Ejemplo 05.06
#include <iostream>
int main()
{
float matriz[2][3][3];
float matrizSuma[3][3];
// Calculamos la suma
matrizSuma[fila][columna] = matriz[0][fila][columna]
+ matriz[1][fila][columna];
return 0;
Cuidado: no podemos dar por sentado que los datos de un array tengan valor inicial 0, sino que pueden
contener "basura" (lo que hubiera en cada posición de memoria anteriormente), de modo que este
programa es incorrecto y puee mostrar resultados incorrectos:
// Ejemplo 05.06b:
#include <iostream>
int main()
float matriz[2][3][3];
float matrizSuma[3][3];
// Calculamos la suma
matrizSuma[fila][columna] += matriz[m][fila][columna];
return 0;
(5.4.1) Un programa pida datos al usuario los datos de una matriz de 2x2 y muestra su traspuesta (el
resultado de intercambiar filas por columnas).
(5.4.2) Un programa que pida al usuario los datos de una matriz de 3x3, y muestre su determinante.
(5.4.3) Un programa que pida al usuario los datos de una matriz de 3x3, y calcule y muestre su matriz
adjunta.
(5.4.4) Un programa que pida al usuario los datos de una matriz de 3x3, y calcule y muestre su matriz
inversa.
(5.4.5) Un programa que pida al usuario los datos de dos matrices de 2x2, y calcule y muestre su
producto.
(5.4.6) Un programa que use una matriz de 3x4 para resolver un sistema de 3 ecuaciones con 3
incógnitas usando el método de Gauss (hacer ceros por debajo de la diagonal principal para luego aplicar
sustitución regresiva).
Si damos un valor inicial a un array, no será necesario que indiquemos su tamaño, porque el compilador
lo puede saber contando cuantos valores hemos detallado, así:
// Ejemplo 05.07:
// Arrays en los que no se indica el tamaño
#include <iostream>
int main()
return 0;