Está en la página 1de 2

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' read
'w' write (create if necessary)
'a' append (create if necessary)
'r+' read and write (do not create)
'w+' truncate or create for read and write
'a+' 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