Story Transcript
Control de entrada/salida
6 6
MÓDULO SOBRE PROGRAMACIÓN MATLAB CONTROL DE ENTRADA / SALIDA
OBJETIVOS Al terminar este módulo el estudiante estará en condiciones de: Planear y controlar en forma exacta cómo y donde visualizar los resultados ya sea en la pantalla o en el papel de la impresora. Utilizar los descriptores de edición 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 edición: Conversión de caracteres, número de cifras decimales, precisión y ancho de campo. Utilizar la función format para controlar el formato de salida de los valores numéricos en la linea de comando de Matlab.
INTRODUCCIÓN En el módulo 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 módulo enseña a utilizar las funciones más importantes para introducir y visualizar datos. Las instrucciones de entrada/salida que se analizan en el módulo 1 son las proposiciones input / disp con lista dirigida. Estas brindan un procedimiento rápido y sencillo para la entrada y salida de datos numéricos, pero tienen desventajas. La proposición input con lista dirigida suministra un medio conveniente para la entrada de datos numéricos desde el teclado; sin embargo, puede necesitarse un modo de entrada más estructurado cuando se lee de un archivo de datos. La proposición disp no le permite al programador escoger el formato de salida. El uso de la proposición disp para escribir encabezados a resultados numéricos 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 cómo y dónde visualizar los resultados ya sea en la pantalla o en el papel de la impresora. En este módulo, a estas proposiciones se les llama: proposiciones input / fprintf con formato dirigido.
Universidad del Atlántico-Facultad de Ingeniería
1
Control de entrada/salida
PROPOSICIÓN input CON FORMATO DIRIGIDO La proposición ejecutable input, se utiliza con una proposición fprintf y su fórmula general es: Nombre = input ( ′ Entrada = ′ ) Donde: Nombre representa el nombre de la variable. input representa el nombre de la proposición. ′ Entrada = ′ representa el nombre de la variable (o variables) a la cual se asigna el valor leido Un ejemplo de la proposición input con formato dirigido es: EJEMPLO 6.1 USO DE LA PROPOSICIÓN 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 fórmula del volumen de la rsfera Vol = (3/4)*pi*Radio.^3; % Salida del resultado fprintf( ′ \ n Radio = %2i Volumen = %3.3f \n ′,Radio,Vol)
La salida del programa es: Introduzca el radio de la esfera = 5 Radio = 5 Volumen = 523.599
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 según el descriptor de edición %2i de la proposición asociada fprintf. El valor que se asigna a Radio debe introducirse desde el teclado en forma entera real sin cifras decimales de precisión justificada a la derecha en la columna de un campo de dos, i indica un número entero. El descriptor de edición %3.3f para la salida del valor del volumen de la esfera,tiene un ancho de campo de 3 con tres cifras decimales despúes de la coma y f indica un número real,de forma decimal (sin exponente). La forma general de la proposición fprintf es: Apóstrofos
fprintf( ′ \n % wi % w.bf % w.bg % w.be … \n′′ ,N,M,T ) ,N, Función
Donde:
Salida de Descriptores de edición resultados saltando una línea
Salida de Variables de resultado salida,separadas en una misma por comas línea.
w establece el ancho del campo. b especifica el núnero de dígitos después del punto decimal. i indica un número entero real.
Universidad del Atlántico-Facultad de Ingeniería
2
Control de entrada/salida
f g e .
indica un número 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 edición 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 proposición input asociada. La forma general del descriptor de edición i es:
% wi Donde:
w
establece el ancho del campo(el número de columnas de las cuales se lee el valor). i indica una forma de tipo entero. Un ejemplo del uso del descriptor de edición i es: >> A=23; >> fprintf(′A=%2i \n′,A)
La salida es: A= 23
Un espacio en blanco delante del descriptor de edición se interpreta como una columna vacía 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 edición %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 después del signo igual. El signo menos hace parte del valor del dato. El signo algebraico ocupa una columna que está implícito 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 edición f se utiliza para especificar un número 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 proposición input asociada. Universidad del Atlántico-Facultad de Ingeniería 3
Control de entrada/salida
La forma general del descriptor de edición f es:
% w.bf Donde: w establece el ancho del campo. b especifica el número de dígitos que siguen al punto decimal(cifras decimales). f indica un número de tipo real de forma decimal(sin exponente). . indica el punto decimal.
Ejemplos del uso del descriptor de edición f es: Escriba desde la línea de comando de Matlab: >> B= 7.5; >> fprintf(′B=%2.1f \n′ ,B)
La salida es: B=7.5 >>fprintf(′ B=% 2.1f \n′ ,B)% observe el espacio después del caracter %
La salida es: B= 7.5,observe el espacio después del signo igual. Un descriptor de edición %2.1f que se emplea con una proposición 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 número 2 especifica el número 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 edición en la especificación fprintf (%2.1f) coloca el punto decimal de modo que el ultimo dígito 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 número de dígitos que pueden colocarse en un campo especifico. Los signos algebraicos positivos y negativos están implícito en el ancho del campo del descriptor de edición. Es buena práctica especificar para todos los descriptores de edición un ancho del campo mayor en dos lugares del mínimo requerido, que suministren espacios que separen valores sucesivos. Si el descriptor de edición f no proporciona los espacios para el número de cifras decimales y el número 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 más adelante. Los siguientes ejemplos ilustran el uso del descriptor de edición f: Escriba desde la línea 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 Atlántico-Facultad de Ingeniería
4
Control de entrada/salida
Caso 3 >> fprintf('%10.5f\n',pi) % la salida es: 3.14159 En el primer caso el número 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 número pi se visualiza ocupando cinco columnas justificadas a la derecha y tiene cuatro decimales, redondea la última cifra. En el tercer caso el número pi se visualiza ocupando 7 columnas justificadas a la derecha, dejando tres columnas vacias antes del número y tiene cinco decimales. El siguiente ejemplo utiliza números reales positivos, negativos y exponenciales: Escriba desde la línea 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
La salida del programa es: Cuando el radio=10 la circunfrencia es 62.832 y el area es 314.159 Cuando el radio=20 la circunfrencia es 125.664 y el area es 1256.637 Cuando el radio=32 la circunfrencia es 201.062 y el area es 3216.991 Cuando el radio=40 la circunfrencia es 251.327 y el area es 5026.548 Cuando el radio=75 la circunfrencia es 471.239 y el area es 17671.459
Universidad del Atlántico-Facultad de Ingeniería
5
Control de entrada/salida
EJEMPLO 6.3 EL CARÁCTER \n ENTRE DESCRIPTORES DE EDICIÓN Calcula el área del círculo y los datos aparecen en el siguiente renglón con sus respectivos encabezados. % ************* Programa 6.3 ******************** clear all,clc Diam=4.0; Area=pi*(Diam/2)^2; fprintf('Diámetro(cm) Area(cm^2) \n %i %10f \n',Diam,Area)
La salida del programa es: Diámetro(cm) 4
Area(cm^2) 12.5664
EJEMPLO 6.4 INTRODUCCIÓN DE DATOS DESDE UN VECTOR FILA La fórmula para el área de un triángulo 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 triángulo para a=2, b=3 y c =4 Introduzca los valores en forma vectorial: [2,3,4] El siguiente programa realiza los cálculos: % ************* Programa 6.4 ******************** %Este programa calcula el área de un triángulo 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)> X=1234.567;Y=-0.012345678;Z=0.1234567e-2; >> fprintf(ʹ%13.7g %13.7g %13.7g\nʹ,X,Y,Z)
La salida es: 1234.567 -0.01234568
0.001234567
La salida con el descriptor de edición g, presenta los resultados con mayor precisión, que cuando se usa el descriptor de edición 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 edición 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 número total de digítos son 7 que corresponde al especificado en el descriptor de edición g, sin incluir el punto decimal. EJEMPLO 6.5 USO DE input CON LA PROPOSICIÓN for …end Este programa explica detalladamente cada una de la especificaciones más comunes que se utilizan para la salida de los resultados numéricos de precisión sencilla.. El valor asignado para X es 0.1234567. % ************programa 6.5 **************** clear all,clc un numero real=′); X= input(′Introduzca input for i=1:4 disp('***************************************************') Universidad del Atlántico-Facultad de Ingeniería
7
Control de entrada/salida
fprintf(′El valor:%10.7g se imprime como:\n′,X) fprintf fprintf(′%17.7g cuando la especificación es %%17.7g\n′,X) fprintf fprintf(′%17.5g cuando la especificación es %%17.5g\n′,X) fprintf fprintf(′%17.3g cuando la especificación es %%17.3g\n′,X) fprintf fprintf(′%17.1g cuando la especificación 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 especificación es %17.7g 0.12346 cuando la especificación es %17.5g 0.123 cuando la especificación es %17.3g
0.1 cuando la especificación es %17.1g ************************************************** El valor:
12.34567 se imprime como: 12.34567 cuando la especificación es %17.7g 12.346 cuando la especificación es %17.5g 12.3 cuando la especificación es %17.3g 1e+001 cuando la especificación es %17.1g ************************************************** El valor: 1234.567 se imprime como: 1234.567 cuando la especificación es %17.7g 1234.6 cuando la especificación es %17.5g 1.23e+003 cuando la especificación es %17.3g 1e+003 cuando la especificación es %17.1g ************************************************** El valor: 123456.7 se imprime como: 123456.7 cuando la especificación es %17.7g 1.2346e+005 cuando la especificación es %17.5g 1.23e+005 cuando la especificación es %17.3g 1e+005 cuando la especificación es %17.1g
El siguiente programa es para la salida de resultados numéricos de doble precisión. El valor asignado para X es 123456789.0 clear all clc X= input(′Introduzca un numero real=′); input for i=1:4 disp(′**************************************************′) disp fprintf(′El valor:%10.9g se imprime como:\n′,X) fprintf fprintf(′%20.9g cuando la especificación es %%20.9g\n′,X) fprintf fprintf(′%20.7g cuando la especificación es %%20.7g\n′,X) fprintf fprintf(′%20.5g cuando la especificación es %%20.5g\n′,X) fprintf fprintf(′%20.3g cuando la especificación es %%20.3g\n′,X) fprintf X=100*X; end
Universidad del Atlántico-Facultad de Ingeniería
8
Control de entrada/salida
La salida del programa es: Introduzca un numero real=123456789.0 ************************************************** El valor: 123456789 se imprime como: 123456789 cuando la especificación es %20.9g 1.234568e+008 cuando la especificación es %20.7g 1.2346e+008 cuando la especificación es %20.5g 1.23e+008 cuando la especificación es %20.3g ************************************************** El valor:1.23456789e+010 se imprime como: 1.23456789e+010 cuando la especificación es %20.9g 1.234568e+010 cuando la especificación es %20.7g 1.2346e+010 cuando la especificación es %20.5g 1.23e+010 cuando la especificación es %20.3g ************************************************** El valor:1.23456789e+012 se imprime como: 1.23456789e+012 cuando la especificación es %20.9g 1.234568e+012 cuando la especificación es %20.7g 1.2346e+012 cuando la especificación es %20.5g 1.23e+012 cuando la especificación es %20.3g ************************************************** El valor:1.23456789e+014 se imprime como: 1.23456789e+014 cuando la especificación es %20.9g 1.234568e+014 cuando la especificación es %20.7g 1.2346e+014 cuando la especificación es %20.5g 1.23e+014 cuando la especificación es %20.3g
DESCRIPTOR DE EDICION e El descriptor de edición e se utiliza para especificar la salida de un número entero real de notación exponencial, que se proporciona de un archivo de datos o desde el teclado y la asigna al nombre de la variable entera de la proposición input asociada. Cuando se desconoce la magnitud del valor, puede ser ventajoso especificar la salida numérica con un descriptor de edición e. La forma general del descriptor de edición e es:
%w.be Donde: w b e .
establece el ancho del campo. especifica el número total de digítos después del punto decimal. indica el modo exponencial real. indica el punto decimal.
Los siguientes ejemplos ilustran el uso del descriptor de edición e: Escriba desde la línea de comando de Matlab: >> fprintf(′%.e\n′,pi) La salida es: 3e+000,observe que la salida registra un solo digito. Universidad del Atlántico-Facultad de Ingeniería
9
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 cómo pi se visualiza bajo una variedad de especificaciones de descriptores de edición utilizando sprintf: Especificación de edición 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
La forma general de la proposición sprintf es: Apóstrofos
sprintf( ′ \n % s % d % w.bg % w.bf %w.be \n′′ ,ʹN ,M,T ) , Nʹ, Función
Donde:
w b s d f g e ′N′′ .
Salida de Descriptores de edición resultados saltando una línea
Salida de Variables de resultado salida,separadas en una misma por comas línea.
establece el ancho del campo. especifica el núnero de dígitos después del punto decimal. indica una cadena de caracteres. indica cualquier número dígito. indica un número 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 edición s se utiliza para anotar resultados numéricos a la salida con información de carácter alfanuméricos 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 proposición input asociada. La edición s de cadenas de caracteres consiste en encerrar la lista de caracteres entre dos apóstrofos ( ′ ′ ). Universidad del Atlántico-Facultad de Ingeniería
10
Control de entrada/salida
La forma general del descriptor de edición s es:
%s Donde: s especifica la cadena de caracteres alfanuméricos.
Los siguientes ejemplos ilustran el uso del descriptor de edición s: Escriba en la línea 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 edición en la cadena de caracteres. Cada valor a la salida corresponde a un descriptor de edición en la cadena de función sprintf. EJEMPLO 6.6 USO DE inputname CON LAS PROPOSICIONES disp y sprintf Sea la función 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 proposición 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;
Escriba en la linea de comando de MATLAB >> a=10;b=5; >> myfun(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 línea o en la misma línea \n Retrono del carro \r Desplazamiento horizontal \t Barra inversa \ \\ El carácter % %% Cualquier digíto numérico \d El tabulador vertical \v Universidad del Atlántico-Facultad de Ingeniería
11
Control de entrada/salida
La alarma o carácter beep El carácter escape Cualquier carácter espacio en blanco, equivalente al conjunto [\t\f\n\r] El carácter con valor hexadecimal N Cualquier carácter simple ( incluyendo el espacio en blanco)
\a \e \s \xN o \x{N}
.
El siguiente ejemplo ilustra el descriptor de edición \s de cadena de caracteres y el descriptor de edición de cualquier número digíto \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 edición aparecen en la cadena) o por identificador (agregando un número a cada uno de los descriptores de edición que identifique el valor del argumento que reemplaza). Por defecto,MATLAB utiliza el orden secuencial. Para especificar argumentos con identificador numérico, se agrega un entero positivo seguido por un signo $ inmediatamente después del carácter % 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
Ordenado por identificador: >> s=sprintf('%3$s %2$s %1$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 dígitos que es igual a la suma de los cubos de sus dígitos: % ************* 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 Atlántico-Facultad de Ingeniería
12
Control de entrada/salida
La salida del programa es: N = H=1 T=5 U=3 N = H=3 T=7 U=0 N = H=3 T=7 U=1 N = H=4 T=0 U=7
LA PROPOSICIÓN format. Use la proposición format para controlar el formato de salida de los valores numéricos visualizados en la línea 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 numérico de su preferencia en la línea de comando de MATLAB. Use algunos de los siguientes formatos numéricos para visualizar valores numéricos a la salida : Formato numérico 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
Descripción 5 dígitos 16 dígitos 5 dígitos más exponente. 16 dígitos más exponente. El mejor de los formatos short. El mejor de los formatos long. Punto flotante, hexadecimal. 2 dígitos decimales. Número fraccionario.
ESPECIFICANDO EL ANCHO DEL CAMPO Y LA PRECISIÓN A LA SALIDA. Para especificar el ancho del campo o la precisión usando valores de una lista secuencial del argumento, utilice un astérisco (*) en lugar del ancho del campo o precisión 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 números. El primer formato %*f, tiene un astérisco en la localización del ancho del campo,especificando simplemente el ancho del campo de 15 y Universidad del Atlántico-Facultad de Ingeniería
13
Control de entrada/salida
se toma de la lista del argumento. El segundo formato, %.*f, se coloca un astérisco después del punto decimal, esto significa la precisión 3 y toma su valor de la lista del argumento. El tercer formato %*.*f, especifica tanto el ancho del campo cómo la precisión (6 y 4) en la lista del argumento. Se pueden mezclar dos estilos. Por jemplo, ésta función obtiene el ancho del campo (5) de la lista del argumento y la precisión (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 PRECISIÓN. Se pueden derivar valores del ancho del campo y precisión de una lista de argumentos no secuenciales. En el interior del formato especifique el ancho del campo y/o la precisión con un astérisco seguido por un número 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 función: Sintáxis válida: >> sprintf(‘%d %d
%d, 1,2,3)
Sintáxis inválida: >> sprintf(‘%d %3$d •
%d, 1,2,3)
Si se suministra más valores en el argumento que los que están 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 función con clasificación numerada en los valores del argumento: Sintáxis válida: >>sprintf(‘%d’,1,2,3,4)
Sintáxis inválida: >>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 válida: >> S=sprintf('%.4f %.4f %.4f',V)
Sintaxis inválida: >> 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 genérica: Comentario = {ʹ Escriba aquí el texto… ʹ } Universidad del Atlántico-Facultad de Ingeniería 14
Control de entrada/salida
•
Si el comentario no se necesita que se visualice después de ejecutar el programa, use la siguiente forma genérica:
%{ Escriba aquí el texto …%} CREACIÓN 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 números, los elementos de la estructura son direccionados por nombres denominados campos. Igual que los arreglos de celdas, las estructuras pueden tener ualquier números de dimensiones, pero un simple escalar o arreglo vectorial es el tipo más común. Los arreglos de celdas usa llaves {} para acceder a los datos, las estructuras usan una notación punto(.) para acceder a los datos en el campo. Los siguientes ejemplos ilustran su uso. Escriba en la línea 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 cómo los nombres de variables: Pueden contener hasta 63 caracteres y pueden comenzar con una letra. Si hay más 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 después 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 tamaño de los datos difiere entre los dos elementos. Esto es, los campos de color son ‘rojo’ y ‘green’.
Universidad del Atlántico-Facultad de Ingeniería
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 fórmula para el área de un triángulo 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 triángulo para a=2, b=3 y c =4 El siguiente programa realiza los cálculos: % ************* Programa 6.8 ******************** %Este programa calcula el área de un triángulo de %lados A, B y C %Este programa calcula el área de un triángulo 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)