CO 2111 Tema 10 Anexo Lectura Matrices pdf
Texto completo
(2) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.). Funciones fopen y fclose (cont.) Cuando por alguna razón el archivo no puede ser abierto, se devuelve un -1 en la variable fi. En este caso el valor de retorno texto puede proporcionar información sobre el tipo de error que se ha producido. Después de realizar las operaciones de lectura y escritura deseadas, el archivo se puede cerrar con la función fclose en la forma siguiente: st = fclose( fi ) donde st es un valor de retorno para posibles condiciones de error, (cuando st retorna como 0 significa que el archivo cerró bien). Si se quieren cerrar a la vez todos los archivos abiertos puede utilizarse el comando: st = fclose( 'all' ). Prof. Saúl. Buitrago y Oswaldo Jiménez.
(3) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf Estas funciones permiten leer y escribir en archivos ascii, es decir, en archivos de texto plano. Forma general de la función fscanf: [ var, count ] = fscanf( fi, format, size ) Lee del archivo identificado por fi de acuerdo a un formato especificado por format y lo devuelve en la variable var (real, vector o matriz). count (opcional) devuelve el número de elementos leídos satisfactoriamente. size (opcional) limita el número de elementos a ser leidos en el archivo Si no se coloca, lee hasta el final del archivo. Si se especifica, se tienen las siguientes opciones N lee a lo más N elementos en un vector columna inf lee hasta el final del archivo [M,N] lee a lo más M * N elementos llenando al menos una matriz M×N siguiendo el orden de columnas. N puede ser inf, pero no M. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(4) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) format va encerrada entre comillas simples, y contiene los especificadores de formato para las variables %s para cadenas de caracteres %d para variables enteras %f para variables de punto flotante %c para un caracter Ejemplos: Considérese el archivo de texto plano de nombre entrada1.txt, mostrado en la figura. Veamos varias posibilidades de lectura sobre este archivo: 1) >> fi1 = fopen('entrada1.txt', 'r'); >> s = fscanf( fi1, '%s'); >> fclose(fi1);. Lee todo el contenido del archivo como una cadena de caracteres, quitando los espacios en blanco. El resultado es s = '1001200324512aab678910201'. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(5) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) 2) >> fi2 = fopen('entrada1.txt', 'r'); >> s = fscanf( fi2, '%d'); >> fclose(fi2); Lee enteros mientras sea posible. Por ejemplo, cuando se consigue la cadena 'aab', la misma no puede ser leída como un entero, de modo que el último entero leído es 512. Nótese que el arreglo resultante es columna, esto es: s = [ 1001 200 32 4 512 ] 3) >> fi3 = fopen('entrada1.txt', 'r'); >> s = fscanf( fi3, '%d',1); >> fclose(fi3);. Lee sólo un entero. Así, s = 1001. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(6) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) La lectura mediante fscanf es secuencial sobre los archivos de texto plano, de manera que es posible leer todos los datos contenidos en éste, si se conoce previamente la estructura del archivo. Por ejemplo: 4) >> fi4 = fopen('entrada1.txt', 'r'); >> s = fscanf( fi4, '%d',5); >> t = fscanf( fi4, '%s',1); >> u = fscanf( fi4, '%d'); >> fclose(fi4); Lee los enteros que están después de la cadena 'aab' hasta el final del archivo. El resultado es el vector columna u = [ 6 ; 7 ; 8 ; 9 ; 10201 ]. Lee los primeros cinco enteros, los cuales son almacenados en el vector columna s = [ 1001 ; 200 ; 32 ; 4 ; 512 ] Lee una cadena de caracteres que queda almacenada en la variable t, por lo cual t = 'aab'. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(7) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Supongamos ahora que se quieren leer varias matrices desde un archivo de texto plano de nombre "matrices.txt" a fin de mostrarlas en pantalla. En el mismo archivo está contenida la información de cuántas matrices se van a leer y, para cada una de ellas, se especifica nombre, dimensiones y los elementos que la componen. A continuación se muestra un ejemplo de un tal archivo:. cantidad de matrices a ser leídas. dimensiones de las matrices. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(8) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) En el siguiente código, se lee la información contenida en el archivo "matrices.txt" y se muestran en la pantalla las matrices leídas. % Se abre el archivo 'matrices.txt' para lectura fid = fopen('matrices.txt','r'); % Se verifica si el archivo se abrió correctamente if fid == -1 disp('No se pudo abrir el archivo matrices.txt'); return end nmat = fscanf(fid,'%d',1); % Cantidad de matrices a ser leídas for k = 1 : nmat % para cada matriz se lee ... nombre_matriz = fscanf(fid,'%s',1); % ... nombre nfil = fscanf(fid,'%d',1); % ... cantidad de filas ncol = fscanf(fid,'%d',1); % ... cantidad de columnas matriz = fscanf(fid,'%d',[ncol,nfil]); % ... elementos matriz = matriz'; % Se imprime la matriz por pantalla disp(matriz); end fclose(fid); Prof. Saúl. Buitrago y Oswaldo Jiménez.
(9) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Es importante destacar la forma en la que se lee cada matriz: * Para leer la matriz completa, se especifica, como tercer parámetro de la función fscanf, al vector [ncol,nfil]; esto es, la matriz se lee por filas. matriz = fscanf(fid,'%d',[ncol,nfil]); * Como cada fila leída se almacena por columnas, la matriz resultante de la lectura es, en realidad, la traspuesta de la matriz dada en el archivo. Por lo tanto, es necesario trasponer la matriz resultante de la lectura. matriz = matriz'; Siempre se deben ejecutar estos dos pasos para leer una matriz completa desde un archivo de texto plano. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(10) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Existe una alternativa para leer una matriz desde un archivo de texto plano, aunque es menos eficiente que la lectura de la matriz completa mediante el procedimiento explicado en la lámina anterior. Consiste en leer la matriz fila por fila en un ciclo. ciclo Así, la lectura de las matrices contenidas en el archivo "matrices.txt" dado anteriormente, se vería como se muestran en el siguiente código:. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(11) Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) % Se abre el archivo 'matrices.txt' para lectura fid = fopen('matrices.txt','r'); % Se verifica si el archivo se abrió correctamente if fid == -1 disp('No se pudo abrir el archivo matrices.txt'); return end nmat = fscanf(fid,'%d',1); % Cantidad de matrices a ser leídas for k = 1 : nmat % para cada matriz se lee ... nombre_matriz = fscanf(fid,'%s',1); % ... nombre nfil = fscanf(fid,'%d',1); % ... cantidad de filas ncol = fscanf(fid,'%d',1); % ... cantidad de columnas. matriz = [ ]; % 'sine qua non' for i = 1 : nfil matriz(i,:) = fscanf(fid,'%d',ncol); end % Se imprime la matriz por pantalla disp(matriz); end fclose(fid); Prof. Saúl. Buitrago y Oswaldo Jiménez. Para que esta técnica funcione, es imperativo inicializar la variable 'matriz' cada vez que se vaya a leer una nueva matriz desde el archivo. Esto se debe básicamente al hecho de que se está usando una misma variable para almacenar todas las matrices leídas..
(12) Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Todavía se puede escribir una tercera versión de este programa, considerando el hecho de que el tamaño de la matriz consiste de dos números enteros (número de filas y de columnas) que pueden ser leídos simultáneamente : % Se abre el archivo 'matrices.txt' para lectura fid = fopen('matrices.txt','r'); % Se verifica si el archivo se abrió correctamente if fid == -1 disp('No se pudo abrir el archivo matrices.txt'); return end nmat = fscanf(fid,'%d',1); % Cantidad de matrices % a ser leídas .... ... for k = 1 : nmat nombre_matriz = fscanf(fid,'%s',1); tam = fscanf(fid,'%d',2);. nfil = tam(1); ncol = tam(2); matriz = [ ]; for i = 1 : nfil matriz(i,:) = fscanf(fid,'%d',ncol); end % Se imprime la matriz por pantalla disp(matriz); end fclose(fid);. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(13) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Forma general de la función fprintf: count = fprintf( fi, format, var, … ) Dirige su salida formateada hacia el archivo indicado por el identificador fi, format contiene los formatos de escritura y count retorna el número de bytes escritos satisfactoriamente. Después del formato habrá una lista de variables y/o valores que deben concordar, una a una, en cantidad y en tipo con los especificadores de conversión que aparezcan en el formato, los cuales se identifican por el uso del caracter %. Ejemplos: >> fi1 = fopen(‘salida1’, ‘w’); >> count = fprintf( fi1, ‘el número de ecuaciones es %d \n’, n); → escribe el texto entre comillas y el valor de la variable n según el formato indicado (número entero en este caso) >> fi2 = fopen(‘salida2’, ‘w’); >> count = fprintf( fi2, ‘el determinante es %10.4f \n’, n); Prof. Saúl. Buitrago y Oswaldo Jiménez.
(14) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Obs. \n en el formato obliga a crear una línea nueva en el archivo de texto. Obs. El uso de \n para saltar líneas en un archivo de texto plano, no se ve reflejado al abrir el archivo con la aplicación bloc de notas (notepad) de Windows. Es decir, al abrir el archivo, la impresión visual es que no hay saltos de línea en absoluto. Esto se resuelve usando la secuencia \r\n en el formato para fprintf, en lugar de usar sólo \n. Obs. Aunque se podría creer que \n es una cadena de dos caracteres cuando aparece en un formato de impresión, en realidad es un caracter especial no imprimible que sgnifica "nueva línea" (new line). De la misma manera, \r es un caracter especial no imprimible que significa "salto de línea" (carriage return) cuando aparece en un formato de impresión. De hecho, los códigos ascii de estos caracteres especiales son 10 para \n y 13 para \r. Por lo tanto, una expresión como fprintf(fid,'\r\n'); es totalmente equivalente a esta otra fprintf(fid,'%c%c',char(13),char(10)); Haga el ejercicio de verificarlo. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(15) Estructuras de control Instrucciones de entrada (lectura) y de salida (escritura) (cont.) Funciones fscanf y fprintf (cont.) Obs. A los caracteres especiales no imprimibles, tales como \r y \n, también se les conoce como caracteres de "escape" (escape characters). Otros caracteres de escape no imprimibles son \b (backspace, código ascii 8), \t (horizontal tab, código ascii 9), \f (form feed, código ascii 12). Existen caracteres de escape imprimibles, básicamente destinados a incluir en la impresión aquellos caracteres que tienen significado especial dentro del formato. Por ejemplo, para imprimir la comilla simple en un formato, se debe usar '' (i.e. dos veces la comilla simple); asimismo, %% permite imprimir el caracter % en un formato. Consulte la ayuda de fprintf para obtener más información. Obs. La función fprintf de Matlab se puede usar para imprimir mensajes en la pantalla del computador. Para ello, basta omitir el parámetro referido al número de identificación de archivo (primer parámetro). Los demás parámetros, esto es, el formato y la lista eventual de variables y/o valores asociados a los especificadores de conversión, se manejan de la misma manera que en el caso de impresión en archivos. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(16) Estructuras de control Ejemplo: Leer un conjunto de matrices de un archivo, determinar cuales son DD y cuales no, y las escribe en un archivo con el resultado. Archivo de entrada: datos_matrices_DD.txt Archivo de salida: salida_matrices_DD.txt Script: lectura_matrices_DD.m Definición: Una matriz A de orden n×n es diagonal dominante estricta si. a ii >. n. ∑a. j =1, j ≠i. 7 2 0 A = 3 5 − 1 La matriz 0 5 − 6 . ij. ,. 1≤i ≤n. es diagonal dominante estricta, ya que. 7 > 2+0 5 > 3 + −1 −6 > 0 + 5. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(17) Estructuras de control Ejemplo: Archivo de entrada: datos_matrices_DD.txt. número de matrices. dimensiones de las matrices. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(18) Estructuras de control Ejemplo:. Impresión en pantalla. Nótese la traspuesta. Saltos de línea para Notepad. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(19) Estructuras de datos Cadena de caracteres y archivos Ejercicio: Dada una cadena de caracteres, la cual representa a un número hexadecimal (es decir, en base 16), hallar el correspondiente valor en base 10. Se plantea que los números hexadecimales a ser convertidos a base 10 se lean desde un archivo de texto plano, de modo que cada número esté en una línea del archivo . En este caso es estrictamente necesario manejar el dato de entrada como una cadena de caracteres porque en base 16 se utilizan dígitos representados por letras (los dígitos en base 16 son 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Se propone crear un script en Matlab que lleve a cabo esta tarea. Se espera que el programa verifique exhaustivamente la pertinencia de los datos que sean leídos desde el archivo de texto plano. El manejo de los códigos ascii previsto en Matlab facilita enormemente la resolución de este problema. Se les sugiere resolver primero el problema desde el punto de vista lógico, escribiendo (en el papel) un algoritmo en lenguaje natural, que luego trasladarán al lenguaje de Matlab.. archivo : hexadecimal_a_decimal.m. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(20) Estructuras de control Instrucción de lectura “textread” Lee datos numéricos (sin formato) o heterogéneos (con formato) de un archivo de texto (ascii) Sintaxis sin usar formato: a = textread(archivo) a = textread(archivo, ‘ ', n) a = textread(archivo, ‘ ', param, valor, ...) a = textread(archivo, ‘ ', n, param, valor, ...) Lee n líneas de archivo y las almacena en la variable a. Se supone que archivo contiene sólo datos numéricos. Opciones para param • 'delimiter': identifica el caracter de separación entre los datos • 'headerlines': número de líneas de cabecera del archivo, estas líneas son ignoradas en la lectura • 'commentstyle‘: con valor 'matlab‘, indica que los caracteres después de % son ignorados Prof. Saúl. Buitrago y Oswaldo Jiménez.
(21) Estructuras de control Instrucción de lectura “textread” (cont.) Ejemplos: >> a = textread('datos1.txt ') →. lee todas las líneas del archivo. >> a = textread('datos1.txt ', ' ', 1) →. lee la primera línea del archivo. >> a = textread('datos2.csv ', ' ', 'delimiter', ',') →. lee todas las líneas del archivo. >> a = textread('datos2.csv', ' ', 1, 'delimiter', ',') →. lee la primera línea del archivo. >> a = textread('datos22.csv', ' ', 'delimiter', ',', 'headerlines', 1) →. lee todas las líneas del archivo después del encabezado. >> a = textread('datos23.csv', ' ', 'delimiter', ',', 'headerlines', 1, 'commentstyle', 'matlab') → lee todas las líneas del archivo después del encabezado, ignorando las comentadas Prof. Saúl. Buitrago y Oswaldo Jiménez.
(22) Estructuras de control Instrucción de lectura “textread” (cont.) Sintaxis usando formato: [a, b, c, …] = textread(archivo, formato) [a, b, c, …] = textread(archivo, formato, n) [a, b, c, …] = textread(archivo, formato, param, valor, ...) [a, b, c, …] = textread(archivo, formato, n, param, valor, ...) Lee n líneas de archivo con formato especificado y las almacena en las variables a, b, c, etc., respectivamente. Los datos en archivo pueden ser heterogéneos (números y caracteres), pero se espera que estén organizados homogéneamente por columnas. Formatos: • El tipo de dato de cada columna se %n : números reales o enteros suministra en formato y corresponde %d : números enteros a cada variable a, b, c, … %f : números reales • Si n no se especifica o si es -1, lee el %s : cadena de caracteres archivo completo, en caso contrario %5c : 5 caracteres (incluye lee n líneas espacios en blanco) Prof. Saúl. Buitrago y Oswaldo Jiménez.
(23) Estructuras de control Instrucción de lectura “textread” (cont.) Ejemplos: >> [nombre, tipo, x, y, respuesta] = … textread('datos.txt', '%s %s %f %d %s') → lee todas las líneas del archivo, según el formato especificado y las almacena en las variables indicadas. >> nombre = textread('datos.txt', '%s %*[^\n]') → lee la primera columna. Prof. Saúl. Buitrago y Oswaldo Jiménez. nombre = 'Sally' 'Joe' 'Bill' tipo = 'Type1' 'Type2' 'Type1' x= 12.3400 23.5400 34.9000 y= 45 60 12 respuesta = 'Si' 'No' 'No'. nombre = 'Sally' 'Joe' 'Bill'.
(24) Estructuras de control Instrucciones de lectura “textread” (cont.). >> inicial = textread('datos.txt', '%c %*[^\n]') → lee el primer caracter. inicial = S J B. >> x = textread('datos.txt', '%*s %*s %f %*d %*s') → lee la tercera columna. x= 12.3400 23.5400 34.9000. >> a = textread('datos.txt', '%s', 'delimiter', '\n') → cada línea como cadena de caracteres a= 'Sally 'Joe 'Bill. Type1 12.34 45 Si' Type2 23.54 60 No' Type1 34.90 12 No'. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(25) Estructuras de datos Arreglos de cadenas de caracteres Un arreglo de cadena de caracteres es como un vector cuyos elementos son cadenas de caracteres. Este puede ser creado usando llaves, así >> s1 = {‘hola’ ‘si’ ‘adios’}. →. >> ss = {'saul' 'pedro' ; 'pepe' 'maria'} →. s1 = 'hola'. 'si'. 'adios'. ss = 'saul' 'pedro‘ 'pepe' 'maria'. Si construimos la cadena de caracteres concatenados verticalmente >> s2 = strvcat(‘hola', 'si', ‘adios') La podemos interpretar como “arreglo de cadena de caracteres”, pero no es tal. Se tiene que s1 y s2 son diferentes, pero se puede pasar de un tipo al otro usando las funciones “char” y “cellstr”. Además existen las funciones “ischar” y “iscellstr” para identificar entre cada uno de ellos. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(26) Estructuras de control Instrucciones de lectura “textread” (cont.) Dado el arreglo de cadena de caracteres nombre: >> nombre nombre = 'Sally' 'Joe' 'Bill' Podemos agregar una cadena de caracteres a este arreglo: >> nombre = cellstr(strvcat(char(nombre),‘Pedro')) → agrega al arreglo de cadena de caracteres ‘nombre’ el elemento ‘Pedro’ nombre = 'Sally' 'Joe' 'Bill' ‘Pedro' >> size(nombre) → ans = 4 1. Prof. Saúl. Buitrago y Oswaldo Jiménez.
(27) Estructuras de control Instrucción de lectura “load” Lee el contenido de un “archivo” y lo deposita en un arreglo con nombre “archivo”. >> load datos1.txt → almacena el contenido en la variable datos1 la instrucción es equivalente a. load –ascii datos1.txt. >> s = load(‘datos1.txt’) → almacena el contenido en la variable s >> var = ‘datos1.txt’; s = load(var). →. almacena en la variable s. Obs: • El archivo puede tener cualquier extensión diferente a “.mat”, el archivo es tratado como ascii • Es importante que todas las filas tengan el mismo número de columnas • Las separaciones entre elementos: blancos o comas (,) • El archivo debe tener sólo números Prof. Saúl. Buitrago y Oswaldo Jiménez.
(28)
Documento similar
Posteriormente, el expositor Carlos Ugalde, investigador en temas de ordenamientos territorial y planificación urbana del Instituto Tecnológico de Costa Rica, se refirió a
Como antes indicábamos, el mármol es una roca que, dada su alta densidad de energía y capacidad técnica de conductividad, es idónea para nuestro experimento.. El basalto tiene
Se estima una distancia de más de 11 millones de años luz hablando de una cantidad de sistemas solares que no tendrían espacio en nuestra mente y esto solo hablando del grupo
Respecto de esta última, ‘Opción Declaración Jurada con importación de archivo (txt)’ , se genera la DDJJ, a partir de la importación de un archivo conteniendo los datos
BLANCA.— (¡Esa mujer está llorando y yo la puedo socorrer!… Ya que él no me ama… ¿Para qué quiero vivir? ¡Moriré por él, pero eso es horrible!).. SALTABADIL.— No
Pero cuando vio a Mar sacar el fuego de bajo su ala, voló de vuelta a su tribu a contarles lo que había visto.... Justo antes de que el sol saliera, Tatkanna se despertó y comenzó
Como él, todos los estudiantes del Tecnológico de Monterrey se preparan para terminar las clases semestrales e iniciar este próximo 14 de mayo el periodo de exámenes finales.. Si
desarrollo del país y cumplir con la misión que se ha propuesto, tiene la intención de impulsar un Plan de Formación en Educación Financiera y Económica para mujeres cabeza de