Professional Documents
Culture Documents
6
6
OBJETIVOS
Al terminar este mdulo el estudiante estar en condiciones de: Planear y controlar en forma exacta cmo y donde visualizar los resultados ya sea en la pantalla o en el papel de la impresora. Utilizar los descriptores de edicin d, e, i, f, g, s para visualizar resultados. Utilizar las funciones input, fprintf, sprintf y disp para introducir datos desde el teclado y visualizar los resultados. Distinguir las partes que conforman los descriptores de edicin: Conversin de caracteres, nmero de cifras decimales, precisin y ancho de campo. Utilizar la funcin format para controlar el formato de salida de los valores numricos en la linea de comando de Matlab.
INTRODUCCIN
En el mdulo 5 se estudia la interfaz grafica de usuario de Matlab, donde se programa con objetos y la diferencia radica en que los programas se realizan con ayuda de unos subprogramas que tiene incorporado Matlab. Este mdulo ensea a utilizar las funciones ms importantes para introducir y visualizar datos. Las instrucciones de entrada/salida que se analizan en el mdulo 1 son las proposiciones input / disp con lista dirigida. Estas brindan un procedimiento rpido y sencillo para la entrada y salida de datos numricos, pero tienen desventajas. La proposicin input con lista dirigida suministra un medio conveniente para la entrada de datos numricos desde el teclado; sin embargo, puede necesitarse un modo de entrada ms estructurado cuando se lee de un archivo de datos. La proposicin disp no le permite al programador escoger el formato de salida. El uso de la proposicin disp para escribir encabezados a resultados numricos es poco elegante e ineficiente. Gracias a las proposiciones fprintf y sprintf son posibles una variedad de arreglos de datos y el programador puede planear y controlar en forma exacta cmo y dnde visualizar los resultados ya sea en la pantalla o en el papel de la impresora. En este mdulo, a estas proposiciones se les llama: proposiciones input / fprintf con formato dirigido.
Control de entrada/salida
PROPOSICIN input CON FORMATO DIRIGIDO La proposicin ejecutable input, se utiliza con una proposicin fprintf y su frmula general es: Nombre = input ( Entrada = ) Donde: Nombre representa el nombre de la variable. input representa el nombre de la proposicin. Entrada = representa el nombre de la variable (o variables) a la cual se asigna el valor leido Un ejemplo de la proposicin input con formato dirigido es: EJEMPLO 6.1 USO DE LA PROPOSICIN input CON FORMATO DIRIGIDO Este programa calcula el volumen de la esfera y el valor del radio se suministra desde el teclado.
% ************* Programa 6.1 *************** clear all,clc % Introduzca el valor del radio de la esfera Radio= input( Introduzca el radio de la esfera = ) ; % Escriba la frmula del volumen de la rsfera Vol = (3/4)*pi*Radio.^3; % Salida del resultado fprintf( \ n Radio = %2i Volumen = %3.3f \n ,Radio,Vol)
Esto significa que se suministra desde el teclado un valor real y se asigna al nombre de la variable real Radio. El programador debe arreglar los datos segn el descriptor de edicin %2i de la proposicin asociada fprintf. El valor que se asigna a Radio debe introducirse desde el teclado en forma entera real sin cifras decimales de precisin justificada a la derecha en la columna de un campo de dos, i indica un nmero entero. El descriptor de edicin %3.3f para la salida del valor del volumen de la esfera,tiene un ancho de campo de 3 con tres cifras decimales despes de la coma y f indica un nmero real,de forma decimal (sin exponente). La forma general de la proposicin fprintf es: Apstrofos
Donde:
w establece el ancho del campo. b especifica el nnero de dgitos despus del punto decimal. i indica un nmero entero real. 2
Control de entrada/salida
f g e .
indica un nmero entero real de forma decimal ( sin exponente). indica las dos formas e y f. indica una forma exponencial. indica el punto decimal.
DESCRIPTOR DE EDICION i El descriptor de edicin i se utiliza para especificar una constante entera que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposicin input asociada. La forma general del descriptor de edicin i es:
% wi
establece el ancho del campo(el nmero de columnas de las cuales se lee el valor). i indica una forma de tipo entero. Un ejemplo del uso del descriptor de edicin i es:
>> A=23; >> fprintf(A=%2i \n,A)
Donde:
La salida es:
A= 23
Un espacio en blanco delante del descriptor de edicin se interpreta como una columna vaca a la salida de los resultados. Por ejemplo, si escribe ahora : >> fprintf( A=%2i \n ,A) La salida es: A=23, observe el espacio en blanco al lado izquierdo de A. Por tanto es importante que las constantes enteras en un registro se justifiquen a la derecha dentro de sus campos. Por ejemplo,si el valor entero 23, se estableci para leerlo con un descriptor de edicin %5i, se coloca en la cuarta columna del campo de cinco columnas, anteponiendose tres columnas vacias, el valor que se asigna al nombre de la variable es 23. >> fprintf(A=%5i \n,A) La salida es: A= 23, observe el espacio en blanco despus del signo igual. El signo menos hace parte del valor del dato. El signo algebraico ocupa una columna que est implcito en el ancho del campo. Por ejemplo, si escribe ahora : >> B=-23; >> fprintf(B=%2i\n,B) La salida es: B=-23, observe que reserva una columna para el signo.
DESCRIPTOR DE EDICION f El descriptor de edicin f se utiliza para especificar un nmero entero real de forma decimal(sin exponente) que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposicin input asociada. Universidad del Atlntico-Facultad de Ingeniera 3
Control de entrada/salida
% w.bf
Donde: w establece el ancho del campo. b especifica el nmero de dgitos que siguen al punto decimal(cifras decimales). f indica un nmero de tipo real de forma decimal(sin exponente). . indica el punto decimal.
Ejemplos del uso del descriptor de edicin f es: Escriba desde la lnea de comando de Matlab:
>> B= 7.5; >> fprintf(B=%2.1f \n ,B)
La salida es: B= 7.5,observe el espacio despus del signo igual. Un descriptor de edicin %2.1f que se emplea con una proposicin fprintf, significa que la constante correspondiente en el registro debe estar en modo decimal real ( sin exponente) y que el nombre de la variable en la lista fprintf debe ser real. El valor se lee de las 2 columnas del registro. El nmero 2 especifica el nmero de columnas (ancho del campo) cubierto por el descriptor. Hay un lugar decimal (.1). El punto decimal No necesita incluirse en el valor que proporciona ya que el descriptor de edicin en la especificacin fprintf (%2.1f) coloca el punto decimal de modo que el ultimo dgito del campo de 2 columnas est a la derecha del punto decimal. Un punto decimal ocupa una columna y debe incluirse en el ancho del campo, reduciendo asi en uno el nmero de dgitos que pueden colocarse en un campo especifico. Los signos algebraicos positivos y negativos estn implcito en el ancho del campo del descriptor de edicin. Es buena prctica especificar para todos los descriptores de edicin un ancho del campo mayor en dos lugares del mnimo requerido, que suministren espacios que separen valores sucesivos. Si el descriptor de edicin f no proporciona los espacios para el nmero de cifras decimales y el nmero de caracteres en el valor ( que incluye el punto decimal y el signo algebraico de una cifra significativa), se presenta un listado de valores que no se distinguen unos de otros. Estos casos se trataran ms adelante. Los siguientes ejemplos ilustran el uso del descriptor de edicin f: Escriba desde la lnea de comando de Matlab: Caso 1 >> fprintf('%7.6f\n',pi) % la salida es: 3.141593 Caso 2 >> fprintf('%6.4f\n',pi) % la salida es: 3.1416
Universidad del Atlntico-Facultad de Ingeniera
Control de entrada/salida
Caso 3 >> fprintf('%10.5f\n',pi) % la salida es: 3.14159 En el primer caso el nmero pi se visualiza ocupando 7 columnas justificadas a la derecha, el punto decimal no entra en el conteo y tiene seis decimales. En el segundo caso el nmero pi se visualiza ocupando cinco columnas justificadas a la derecha y tiene cuatro decimales, redondea la ltima cifra. En el tercer caso el nmero pi se visualiza ocupando 7 columnas justificadas a la derecha, dejando tres columnas vacias antes del nmero y tiene cinco decimales. El siguiente ejemplo utiliza nmeros reales positivos, negativos y exponenciales: Escriba desde la lnea de comando de Matlab:
>> X=1234.567;Y=-0.012345678;Z=0.1234567e-2; >> fprintf(%13.7f %13.7f %13.7f\n,X,Y,Z)
La salida es:
1234.5670000 -0.0123457 0.0012346
EJEMPLO 6.2 ENTRADA DE DATOS DESDE UN VECTOR COLUMNA. Este programa calcula el rea y la longitud de la circunferencia para valores del radio dado en forma de un vector columna. Los valores del radio son 10, 20, 32, 40 y 75
% ************ Programa 6.2************** clear all clc Radio=[10 20 32 40 75]'; for N=1:5 Circun=2*pi*Radio; Area= pi*Radio.^2; fprintf('\n Cuando el radio=%2i la circunfrencia es %7.3f\n',Radio(N),Circun(N)) fprintf(' y el area es %7.3f\n',Area(N)) end
Control de entrada/salida
EJEMPLO 6.3 EL CARCTER \n ENTRE DESCRIPTORES DE EDICIN Calcula el rea del crculo y los datos aparecen en el siguiente rengln con sus respectivos encabezados.
% ************* Programa 6.3 ******************** clear all,clc Diam=4.0; Area=pi*(Diam/2)^2; fprintf('Dimetro(cm) Area(cm^2) \n %i %10f \n',Diam,Area)
EJEMPLO 6.4 INTRODUCCIN DE DATOS DESDE UN VECTOR FILA La frmula para el rea de un tringulo de lados a, b y c es:
Area = S (S a )(S b )(S c ) Donde S = (a + b + c ) / 2 Calcule el rea del tringulo para a=2, b=3 y c =4
Introduzca los valores en forma vectorial: [2,3,4] El siguiente programa realiza los clculos:
% ************* Programa 6.4 ******************** %Este programa calcula el rea de un tringulo de %lados A, B y C clear all clc L=input('Introduzca los lados='); s= (L(1) + L(2) + L(3))/2; Eq=@(s)(s*(s-L(1))*(s-L(2))*(s-L(3)))^(1/2); Argum=(s*(s-L(1))*(s-L(2))*(s-L(3))); if (Argum)<= 0 disp('El triangulo es imposible') else Area=Eq(s); fprintf('El rea es de %6.5f\n',Area) end
Se utiliza la estructura de bloque if else end, de forma tal que cuando se introduzcan algunos valores de los lados que hacen el argumento Argum adquiera un valor negativo o cero, aparece el mensaje El tringulo es imposible. Los valores de los lados se introducen desde el teclado en forma de un vector fila entre corchetes ([2,3,4]), separados por comas o dejando un espacio en blanco entre ellos.
Control de entrada/salida
DESCRIPTOR DE EDICION g El descriptor de edicin g se utiliza para especificar un nmero entero real de notacin exponencial y en forma decimal (sin exponente), que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposicin input asociada. En el formato g, el nmero a la derecha del punto decimal, especifica el nmero total de dgitos que son visualizados. El descriptor de edicin g produce un campo tanto para los descriptores de edicin f o e dependiendo del valor asignado. La forma general del descriptor de edicin g es:
%w.bg
Donde: w establece el ancho del campo. b especifica el nmero total de digtos visualizados. g indica el modo de conversin de caracteres e y f . indica el punto decimal.
Los siguientes ejemplos ilustran el uso del descriptor de edicin g: Escriba desde la lnea de comando de Matlab:
>> X=1234.567;Y=-0.012345678;Z=0.1234567e-2; >> fprintf(%13.7g %13.7g %13.7g\n,X,Y,Z)
0.001234567
La salida con el descriptor de edicin g, presenta los resultados con mayor precisin, que cuando se usa el descriptor de edicin f.
>> fprintf(X=%-13.7g Y=%-13.7g Z=%-13.7g\n,X,Y,Z)
La salida es:
X=1234.567 Y=-0.01234568 Z=0.001234567
En ste ejemplo se coloca el signo (-) en el descriptor de edicin g, para que justifique los valores a la izquierda.
>> fprintf(A=%.7g \n,pi) La salida es: A=3.141593 En ste ejemplo observe que el nmero total de digtos son 7 que corresponde al especificado en el descriptor de edicin g, sin incluir el punto decimal. EJEMPLO 6.5 USO DE input CON LA PROPOSICIN for end Este programa explica detalladamente cada una de la especificaciones ms comunes que se utilizan para la salida de los resultados numricos de precisin sencilla.. El valor asignado para X es 0.1234567.
% ************programa 6.5 **************** clear all,clc input(Introduzca un numero real=); X= input for i=1:4 disp('***************************************************')
Universidad del Atlntico-Facultad de Ingeniera
Control de entrada/salida
fprintf(El valor:%10.7g se imprime como:\n,X) fprintf fprintf(%17.7g cuando la especificacin es %%17.7g\n,X) fprintf fprintf(%17.5g cuando la especificacin es %%17.5g\n,X) fprintf fprintf(%17.3g cuando la especificacin es %%17.3g\n,X) fprintf fprintf(%17.1g cuando la especificacin es %%17.1g\n,X) fprintf X=100*X; end La salida del programa es: Introduzca un numero real=0.1234567 ************************************************** El valor: 0.1234567 se imprime como: 0.1234567 cuando la especificacin es %17.7g 0.12346 cuando la especificacin es %17.5g 0.123 cuando la especificacin es %17.3g
El siguiente programa es para la salida de resultados numricos de doble precisin. El valor asignado para X es 123456789.0
clear all clc X= input input(Introduzca un numero real=); for i=1:4 disp(**************************************************) disp fprintf(El valor:%10.9g se imprime como:\n,X) fprintf fprintf(%20.9g cuando la especificacin es %%20.9g\n,X) fprintf fprintf(%20.7g cuando la especificacin es %%20.7g\n,X) fprintf fprintf(%20.5g cuando la especificacin es %%20.5g\n,X) fprintf fprintf(%20.3g cuando la especificacin es %%20.3g\n,X) fprintf X=100*X; end
Control de entrada/salida
DESCRIPTOR DE EDICION e El descriptor de edicin e se utiliza para especificar la salida de un nmero entero real de notacin exponencial, que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposicin input asociada. Cuando se desconoce la magnitud del valor, puede ser ventajoso especificar la salida numrica con un descriptor de edicin e. La forma general del descriptor de edicin e es:
%w.be
Donde: w b e . establece el ancho del campo. especifica el nmero total de digtos despus del punto decimal. indica el modo exponencial real. indica el punto decimal.
Los siguientes ejemplos ilustran el uso del descriptor de edicin e: Escriba desde la lnea de comando de Matlab: >> fprintf(%.e\n,pi) La salida es: 3e+000,observe que la salida registra un solo digito.
Universidad del Atlntico-Facultad de Ingeniera
Control de entrada/salida
>> B=-0.0045678; >> fprintf('A=%-0.5e \n',B) La salida es: A=-4.56780e-003,convierte el numero en forma exponencial.
La siguiente tabla muestra cmo pi se visualiza bajo una variedad de especificaciones de descriptores de edicin utilizando sprintf: Especificacin de edicin sprintf(%.0e,pi) sprintf(%.1e,pi) sprintf(%.5e,pi) sprintf(%.10e,pi) sprintf(%.0f,pi) sprintf(%.5f,pi) sprintf(%.10f,pi) sprintf(%8.5g,pi) sprintf(%8.10g,pi) La salida es: 3e+00 3.1e+00 3.14159e+000 3.1415926536e+000 3 3.14159 3.1415926536 3.1416 3.141592654
Donde:
w b s d f g e N .
establece el ancho del campo. especifica el nnero de dgitos despus del punto decimal. indica una cadena de caracteres. indica cualquier nmero dgito. indica un nmero entero real de forma decimal ( sin exponente). indica las dos formas e y f. indica una forma exponencial. indica la cadena de caracteres. indica el punto decimal.
DESCRIPTOR DE EDICION s El descriptor de edicin s se utiliza para anotar resultados numricos a la salida con informacin de carcter alfanumricos u otros de caracteres constantes, que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposicin input asociada. La edicin s de cadenas de caracteres consiste en encerrar la lista de caracteres entre dos apstrofos ( ).
Universidad del Atlntico-Facultad de Ingeniera
10
Control de entrada/salida
%s
Donde: s especifica la cadena de caracteres alfanumricos.
Los siguientes ejemplos ilustran el uso del descriptor de edicin s: Escriba en la lnea de comando de Matlab:
>> sprintf('El precio de la %s en %d/%d/%d fue $%.2f','brea',7,1,2010,3.39)
La salida es: ans = El precio de la brea en 7/1/2010 fue $3.39 Los valores a la salida deben colocarse en el mismo orden secuencial de los descriptores de edicin en la cadena de caracteres. Cada valor a la salida corresponde a un descriptor de edicin en la cadena de funcin sprintf. EJEMPLO 6.6 USO DE inputname CON LAS PROPOSICIONES disp y sprintf Sea la funcin myfun con argumentos a y b. Se requiere que las proposiciones disp y sprintf visualicen las dos cadenas de caracteres en pantalla a la salida. Se sumistran los valores de a=10 y b=5 y el valor de y es calculado por el programa. El siguiente programa ilustra el uso de la proposicin inputname:
% ************ programa 6.6 *************** function y = myfun(a,b) disp(sprintf('Mi primera entrada es "%s".' ,inputname(1))) disp(sprintf('Mi segunda entrada es "%s".',inputname(2))) y = a+b;
La salida es:
Mi primera entrada es "a". Mi segunda entrada es "b". ans = 15
CARACTERES DE CONTROLES ESPECIALES Es una parte del texto de la cadena de caracteres, pero debido a que no pueden introducirse como texto ordinario, requieren una secuencia de cadena de caracteres nicos para representarlos. Use algunas de las siguientes secuencias de cadenas de caracteres para insertar caracteres especiales a la salida : Para insertar Use Retroceso \b Forma alimento \f Nueva lnea o en la misma lnea \n Retrono del carro \r Desplazamiento horizontal \t Barra inversa \ \\ El carcter % %% Cualquier digto numrico \d El tabulador vertical \v
Universidad del Atlntico-Facultad de Ingeniera
11
Control de entrada/salida
La alarma o carcter beep El carcter escape Cualquier carcter espacio en blanco, equivalente al conjunto [\t\f\n\r] El carcter con valor hexadecimal N Cualquier carcter simple ( incluyendo el espacio en blanco)
\a \e \s \xN o \x{N}
El siguiente ejemplo ilustra el descriptor de edicin \s de cadena de caracteres y el descriptor de edicin de cualquier nmero digto \d y seis valores para intercambiarlos secuencialmente en la cadena de caracteres:
>> S=sprintf(' %s =%d \n','A',479,'B',352,'C',650)
La salida es:
S = A =479 B =352 C =650
Puede colocar valores de argumentos en la lista secuencial de argumentos( en el mismo orden en que los descriptores de edicin aparecen en la cadena) o por identificador (agregando un nmero a cada uno de los descriptores de edicin que identifique el valor del argumento que reemplaza). Por defecto,MATLAB utiliza el orden secuencial. Para especificar argumentos con identificador numrico, se agrega un entero positivo seguido por un signo $ inmediatamente despus del carcter % en el descriptor. Los siguientes ejemplos ilustran su uso: Ordenado secuencialmente:
>> s=sprintf('%s %s %s','Primero','Segundo','tercero')
La salida es:
s = Primero Segundo tercero
La salida es:
s = tercero Segundo Primero
EJEMPLO 6.7 USO DE LAS ESTRUCTURAS if end / for end y sprintf. El siguiente programa imprime todos los tres dgitos que es igual a la suma de los cubos de sus dgitos:
% ************* programa 6.7 ****************** clear all clc for H=1:9 for T=0:9 for U=0:9 if (100*H+10*T+U == H^3+T^3+U^3) N=sprintf('%s=%d \n','H',H,'T',T,'U',U); N end end end end
Universidad del Atlntico-Facultad de Ingeniera
12
Control de entrada/salida
LA PROPOSICIN format. Use la proposicin format para controlar el formato de salida de los valores numricos visualizados en la lnea de comando de MATLAB. Para escoger el formato de su preferencia, del men file seleccione Preferences luego Command window y escoga Numeric format. Alternativamente puede escribir el formato numrico de su preferencia en la lnea de comando de MATLAB. Use algunos de los siguientes formatos numricos para visualizar valores numricos a la salida : Formato numrico format short format long format short e format long e format short g format long g format hex format bank format rat pi 3.1416 3.14159265358979 3.1416e+000 3.14159265358979e+000 3.1416 3.14159265358979 400921fb54442d18 3.14 355/113 Descripcin 5 dgitos 16 dgitos 5 dgitos ms exponente. 16 dgitos ms exponente. El mejor de los formatos short. El mejor de los formatos long. Punto flotante, hexadecimal. 2 dgitos decimales. Nmero fraccionario.
ESPECIFICANDO EL ANCHO DEL CAMPO Y LA PRECISIN A LA SALIDA. Para especificar el ancho del campo o la precisin usando valores de una lista secuencial del argumento, utilice un astrisco (*) en lugar del ancho del campo o precisin en el operador de formato. El siguiente ejemplo ilustra su uso:
>>s=sprintf('%*f %.*f %*.*f',15,123.45678,3,16.42837,6,4,pi) La salida es:
s = 123.456780 16.428 3.1416
El ejemplo formatea y visualiza tres nmeros. El primer formato %*f, tiene un astrisco en la localizacin del ancho del campo,especificando simplemente el ancho del campo de 15 y
Universidad del Atlntico-Facultad de Ingeniera
13
Control de entrada/salida
se toma de la lista del argumento. El segundo formato, %.*f, se coloca un astrisco despus del punto decimal, esto significa la precisin 3 y toma su valor de la lista del argumento. El tercer formato %*.*f, especifica tanto el ancho del campo cmo la precisin (6 y 4) en la lista del argumento. Se pueden mezclar dos estilos. Por jemplo, sta funcin obtiene el ancho del campo (5) de la lista del argumento y la precisin (2) de la cadena de caracteres:
>> S=sprintf('%*.2f',5,123.45678)
La salida es:
S = 123.46
USANDO IDENTIFICADORES EN EL ANCHO DEL CAMPO Y PRECISIN. Se pueden derivar valores del ancho del campo y precisin de una lista de argumentos no secuenciales. En el interior del formato especifique el ancho del campo y/o la precisin con un astrisco seguido por un nmero identificador, seguido por un signo $. El siguiente ejemplo ilustra su uso:
>>S=sprintf sprintf('%1$*4$f %2$.*5$f %3$*6$.*7$f', 123.45678, 16.42837, pi, 15, 3, 6, 4) sprintf
La salida es:
S = 123.456780 16.428 3.1416
RESTRICCIONES PARA USAR IDENTIFICADORES. Si cualquiera de los formatos en una cadena incluye un identificador de campo, por consiguiente, todos los formatos en esa cadena deben ser del mismo tipo. No puede usar identificadores secuenciales y no secuenciales al mismo tiempo en la misma funcin: Sintxis vlida:
>> sprintf(%d %d %d, 1,2,3) %d, 1,2,3)
Sintxis invlida:
>> sprintf(%d %3$d
Si se suministra ms valores en el argumento que los que estn en los formatos de cadenas, reusa de los formatos, pero MATLAB permite esto solamente para comandos que se usan en orden secuencial.No puede reusar de formatos cuando llama una funcin con clasificacin numerada en los valores del argumento: Sintxis vlida:
>>sprintf(%d,1,2,3,4)
Sintxis invlida:
>>sprintf(%1$d,1,2,3,4)
No utilice identificadores cuando el valor del argumento est en forma de vector o arreglo: Por ejemplo si V=[1.4 2.7 3.1] Sintaxis vlida:
>> S=sprintf('%.4f %.4f %.4f',V)
Sintaxis invlida:
>> S=sprintf('%3$.4f %1$.4f %2$.4f',V)
Recomendaciones para escribir comentarios extensos en los programas: Si el comentario se necesita que se visualice al ejecutar el programa, use la siguiente forma genrica: Comentario = { Escriba aqu el texto } Universidad del Atlntico-Facultad de Ingeniera 14
Control de entrada/salida
Si el comentario no se necesita que se visualice despus de ejecutar el programa, use la siguiente forma genrica:
%{ Escriba aqu el texto %} CREACIN DE ESTRUCTURAS. Las estructuras son semejantes a los arreglos de celdas, porque ellas permiten agrupar colecciones de datos diferentes en una simple variable. Sin embargo, en vez de direccionar los elementos por nmeros, los elementos de la estructura son direccionados por nombres denominados campos. Igual que los arreglos de celdas, las estructuras pueden tener ualquier nmeros de dimensiones, pero un simple escalar o arreglo vectorial es el tipo ms comn. Los arreglos de celdas usa llaves {} para acceder a los datos, las estructuras usan una notacin punto(.) para acceder a los datos en el campo. Los siguientes ejemplos ilustran su uso. Escriba en la lnea de comando de MATLAB.
>> >> >> >> >> circulo.radio=3.5; circulo.centro=[0 1]; circulo.estilo_linea='--'; circulo.color='rojo'; circulo
Salida de la estructura:
circulo = radio: centro: estilo_linea: color: 3.5000 [0 1] '--' 'rojo'
Los datos son almacenados en una estructura variable llamada circulo. Los campos de caso sensitivo son denominados radio, centro, estilo_linea y color. Los nombres de campos de estructuras tienen las mismas restricciones cmo los nombres de variables: Pueden contener hasta 63 caracteres y pueden comenzar con una letra. Si hay ms de un circulo, puede almacenarse un segundo elemento en la variable circulo. Por ejemplo, en la siguiente sentencia:
>> circulo(2).radio=4.5; >> circulo(2).color=green; >> circulo(2).estilo_linea=:; >> circulo(2).centro=[2.5 -1.5]; >> circulo circulo = 1x2 struct array with fields: radio centro estilo_linea color
circulo es una arreglo de estructura que tiene dos elementos. El (2) aparece inmediatamente despus del nombre de la variable, porque es la variable que tiene un elemento agregado a l. El sufijo .nombre_campo identifica el campo donde los datos deben ser colocados. Observe que los campos de la estructura son llenados esta vez en orden diferente y el tamao de los datos difiere entre los dos elementos. Esto es, los campos de color son rojo y green.
15
Control de entrada/salida
RECUPERANDO EL CONTENIDO DE LA ESTRUCTURA. Cuando se conoce los nombres de los campos asociados con un arreglo de estructura, para recuperar el dato de un elemento del campo de una estructura particular, simplemente se requiere identificarlos. Por ejemplo, en la siguiente sentencia:
>> circulo(1).radio=3.5; >> Radio=circulo(1).radio Radio = 3.5000 >> Area=pi*Radio^2 Area = 38.4845
circulo(1).radio identifica el valor 3.5, que se usa para calcular el rea del primer circulo.
>> circulo.radio=[2:0.5:5] circulo = radio: [2 2.5000 3 3.5000 4 4.5000 5] >> Radio=circulo.radio(1) Radio = 2
circulo.radio identifica siete valores del radio del circulo y circulo.radio(1) identifica el primer valor (2) del vector fila. El siguiente ejemplo 6.8 ilustra su uso.
EJEMPLO 6.8 USO DE DATOS DE ESTRUCTURAS La frmula para el rea de un tringulo de lados a, b y c es:
Area = S (S a )(S b )(S c ) Donde S = (a + b + c ) / 2 Calcule el rea del tringulo para a=2, b=3 y c =4
El siguiente programa realiza los clculos:
% ************* Programa 6.8 ******************** %Este programa calcula el rea de un tringulo de %lados A, B y C %Este programa calcula el rea de un tringulo de %lados A, B y C clear all clc triangulo.lado=[2 3 4]; L1=triangulo.lado(1);L2=triangulo.lado(2);L3=triangulo.lado(3); s=(L1+L2+L3)/2; Eq=@(s)(s*(s-L1)*(s-L2)*(s-L3))^(1/2); Argum=(s*(s-L1)*(s-L2)*(s-L3)); if (Argum)<= 0 disp('El triangulo es imposible')
Universidad del Atlntico-Facultad de Ingeniera
16
Control de entrada/salida
17