Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Informática I Departamento de Ingeniería Electrónica Vectores y matrices en C Informática I – Ingeniería Electrónica Ejemplo disparador Ingrese 10 valores numéricos que representarán muestras de temperatura provenientes de una máquina. Luego, imprimir el valor de todas las muestras, indicando las que superen los 50° con la palabra “ATENCIÓN” a continuación de valor numérico. ¿Cómo hacemos? Informática I – Ingeniería Electrónica Vector: Definición Es un arreglo unidimiensional de variables del mismo tipo, cada una identificadas con un subíndice numérico. //Declaración de un vector int miVector[5]; miVector[0] miVector[1] miVector[2] miVector[3] miVector[4] Vector de 5 elementos del mismo tipo Informática I – Ingeniería Electrónica Vector: Definición Es un arreglo unidimensional de variables del mismo tipo, cada una identificadas con un subíndice numérico. //Declaración de un vector int miVector[5]; miVector[0] miVector[1] miVector[2] miVector[3] miVector[4] Vector de 5 elementos del mismo tipo Tipo de dato Nombre del vector Tamaño (cantidad de elementos) Informática I – Ingeniería Electrónica Vector: Asignar un valor Podemos acceder a cada elemento del vector utilizando el subíndice entre corchetes. Cada uno de estos elementos se comportará como una variable. //Declaración de un vector int miVector[5]; 5 miVector[0] miVector[1] miVector[2] miVector[3] miVector[4] Vector de 5 elementos del mismo tipo //Asigno un valor miVector[1] = 5 ; Informática I – Ingeniería Electrónica Vector: Uso de scanf y printf Entendiendo que cada elemento de un vector es en sí, una variable, podemos deducir fácilmente como se utilizarán estas dos funciones: //Declaración de un vector int miVector[5]; //Leo un valor por teclado y lo guardo en el elemento 3 scanf (“%d”, &miVector[3]) ; //Imprimo el valor ingresado printf (“El valor ingresado es: %d”, miVector[3]) ; Informática I – Ingeniería Electrónica Vector: Consideraciones sobre el tamaño de un vector El tamaño de un vector debe ser una constante. Este es determinado en tiempo de compilación int tam ; //Leo el tamaño del vector scanf (“%d”, &tam) ; //Declaración el vector int miVector[tam]; No puedo determinar el tamaño del vector en tiempo de ejecución. Informática I – Ingeniería Electrónica Vector: Declarar un vector inicializado //Declaración de un vector inicializado int miVector[5]={0,5,10,25,30}; 0 5 10 25 30 miVector[0] miVector[1] miVector[2] miVector[3] miVector[4] Vector de 5 elementos Informática I – Ingeniería Electrónica A programar 1) Ingrese 30 valores numéricos que representan las notas de un curso de Informática I. Finalmente imprima aquellos valores que superan la media del curso separados de aquellos que están por debajo. 2) Realizar un programa que solicite una secuencia de 10 números enteros y determine si, dicha secuencia, es capicúa. Informática I – Ingeniería Electrónica Copia de vectores //Declaración de un vector inicializado int vec_1[5]={0,5,10,25,30} ; int vec_2[5] ; int i ; vec_2 = vec_1 ; for (i = 0 ; i < 5 ; i++) { vec_2[i] = vec_1[i] ; } Los vectores no pueden copiarse directamente. Los elementos deberán copiarse individualmente Vectores y punteros: No comprobación de contornos Cuidado: En C no se realiza comprobación de contornos, es decir, el compilador no chequea si se están accediendo a elementos fuera del vector. //Ejemplo de no comprobación de contornos int miVector[5]={0,5,10,25,30}; miVector[6]=50; 0 5 10 25 30 miVector[0] miVector[1] miVector[2] miVector[3] miVector[4] -----miVector[5] 50miVector[6] Haciendo miVector[6], accedemos a una dirección de memoria que no está dentro del espacio reservado para el vector. Escribir un área de memoria no resrvado puede generar un comportamiento inesperado en el código. Pasaje de vectores a funciones Cuando se utiliza un vector como argumento de una función, se envía la dirección de memoria del vector. Dentro del cuerpo de la función se tendrá acceso al vector original. void borrar (int vec[]) { int i; for(i=0;i<5;i++) vec[i]=0; } int main (void) { int vector[5]; borrar(vector); //¿Cómo queda vector? return 0; } vector[0] vector[1] vector[2] vector[3] vector[4] vector vec Pasaje de vectores a funciones (alternativa) Buena práctica: Enviar el tamaño del vector como parámetro. De esta forma, puedo reutilizar la función para vectores de distintos tamaños. void borrar (int vec[], int tam) { int i; for(i=0; i < tam; i++) vec[i]=0; } int main (void) { int vector[5]; borrar(vector, 5); //¿Cómo queda vector? return 0; } vector[0] vector[1] vector[2] vector[3] vector[4] vector vec Informática I – Ingeniería Electrónica A programar 1) Realice una función que recibe un vector de enteros y la cantidad de elementos del mismo. La función devuelve el módulo de los elementos del vector (es decir, si encuentra números negativos, los cambia por sus opuestos). Compruebe su correcto funcionamiento. 2) Realice una función que recibe un vector de enteros y la cantidad de elementos del mismo. La función debe invertir el orden de los elementos del vector. Realice un programa que compruebe su correcto funcionamiento. 3) Realice una función que recibe dos vectores de R3 y devuelve su producto escalar. Compruebe su correcto funcionamiento. Informática I – Ingeniería Electrónica Matriz: Definición Es un arreglo multidimensional de variables del mismo tipo, cada una identificadas con un subíndice numérico. //Declaración de una matriz inicializada int miMatriz[2][4]={{1,2,3,4},{5,6,7,8}}; miMatriz[0][0] miMatriz[0][1] miMatriz[0][2] miMatriz[0][3] miMatriz[1][0] miMatriz[1][1] miMatriz[1][2] miMatriz[1][3] Fila 0 Fila 1 Columna 0 Columna 1 Columna 2 Columna 3 1 2 3 4 5 6 7 8 Fila 0 Fila 1 Columna 0 Columna 1 Columna 2 Columna 3 Informática I – Ingeniería Electrónica Matriz: Uso en funciones Al utilizar matrices en funciones, es obligatorio declarar la cantidad de columnas en la definición de la función. //Esta función recibe la dirección de memoria de una matriz de n filas y 3 columnas. void imprimirMatriz(int matriz[][3], int filas, int columnas) { for (int i = 0; i < filas; i++) { for (int j = 0; j < columnas; j++) { printf("%d ", matriz[i][j]); } printf("\n"); } } Informática I – Ingeniería Electrónica A programar 1) Realice una función que recibe una matriz de 2x2 y devuelve el valor de su determinante 2) Realice una función que recibe dos matrices de 2x2 y una tercera matriz donde guardará el resultado del producto de ambas. Determinante de matriz de 2x2: Informática I – Ingeniería Electrónica Ejercicio adicional para la próxima clase Realice una función de reciba un vector de enteros y su cantidad de elementos y devuelva el vector ordenado de menor a mayor. Diapositiva 1 Diapositiva 2 Diapositiva 3 Diapositiva 4 Diapositiva 5 Diapositiva 6 Diapositiva 7 Diapositiva 8 Diapositiva 9 Diapositiva 10 Diapositiva 14 Diapositiva 15 Diapositiva 16 Diapositiva 17 Diapositiva 18 Diapositiva 19 Diapositiva 22 Diapositiva 23
Compartir