vecma

2,631 views

Published on

Published in: Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,631
On SlideShare
0
From Embeds
0
Number of Embeds
130
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

vecma

  1. 1. Tema 5: Vectores y matrices
  2. 2. Tema 5: Vectores y matrices Introducción <ul><li>Una variable permite almacenar un solo valor de un tipo de datos concreto (entero, real, carácter) </li></ul><ul><ul><li>int x; </li></ul></ul><ul><li>Un vector permite almacenar N valores del mismo tipo de datos (entero, real, carácter) </li></ul><ul><ul><li>int x[10]; </li></ul></ul>
  3. 3. Tema 5: Vectores y matrices Introducción <ul><li>Cada uno de los valores que es capaz de almacenar un vector se denomina elemento </li></ul><ul><li>La dimensión de un vector es el número de elementos que puede almacenar </li></ul><ul><li>Para hacer referencia a un determinado elemento del vector utilizamos su índice </li></ul><ul><li>El primer elemento de un vector tiene índice cero , y el último índice N-1 (donde N es la dimensión del vector) </li></ul>
  4. 4. Tema 5: Vectores y matrices Declarar un vector <ul><li>Un vector debe ser declarado como cualquier otra variable. Sintaxis: </li></ul><ul><ul><li>tipo_datos nombre_vector [dimension]; </li></ul></ul><ul><li>Ejemplos: </li></ul><ul><ul><li>int x[10]; /* vector de 10 enteros */ </li></ul></ul><ul><ul><li>float edades[30]; /* vector de 30 reales */ </li></ul></ul><ul><ul><li>char nombre[30]; /* vector de 30 caracteres */ </li></ul></ul>
  5. 5. Tema 5: Vectores y matrices Asignar valores iniciales <ul><li>En el momento de la declaración es posible asignar valores a sus elementos: </li></ul><ul><ul><li>int digitos[3]={100,200,300}; </li></ul></ul><ul><ul><li>char nombre[4]={‘P’,’E’,’P’,’E’}; </li></ul></ul><ul><li>En este caso, no es obligatorio indicar la dimensión del vector: </li></ul><ul><ul><li>int digitos[]={100,200,300}; </li></ul></ul><ul><ul><li>char nombre[]={‘P’,’E’,’P’,’E’}; </li></ul></ul><ul><li>Solo puede hacerse en el momento de la declaración del vector </li></ul>
  6. 6. Tema 5: Vectores y matrices Lectura y proceso de los elementos de un vector <ul><li>Un vector no puede leerse con una sola instrucción de E/S (scanf): </li></ul><ul><ul><li>int x[10]; </li></ul></ul><ul><ul><li>scanf(“%d”,&x); /* MAL */ </li></ul></ul><ul><li>Hay que leer elemento a elemento con una estructura de repetición (for, while): </li></ul><ul><ul><li>int x[10],i; </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>scanf(“%d”,&x[i]); /* BIEN */ </li></ul></ul>
  7. 7. Tema 5: Vectores y matrices Lectura y proceso de los elementos de un vector <ul><li>Excepción : Vectores de caracteres </li></ul><ul><ul><li>char x[10]; </li></ul></ul><ul><ul><li>scanf(“%s”,x); /* BIEN */ </li></ul></ul><ul><ul><li>ó </li></ul></ul><ul><ul><li>gets(x); /* BIEN */ </li></ul></ul><ul><li>Para procesar sus elementos hay que utilizar una estructura de repetición (for, while): </li></ul><ul><ul><li>/* suponer ya leido el vector */ </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>x[i]=x[i]+(i*2); </li></ul></ul>
  8. 8. Tema 5: Vectores y matrices Lectura y proceso de los elementos de un vector <ul><li>Ejercicio-1 </li></ul><ul><li>Realizar un programa en C que lea un vector de 10 números enteros. Una vez leidos, debe sumar una unidad a sus elementos y visualizar el vector resultante. </li></ul>
  9. 9. Tema 5: Vectores y matrices Lectura y proceso de los elementos de un vector <ul><li>Solución </li></ul><ul><ul><li>#include <stdio.h> </li></ul></ul><ul><ul><li>void main(){ </li></ul></ul><ul><ul><li>int i,x[10]; </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame un elemento: ”); </li></ul></ul><ul><ul><li>scanf(“%d”,&x[i]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>x[i]++; </li></ul></ul><ul><ul><li>printf(“%d ”,x[i]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  10. 10. Tema 5: Vectores y matrices Suma de los elementos de un vector <ul><li>Ejercicio-2 </li></ul><ul><li>Realizar un programa en C que calcule la suma de los elementos contenidos en un vector de 10 números enteros. Una vez calculada la suma, debe visualizarla por pantalla. </li></ul>
  11. 11. Tema 5: Vectores y matrices Suma de los elementos de un vector <ul><li>Solución </li></ul><ul><ul><li>#include <stdio.h> </li></ul></ul><ul><ul><li>void main(){ </li></ul></ul><ul><ul><li>int i,x[10],suma=0; </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame un elemento: ”); </li></ul></ul><ul><ul><li>scanf(“%d”,&x[i]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) </li></ul></ul><ul><ul><li>suma=suma+x[i]; </li></ul></ul><ul><ul><li>printf(“La suma de los elementos es %d ”,suma); </li></ul></ul><ul><ul><li>} </li></ul></ul>
  12. 12. Tema 5: Vectores y matrices Averiguar valores entre los elementos de un vector <ul><li>Ejercicio-3 </li></ul><ul><li>Realizar un programa en C que averigüe los valores máximo y mínimo de los elementos contenidos en un vector de 10 números enteros. Una vez obtenidos dichos valores, debe visualizarlos por pantalla. </li></ul>
  13. 13. Tema 5: Vectores y matrices Averiguar valores entre los elementos de un vector <ul><li>Solución </li></ul><ul><ul><li>#include <stdio.h> </li></ul></ul><ul><ul><li>void main(){ </li></ul></ul><ul><ul><li>int i,x[10],mayor,menor; </li></ul></ul><ul><ul><li>for (i=0;i<10;i++) { </li></ul></ul><ul><ul><li>printf(“Dame un elemento: ”); </li></ul></ul><ul><ul><li>scanf(“%d”,&x[i]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>mayor=x[0]; menor=x[0]; </li></ul></ul><ul><ul><li>for (i=1;i<10;i++) { </li></ul></ul><ul><ul><li>if (x[i]>mayor) mayor=x[i]; </li></ul></ul><ul><ul><li>if (x[i]<menor) menor=x[i]; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>printf(“El valor mayor es %d ”,mayor); </li></ul></ul><ul><ul><li>printf(“El valor menor es %d ”,menor); </li></ul></ul><ul><ul><li>} </li></ul></ul>
  14. 14. Tema 5: Vectores y matrices Matrices: Introducción <ul><li>Un vector se caracteriza por tener UNA sola dimensión </li></ul><ul><ul><li>int vector[5]; </li></ul></ul><ul><li>Una matriz se caracteriza por tener MAS DE UNA dimensión (2,3,...,N) </li></ul><ul><ul><li>int matriz1[5][3]; /* Dos dimensiones */ </li></ul></ul><ul><ul><li>float temperaturas[24][7][365]; /* Tres dimensiones */ </li></ul></ul><ul><li>En general se asume el término matriz cuando tiene 2 dimensiones. </li></ul><ul><li>Cuando tiene más de 2 dimensiones se suele denominar matriz n-dimensional o tupla </li></ul>
  15. 15. Tema 5: Vectores y matrices Matrices: Introducción <ul><li>Un vector es capaz de almacenar tantos elementos del mismo tipo de datos como indica su dimensión </li></ul><ul><ul><li>int vector[5]; /* 5 números enteros */ </li></ul></ul><ul><li>Una matriz es capaz de almacenar tantos elementos como indica el producto de sus dimensiones </li></ul><ul><ul><li>int matriz1[5][3]; /* 5x3=15 números enteros */ </li></ul></ul><ul><ul><li>float temperaturas[24][7][365];/* 24x7x365=61320 reales */ </li></ul></ul><ul><li>Tanto un vector como una matriz almacenan en memoria todos sus valores de forma secuencial (uno detrás de otro) </li></ul>
  16. 16. Tema 5: Vectores y matrices Matrices: Caracterización <ul><li>A nivel lógico un vector es un conjunto de casillas, y es posible almacenar cada valor de forma independiente en cada una de ellas </li></ul><ul><ul><li>int vector[5]; /* 5 números enteros */ </li></ul></ul>3 7 -5 10 -20
  17. 17. Tema 5: Vectores y matrices Matrices: Caracterización <ul><li>A nivel lógico una matriz es igualmente un conjunto de casillas, y es posible almacenar cada valor de forma independiente en cada una de ellas, pero se distribuyen de forma lógica en filas y columnas </li></ul><ul><ul><li>int matriz[3][5]; /* 3 filas x 5 columnas = 15 elem. */ </li></ul></ul>3 7 -5 10 -20 6 1 0 15 -3 8 7 -8 20 6
  18. 18. Tema 5: Vectores y matrices Matrices: Dimensiones <ul><li>La primera dimensión de una matriz indica el número de filas </li></ul><ul><ul><li>int matriz[ 3 ][5]; /* 3 filas x 5 columnas = 15 elem. */ </li></ul></ul>3 7 -5 10 -20 6 1 0 15 -3 8 7 -8 20 6 Fila 1 Fila 2 Fila 3
  19. 19. Tema 5: Vectores y matrices Matrices: Dimensiones <ul><li>La segunda dimensión de una matriz indica el número de columnas </li></ul><ul><ul><li>int matriz[3][ 5 ]; /* 3 filas x 5 columnas = 15 elem. */ </li></ul></ul>3 7 -5 10 -20 6 1 0 15 -3 8 7 -8 20 6 Col-1 Col-2 Col-3 Col-4 Col-5
  20. 20. Tema 5: Vectores y matrices Matrices: Referencia a celdas <ul><li>Para referenciar una casilla ( elemento ) concreta de un vector hacemos uso de un índice </li></ul><ul><ul><li>vector[i] /* i varía entre 0 y NUM_ELEMENTOS-1 */ </li></ul></ul><ul><li>Para referenciar una casilla ( celda ) concreta de una matriz debemos utilizar dos índices : un índice para indicar la fila y otro para indicar la columna </li></ul><ul><ul><li>matriz1[i][j]; /* i varía entre 0 y NUM_FILAS-1 */ </li></ul></ul><ul><ul><li>/* j varía entre 0 y NUM_COLUMNAS-1 */ </li></ul></ul>
  21. 21. Tema 5: Vectores y matrices Matrices: Referencias <ul><li>Ejemplo: ¿Cuál es la referencia de la celda que se encuentra en la fila 2 y columna 3? ¿Y su valor? </li></ul><ul><ul><li>Fila=2 -> Indice=1 </li></ul></ul><ul><ul><li>Columna=3 -> Indice=2 </li></ul></ul><ul><ul><li>matriz[1][2] contiene el valor 0 </li></ul></ul>3 7 -5 10 -20 6 1 0 15 -3 8 7 -8 20 6 Fila 2 Indice 1 Col 3, Indice 2
  22. 22. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Para leer un vector es necesario hacerlo elemento a elemento con un bucle </li></ul><ul><ul><li>int vector[NUM_ELEMENTOS],i; </li></ul></ul><ul><ul><li>.../... </li></ul></ul><ul><ul><li>for (i=0; i<NUM_ELEMENTOS; i++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame un elemento:”); </li></ul></ul><ul><ul><li>scanf(“%d”,&vector[i]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>En cada iteración del bucle se lee un elemento </li></ul>
  23. 23. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Para leer una matriz es necesario hacerlo celda a celda con un bucle dentro de otro </li></ul><ul><ul><li>int matriz[NUM_FILAS][NUM_COLUMNAS],i,j; </li></ul></ul><ul><ul><li>.../... </li></ul></ul><ul><ul><li>for (i=0; i<NUM_FILAS; i++) </li></ul></ul><ul><ul><li>for (j=0; j<NUM_COLUMNAS; j++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame una celda:”); </li></ul></ul><ul><ul><li>scanf(“%d”,&matriz[i][j]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>En cada iteración del bucle interno se lee una celda </li></ul><ul><li>En cada iteración del bucle externo se lee una fila </li></ul>
  24. 24. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>El bucle externo (i) se encarga de procesar una fila completa de la matriz en cada iteración </li></ul><ul><ul><ul><li>for (i=0; i<NUM_FILAS; i++) </li></ul></ul></ul><ul><li>El bucle interno (j) se encarga de leer todas las celdas de una fila concreta </li></ul><ul><ul><ul><li>for (j=0; j<NUM_COLUMNAS; j++) </li></ul></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame una celda:”); </li></ul></ul><ul><ul><li>scanf(“%d”,&matriz[i][j]); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Las distintas combinaciones de i y j terminan leyendo todas las celdas de la matriz </li></ul>
  25. 25. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Ejercicio </li></ul><ul><li>Diseñar un trozo de programa que permita leer las celdas de una matriz de enteros utilizando bucles while en vez de bucles for </li></ul>
  26. 26. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Solución </li></ul><ul><li>#define NUM_FILAS 3 </li></ul><ul><li>#define NUM_COLUMNAS 5 </li></ul><ul><li>... </li></ul><ul><li>int m[NUM_FILAS][NUM_COLUMNAS], i, j; </li></ul><ul><li>i=0; </li></ul><ul><li>while (i<NUM_FILAS) </li></ul><ul><li>{ </li></ul><ul><li>j=0; </li></ul><ul><li>while (j<NUM_COLUMNAS) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Dame una celda:”); </li></ul><ul><li>scanf(“%d”,&m[i][j]); </li></ul><ul><li>j++; </li></ul><ul><li>} </li></ul><ul><li>i++; </li></ul><ul><li>} </li></ul>
  27. 27. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Ejercicio </li></ul><ul><li>Realizar un programa que lea una matriz de 5 filas y 4 columnas de números enteros y calcule la suma y la media de todos sus elementos </li></ul>
  28. 28. Tema 5: Vectores y matrices Matrices: Lectura de las celdas <ul><li>Solución </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>#define NUM_FILAS 5 </li></ul><ul><li>#define NUM_COLUMNAS 4 </li></ul><ul><li>void main() { </li></ul><ul><li>int m[NUM_FILAS][NUM_COLUMNAS], i, j; </li></ul><ul><li>float suma; </li></ul><ul><li>suma=0.0; </li></ul><ul><li>for (i=0; i<NUM_FILAS; i++) </li></ul><ul><ul><li>for (j=0; j<NUM_COLUMNAS; j++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame una celda:”); </li></ul></ul><ul><ul><li>scanf(“%d”,&m[i][j]); </li></ul></ul><ul><ul><li>suma=suma+m[i][j]; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>printf(“La suma es %f y la media es %f”,suma, suma/(NUM_FILAS*NUM_COLUMNAS)); </li></ul><ul><li>} </li></ul>
  29. 29. Tema 5: Vectores y matrices Matrices: Proceso de las celdas <ul><li>Ejercicio </li></ul><ul><li>Realizar un programa que lea una matriz de 5 filas y 4 columnas de números enteros y calcule la matriz traspuesta. </li></ul><ul><li>La traspuesta de una matriz tiene intercambiadas las filas por las columnas. </li></ul>
  30. 30. Tema 5: Vectores y matrices Matrices: Proceso de las celdas <ul><li>Solución </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>#define NFORI 5 </li></ul><ul><li>#define NCORI 4 </li></ul><ul><li>#define NFTRA 4 </li></ul><ul><li>#define NCTRA 5 </li></ul><ul><li>void main() { </li></ul><ul><li>int m[NFORI][NCORI], mt[NFTRA][NCTRA],i, j; </li></ul><ul><li>for (i=0; i<NFORI; i++) </li></ul><ul><ul><li>for (j=0; j<NCORI; j++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(“Dame una celda:”); </li></ul></ul><ul><ul><li>scanf(“%d”,&m[i][j]); </li></ul></ul><ul><ul><li>mt[j][i]=m[i][j]; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>for (i=0; i<NFTRA; i++){ </li></ul><ul><ul><li>for (j=0; j<NCTRA; j++) printf(“%d “,mt[i][j]); </li></ul></ul><ul><ul><li>printf(“ ”); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  31. 31. Tema 5: Vectores y matrices Matrices: Proceso de las celdas <ul><li>Ejercicio </li></ul><ul><li>Realizar un programa que lea una matriz de 3 filas y 2 columnas de números enteros nos indique cuantos números pares e impares hay en la matriz (el numero 0 se considera par) </li></ul>
  32. 32. Tema 5: Vectores y matrices Matrices: Proceso de las celdas <ul><li>Solución </li></ul><ul><ul><li>#include <stdio.h> </li></ul></ul><ul><ul><li>#define N 3 /* Numero de fila se la matriz */ </li></ul></ul><ul><ul><li>#define M 2 /* Numero de columnas de la matriz */ </li></ul></ul><ul><ul><li>int main() { </li></ul></ul><ul><ul><li>int m[N][M]; /* Matriz de enteros de N filas y M columnas */ </li></ul></ul><ul><ul><li>int i,j; /* Indices de fila/columna para la matriz */ </li></ul></ul><ul><ul><li>int npar=0; /* Contador de numeros pares */ </li></ul></ul><ul><ul><li>int nimpar=0; /* Contador de numeros impares */ </li></ul></ul><ul><ul><li>/* Leo los elementos de la matriz */ </li></ul></ul><ul><ul><li>for (i=0;i<N;i++) </li></ul></ul><ul><ul><li>for (j=0;j<M;j++) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>printf(&quot;Dame un elemento: &quot;); </li></ul></ul><ul><ul><li>scanf(&quot;%d&quot;,&m[i][j]); </li></ul></ul><ul><ul><li>} </li></ul></ul>
  33. 33. Tema 5: Vectores y matrices Matrices: Proceso de las celdas <ul><li>Solución (sigue) </li></ul><ul><li>/* Visualizo la matriz original */ </li></ul><ul><ul><li>printf(&quot; Matriz original: &quot;); </li></ul></ul><ul><ul><li>for (i=0;i<N;i++){ </li></ul></ul><ul><ul><li>for (j=0;j<M;j++) printf(&quot;%3d&quot;,m[i][j]); </li></ul></ul><ul><ul><li>printf(&quot; &quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>/* Calculo cuantos pares e impares tiene la matriz */ </li></ul></ul><ul><ul><li>for (i=0;i<N;i++) </li></ul></ul><ul><ul><li>for (j=0;j<M;j++) </li></ul></ul><ul><ul><li>if (m[i][j]%2==0) npar++; </li></ul></ul><ul><ul><li>else nimpar++; </li></ul></ul><ul><ul><li>/* Visualizo los resultados */ </li></ul></ul><ul><ul><li>printf(&quot;Numeros pares: %d &quot;,npar); </li></ul></ul><ul><ul><li>printf(&quot;Numeros impares: %d &quot;,nimpar); </li></ul></ul><ul><ul><li>printf(&quot;Total numeros: %d &quot;,npar+nimpar); </li></ul></ul><ul><ul><li>return 0; </li></ul></ul><ul><ul><li>} </li></ul></ul>

×