INFO 061
Laboratorio 4 9 de Mayo de 2007
Control de Errores Podemos controlar los errores en el flujo de un programa usando la estructura try-catch. A = rand(3,4) try f = input('Hola, ingresa la fila '); c = input('Hola, ingresa la columna '); n = A(f,c); disp(['A(' num2str(f) ',' num2str(c) ') = ' num2str(n)]); catch disp('Error') end Las sentencias dentro de la sección try son ejecutadas normalmente, pero cuando aparece un error, la ejecución pasa automáticamente a la sección catch.
Número de parámetros Dentro del cuerpo de una función existen (automáticamente creadas) dos valores, nargin y nargout que representan el número de parámetros de entrada y salida respectivamente. El siguiente ejemplo muestra una función que calcula el promedio, el mínimo, el máximo de un vector dependiendo de: -
Si al llamar la función se entregan como entrada dos vectores, los valores del segundo representarán las ponderaciones de los valores del primero. Si se llama la función con 1 argumento, sólo se calcula el promedio.
function [P,minimo,maximo] = promedio(A,B) try L = size(A); switch nargin case 1 suma = 0; for i=1:L(1) for j=1:L(2) suma = suma + A(i,j); end end P = suma / (L(1)*L(2)); case 2, P = 0; for i=1:L(1) for j=1:L(2) P = P + A(i,j)*B(i,j); end end end catch disp('Error. Las dimensiones de las matrices de entrada deben coincidir'); end switch nargout case 2, minimo = min(A); case 3, minimo = min(A); maximo = max(A); end
Lectura y escritura de archivos Lectura de archivos El siguiente ejemplo muestra un sencillo programa que lee líneas de un archivo de texto, interpreta el contenido como números separados por espacio, los almacena en un vector y luego muestra en consola el vector: % este programa muestra las funcionalidades basicas de % lectura de archivos de texto nombrearchivo = input('Ingrese el nombre del archivo: ','s'); [arch,error] = fopen(nombrearchivo,'r'); % arch queda en -1 si ha habido un error al abrir el archivo if (arch > -1) % se lee toda la informacion y se almacena en un vector % los datos son interpretados como numeros enteros (%d) vector = fscanf(arch,'%lf'); res = fclose(arch); disp('Los numeros leidos: '); disp(vector); else disp('El archivo no pudo ser abierto'); end
Notar como el programa pide el nombre del archivo a leer, el cual debe estar en la misma carpeta que el archivo .m del programa (a menos que al ejecutar el programa el usuario especifique la ruta precisa del archivo). Para que la función input obtenga un texto (sin transformar a número) se incluye el modificador ‘s’ (string). Para realizar la lectura de datos desde un archivo de texto se utiliza la función fscanf, sin embargo antes de leer los datos, el archivo debe ser “abierto” y para esto se utiliza la función fopen. La función fopen recibe dos entradas: el nombre del archivo y el modo de apertura. Los modos de apretura: 'r' 'w' 'a' 'r+' 'w+' 'a+'
read write (create if necessary) append (create if necessary) read and write (do not create) truncate or create for read and write read and append (create if necessary)
La sintaxis de la función fscanf es bastante flexible. En este caso se leen todos los elementos separados por espacio del archivo arch como números de doble precisión (esto por el modificador ‘%lf’. Otros modificadores: ‘s’ para cadenas, ‘%d’ para enteros). Luego de realizar la lectura del contenido del archivo, éste debe ser cerrado usando fclose. Un ejemplo de archivo, numeros.txt: 1 2 5 -30.74 -12 47 -100.67 65 4.3 12
Escritura de archivos El ejemplo es similar al de lectura de archivos: % este programa muestra las funcionalidades basicas de % escritura de archivos de texto [arch,error] = fopen('datos.txt','w'); if (arch > -1) for i=1:1000 numero = fprintf(arch,'%d ',i); end res = fclose(arch); else disp('El archivo no pudo ser creado'); end