5. Vectores y matrices ­ AprendeAProgramar com



Descargar 56,87 Kb.
Ver original pdf
Fecha de conversión08.10.2019
Tamaño56,87 Kb.

4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

1/6


Introducción a C++

Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él.

Puede saber más sobre nuestra política de cookies (/cookies.php) (Este aviso se muestra sólo una vez en cada visita al sitio web).

×

 Anterior (view.php?id=491)



Posterior   (view.php?id=493)

5. Vectores y matrices

  Curso: Introducción a C++ (../../course/view.php?id=27)

5. Vectores y matrices

5.1. Definición de una tabla y acceso a los datos

Una tabla, vector, matriz o array (que algunos autores traducen por “arreglo”) es un conjunto de 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.

Por ejemplo, si queremos definir un grupo de 4 números enteros, usaríamos

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].

Como ejemplo, vamos a definir un grupo de 5 números enteros y hallar su suma:

// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.01:

// Primer ejemplo de tablas 

  

#include  



using namespace std; 

  

int main() 



    int numero[5];    // Un array de 5 numeros enteros 

    int suma;         // Un entero que guardará la suma 

  

    numero[0] = 200;      // Les damos valores 



    numero[1] = 150; 

    numero[2] = 100; 

    numero[3] = ‐50; 

    numero[4] = 300; 

    suma = numero[0] +    // Y hallamos la suma 

        numero[1] + numero[2] + numero[3] + numero[4]; 

    cout << "Su suma es " << suma; 

    /* Nota: esta es la forma más ineficiente e incómoda... 



    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.

5.2. Valor inicial de una tabla

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:



4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

2/6


// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.02:

// Segundo ejemplo de tablas  

  

#include  



using namespace std; 

  

int main() 



    int numero[5] =       // Un array de 5 números enteros

        {200, 150, 100, ‐50, 300}; 

    int suma;             // Un entero que guardará la suma 

  

    suma = numero[0] +    // Y hallamos la suma 



        numero[1] + numero[2] + numero[3] + numero[4]; 

    cout << "Su suma es " << suma; 

    /* Nota: esta forma es algo menos engorrosa, pero todavía no */ 

    /* está bien hecho.  Lo seguiremos mejorando */

  

    return 0; 



 

Ejercicios propuestos:



(5.2.1) Un programa que almacene en una tabla el número de días que tiene cada mes (su pon dremos 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).

 

5.3. Recorriendo los elementos de una tabla



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

suma = numero[0] + numero[1] + numero[2] + numero[3] + numero[4];

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í:

// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.03:

// Tercer ejemplo de tablas (for) 

  

#include  



using namespace std; 

  

int main() 



    int numero[5] =       // Un array de 5 números enteros

        {200, 150, 100, ‐50, 300}; 

    int suma;             // Un entero que guardará la suma 

    int i;                // Para recorrer el array 

  

    suma = 0;             // Valor inicial  



    for (i=0; i<=4; i++)  // Y hallamos la suma 

        suma += numero[i]; 

  

    cout << "Su suma es " << suma;             



    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:


4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

3/6


// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.04:

// Vectores, primer contacto 

  

#include  



using namespace std; 

  

int main()  



{       

    float vector1[3]; 

    float vector2[3]; 

    float vectorSuma[3]; 

    int i; 

  

    // Pedimos los datos del primer vector 



    for (i=0; i<3; i++) 

    { 


        cout << "Introduce la componente " << i  

            << " del primer vector: "; 

        cin >> vector1[i]; 

    } 


  

    // Pedimos los datos del segundo vector 

    for (i=0; i<3; i++) 

    { 


        cout << "Introduce la componente " << i  

            << " del segundo vector: "; 

        cin >> vector2[i]; 

    } 


  

    // Calculamos la suma 

    for (i=0; i<3; i++) 

        vectorSuma[i] = vector1[i] + vector2[i]; 

  

    // Y mostramos el resultado 



    cout << "El vector suma es "; 

    for (i=0; i<3; i++) 

        cout << vectorSuma[i] << " "; 

  

    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...

Ejercicios propuestos sobre vectores:

(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).

 

5.4. Tablas bidimensionales



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:



4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

4/6


// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.05:

// Array de dos dimensiones 

  

#include  



using namespace std; 

  

int main()  



{       

    int notas[2][10] =  

        {  

            { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 

            {11, 12, 13, 14, 15, 16, 17, 18, 19, 20 } 

        }; 

  

    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í:

// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.06 

// Matrices, primer contacto 

  

#include  



using namespace std; 

  

int main()  



{       

    float matriz[2][3][3]; 

    float matrizSuma[3][3]; 

    int m, fila, columna; 

  

    // Pedimos los datos de las dos matrices 



    for (m=0; m<2; m++) 

        for (fila=0; fila<3; fila++) 

            for (columna=0; columna<3; columna++) 

            { 

                cout << "En la matriz " << m+1 

                    << ", dime el dato de la fila " << fila+1  

                    << " y la columna " << columna+1 << ": "; 

                cin >> matriz[m][fila][columna]; 

            } 

  

    // Calculamos la suma 



    for (fila=0; fila<3; fila++) 

        for (columna=0; columna<3; columna++) 

            matrizSuma[fila][columna] = matriz[0][fila][columna] 

                + matriz[1][fila][columna]; 

  

  

    // Y mostramos el resultado (puede salir un poco descolocado) 



    cout << "La matriz suma es " << endl; 

    for (fila=0; fila<3; fila++) 

    { 

        for (columna=0; columna<3; columna++) 



            cout << matrizSuma[fila][columna] << " ";  

        cout << endl; 

    } 

  

    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:

4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

5/6


// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.06b: 

// Matrices, lógica errónea (sin dar valor inicial) 

  

#include  



using namespace std; 

  

int main()  



{       

    float matriz[2][3][3]; 

    float matrizSuma[3][3]; 

    int m, fila, columna; 

  

    // Pedimos los datos de las dos matrices 



    for (m=0; m<2; m++) 

        for (fila=0; fila<3; fila++) 

            for (columna=0; columna<3; columna++) 

            { 

                cout << "En la matriz " << m+1 

                    << ", dime el dato de la fila " << fila+1  

                    << " y la columna " << columna+1 << ": "; 

                cin >> matriz[m][fila][columna]; 

            } 

  

    // Calculamos la suma 



    for (m=0; m<2; m++) 

        for (fila=0; fila<3; fila++) 

            for (columna=0; columna<3; columna++) 

                matrizSuma[fila][columna] += matriz[m][fila][columna]; 

    // La línea anterior es errónea: estamos dando por sentado 

    // que la matriz suma contiene ceros, y quizá no sea así 

  

  

    // Y mostramos el resultado (puede salir un poco descolocado) 



    cout << "La suma es "; 

    for (fila=0; fila<3; fila++) 

    { 

        for (columna=0; columna<3; columna++) 



            cout << matrizSuma[fila][columna] << " ";  

        cout << endl; 

    } 

  

    return 0; 



 

Ejercicios propuestos sobre matrices:



(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).

5.5. Arrays indeterminados.

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í:


// Introducción a C++, Nacho Cabanes 

// Ejemplo 05.07:

// Arrays en los que no se indica el tamaño 

  

#include  



using namespace std; 

  

int main() 



    int diasMes[] =      // Días de cada mes 

        {31, 28, 31, 30, 31, 30, 

         31, 31, 30, 31, 30, 31}; 

  

    cout << "Los días de noviembre son: " << diasMes[10]; 



    return 0; 

 



Ejercicios propuestos:

(5.5.1) Un programa que, a partir de los datos prefijados de los días de cada mes, diga qué meses tienen 30 días. Se deberá mostrar el número de cada mes,

pero empezando a contar desde 1 (abril será el mes 4).

Actualizado el: 01­09­2013 23:57



4/1/2017

5. Vectores y matrices ­ AprendeAProgramar.com

http://www.aprendeaprogramar.com/mod/resource/view.php?id=492

6/6


 Anterior (view.php?id=491)

Posterior   (view.php?id=493)



4



52

 

Buscar...



 

En los foros

03­01­2017 22:06 Ayuda con clase importada [Python] (../../mod/forum/discuss.php?d=2771)

01­01­2017 17:59 ¿DIAGRAMAS DE FLUJO ES PARA INTRODUCCIÓN A LA PROGRAMACIÓN? [C++] (../../mod/forum/discuss.php?d=2770)

01­01­2017 01:11 ordenar alfabeticamente un vector de string [C++] (../../mod/forum/discuss.php?d=2769)

29­12­2016 10:15 como hacer un juego de escaleras y serpientes en c++ (../../mod/forum/discuss.php?d=2767)

29­12­2016 05:48 vectores [Pascal] (../../mod/forum/discuss.php?d=2768)

(Anteriores...) (../../novedadesForos.php)

AprendeAProgramar.com



Cursos gratuitos de programacion de ordenadores, en español 

¿Por qué? (../../porque.php) 

Preguntas frecuentes (../../preguntasFrecuentes.php)

 (https://twitter.com/AprendeAProg)  

 (https://plus.google.com/+aprendeaprogramar/posts)



Mapa del sitio

Tutoriales (../../tutoriales.php)

Foros (../../foros.php)

Referencia (../../referencia/)

Novedades

22­03­2015: Puedes votar cuando te guste una respuesta (../../novedades.php)   17­10­2014: Se pueden hacer tests de repaso (../../novedades.php)

Anteriores... (../../novedades.php)

Contactar (../../contactar.php)

¿Quiénes somos? (../../quienes.php)

AprendeAprogramar.com ­ Copyright (c) 2006­2016




Compartir con tus amigos:


La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal