El arte de programar vs 12.pdf

2019 EL ARTE DE PROGRAMAR Autor Ing. Máximo Obregón Ramos Profesor UNI [email protected] 951629294 Matlab MATLAB (MA

Views 97 Downloads 1 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

2019

EL ARTE DE PROGRAMAR

Autor Ing. Máximo Obregón Ramos Profesor UNI [email protected] 951629294

Matlab MATLAB (MATrix LABoratory, "Laboratorio de Matrices") es un software matemático que dispone de un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio llamado lenguaje M, existen versiones para: Windows, Mac OS X y Unix/GNU/Linux y tiene como base un gran número de funciones y operadores para el manejo completo de las matrices. MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, estas son: Simulink (plataforma de simulación multidominio), GUIDE (editor de interfaces de usuario – GUI, cajas de herramientas (toolboxes) y las de Simulink con los paquetes de bloques. Las aplicaciones de MATLAB se desarrollan en un lenguaje de programación propio, este lenguaje es interpretado y puede ejecutarse tanto en el entorno interactivo, como a través de un archivo de script (archivos *.m). Este lenguaje permite operaciones de vectores y matrices, funciones, cálculo y programación orientada a objetos. Debido a la gran cantidad de herramientas matemáticas, este software es muy usado en el campo del desarrollo de investigación en los diferentes campos de la ingeniería, así como el modelado matemático y simulación numérica de procesos que están incrustados en las diversas líneas del desarrollo tecnológico. Así mismo, Matlab cuenta con cientos de módulos que exploran las diferentes ramas de la ingeniería como: robótica, redes neuronales, lógica difusa, algoritmos genéticos, adquisición de datos, entre otros.

MANEJO BASICO DEL ENTORNO DE Matlab MATLAB está compuesto por un conjunto de funciones, agrupadas por: elfun, elmat, matfun, polyfun, etc. Matlab tiene cientos de grupos, y en cada grupo tiene varias decenas de funciones. Para ver todas las funciones básicas de Matlab, digite: help elfun. Ingrese las siguientes ordenes de cálculo en la ventana de comandos: 4+5 Manejo de matrices A^2 (2+3^2)^(1/7) A=[3 2 2;4 5 7;2 4 1] A.^2 cos(pi/3) B=[4 5 1;3 4 1;6 7 3] A^B exp(1) A.^B 12/3*4 C=A+B*A-B format long D=sin(A) help elmat format short E=sin(A)*cos(A) help matfun a=3 b=4 c=(a^2+b^2)^0.5 a+b c=c+1 a clear a a+b clear all b

operador traspuesta ' A A' Operador punto A=[1 2;3 4] B=[5 6;7 8] A*B (matricial) A.*B (elemento) . => * / ^

Autor: Ing. Máximo Obregón R. (+51) 951629294

zeros ones rand eye A=[3 2 2;4 5 7;2 4 1] sum det inv diag rank

/ [email protected]

1

Mas operaciones de matrices: Algunas combinaciones Generación de vectores sum(A') x=1:7 sum(sum(A)) x=(1:99)' diag(diag(A)) x=1:3:20 round(rand(8,4)*9) Manipuleo de los valores de matrices A=[1 2;3 4] A=[A;A] A=[A A]

Función round(x) fix(x) ceil(x) floor(x) rem(a,b) mod(a,b)

rand

rand(n) rand(n,m) randi(n) randi([a b])

A(4,1:end) A(4,:) A(:,end:-1:1) A(4,5)=9 A(:,4)=0 A(4,:)=1:6 A(:,3)=A(:,1) A(4,:)=A(4,:)-2*A(1,:)

FUNCIONES BÁSICAS Descripción Ejemplo Redondea al entero round(1.7)=>2 Redondea hacia 0 fix(1.9)=>1 fix(-1.9)=>-1 Redondea hacia + infinito ceil(1.9)=>2 ceil(-1.9)=>-1 Redondea hacia -infinito floor(1.9)=>1 fix(-1.9)=>-2 Residuo de la división entera de rem(7,3)=>1 a entre b. La diferencia entre mod(8,2)=>0 mod y rem solo sucede cuando rem(7.1,3)=>1.1 la división es negativa mod(7.1,3.1)=>0.9 mod=>a - b * floor(a / b) rem=> a - b * fix(a / b) Devuelve un escalar al azar en rand*5 =>Un valor al azar en el el intervalo , hasta con intervalo , hasta con 15 15 decimales. decimales. round(rand*3)+2=> Un valor entero al azar en el intervalo [2;5] Devuelve una matriz de nxn con valores al azar de Devuelve una matriz de nxm con valores al azar de Devuelve un valor al azar del intervalo [1;n] Devuelve un valor al azar del intervalo [a;b]

Ejercicios: Evaluar las siguientes expresiones y verifique los resultados: 3

1) √

𝑒5 𝜋4

2) 𝑎𝑟𝑐𝑠𝑒𝑛(𝐿𝑜𝑔𝑒 500) = 1.5708 - 2.5135i

=1.1507 3

3) √ 5)

3+ √7 𝑒 arccos⁡(𝜋)

= 3.0587

⟦𝐿𝑜𝑔3 500⟧+𝐿𝑛(105 ) cos⁡(𝐿𝑜𝑔2 100)

=17.6484

Autor: Ing. Máximo Obregón R. (+51) 951629294

4) √5 + tan⁡(7) ∗ 𝑒 6)

⟦𝐿𝑜𝑔3 500⟧+𝜋 arctan⁡(25)

1 𝜋

arctan⁡( )

= 3.2977

=5.3185

/ [email protected]

2

PROGRAMAS SECUENCIALES Códigos especiales para fprintf() %d es para enteros %f es para flotantes (número con decimales) %s es para texto \n Significa enter \t Significa tab Ejemplos resueltos E1: Lee 2 números y muestra la suma y la resta Solución clc a=input('Ingrese a:'); %Lee la variable a b=input('Ingrese b:'); %Lee la variable b m=a+b; n=a-b; fprintf('La suma es %d\n',m) fprintf('La resta es %d\n',n) E2: Leer los tres lados de un triángulo y mostrar los 3 ángulos en sexagesimal. Solución

clc a=input('Ingrese a:');%Lee variable a b=input('Ingrese b:');%Lee variable b c=input('Ingrese c:');%Lee variable c m=acosd(abs((a^2-b^2-c^2)/(2*b*c))); n=acosd(abs((c^2-a^2-b^2)/(2*a*b))); p=acosd(abs((b^2-a^2-c^2)/(2*a*c))); fprintf('El ángulo es%.2f\neL ángulo es %.2f\NLángulo es %.2f\n',m,n,p); E3: Leer el valor de un monto en soles y calcular cuantas monedas de 5 soles y cuantas de 1 sol forman dicho monto, considerando la mínima cantidad de 1 sol. Solución

clc m=input('Ingrese monto:'); res=mod(m,5); div=(m-res)/5; fprintf('Monedas de 5 soles: %d\n’); fprintf('Monedas de 1 sol: %d\n',div,res);

Autor: Ing. Máximo Obregón R. (+51) 951629294

E4: Leer un número de 6 cifras y mostrar la suma de sus dígitos. Solución clc N=input('Ingrese un numero de 6 cifras: '); f=mod(N,10);N=fix(N/10); e=mod(N,10);N=fix(N/10); d=mod(N,10);N=fix(N/10); c=mod(N,10);N=fix(N/10); b=mod(N,10);a=fix(N/10); s=a+b+c+d+e+f; fprintf('La suma de los dígitos del número‘); fprintf(' %d es: %d\n',N,s);

/ [email protected]

3

E5: Desarrolle un programa que a partir del ángulo y velocidad de partida del misil que lanza un cañón, indique la altura máxima, distancia máxima y tiempo total del recorrido.

Solución vi=input('Ingrese velocidad inicial(m/s):'); ai=input('Ingrese ángulo inicial(sex):'); g=9.81; hmax=vi^2*sind(ai); t=2*vi*(sind(ai))^2/(2*g); dmax=vi*cosd(ai)*t; fprintf('La altura máxima es %.4f\n',hmax); fprintf('La distancia máxima es %.4f\n',dmax); fprintf('El tiempo transcurrido es %.4f\n',t); PROBLEMAS RETO 1. Leer las coordenadas polares de un punto en el plano cartesiano, con el ángulo en sexagesimal y mostrar la coordenada cartesiana de dicho punto 𝑥 = 𝑟𝑐𝑜𝑠(𝜃) 2. Leer las coordenadas cartesianas de un punto y 𝑦 = 𝑟𝑠𝑒𝑛(𝜃) mostrar la coordenada polar de dicho punto, donde el ángulo sea expresada en sexagesimal, considerar los puntos solo en el primer cuadrante. 3. Leer un número de 3 cifras y mostrar la suma de sus dígitos. Asuma que el usuario siempre ingresará de 3 cifras. 4. Desarrolle un programa medidor de altura de edificios, que a partir del tiempo que se demora en caer un objeto hasta el suelo, calcule la altura de cualquier edificio.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

4

5. Leer las coordenadas cartesianas de un punto en el espacio tridimensional y determinar las coordenadas esféricas y cilíndricas del mismo punto. 6. Leer el valor de un monto en soles y calcular cuántos billetes de 50, billetes de 20, monedas de 5 soles y cuantas de 1 sol forman dicho monto, considerando la máxima cantidad de billetes o monedas de más valor. 7. Leer un número de 4 cifras e invertir el número. 8. Leer las coordenadas cartesianas de un punto en el espacio tridimensional y determinar las coordenadas esféricas y cilíndricas del mismo punto. 9. Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para formar un triángulo y calcular su perímetro y área. 10. Leer las coordenadas cartesianas de 3 puntos en el espacio tridimensional para formar un triángulo y calcular su perímetro y área. 11. Leer las coordenadas de los centros de 2 circunferencias y el radio de uno de ellos, luego calcular el radio del segundo, de tal manera que estas sean tangentes, así mismo calcule también el punto de tangencia.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

5

SENTENCIAS SELECTIVAS (If , switch) También llamado estructura condicional. ESTRUCTURA IF Ejemplo inicial: Hallar el mayor de 2 números Solución: clc;clear all; a=input('Ingrese a:'); b=input('Ingrese b:'); if a>b m=a; else m=b; end fprintf('El mayor es %d\n',m);

E1: Un número de 3 cifras es especial si el dígito de la decena es mayor que la suma de los dígitos de la unidad y centena, caso contrario no es especial. Leer un número de 3 dígitos e indicar si es especial o no. Solución: n=input('Ingrese un numero de 3 cifras: '); %n=abc c=mod(n,10);n=fix(n/10); b=mod(n,10);a=fix(n/10); if b>a+c fprintf('El número %d es especial\n',n); else fprintf('El número %d no es especial\n',n); end

E2: Genere aleatoriamente una nota final de un alumno FIM e indique si está aprobado o desaprobado en dicho curso. Solución: n=round(rand*20); fprintf('Nota generada es %d\n',n); if n>=10 fprintf('Aprobado\n',n); else fprintf('Desaprobado\n',n); end

Operadores y conectores lógicos Sentencia inválida (alt 124) 31;% variable booleana Solución Forma1 for i=2:n^0.5 clc;clear; if mod(n,i)==0 n=input('Ingrese un número: '); esprimo=0; c=0; break; for i=1:n end if mod(n,i)==0 end c=c+1; if esprimo end fprintf('Es primo\n'); end else if c==2 fprintf('No es primo\n'); fprintf('Es primo\n'); end else fprintf('No es primo\n'); end Nota: Si esprimo es booleano, entonces: true=1(verdadero) y Solución Forma2 n=input('Ingrese un número: '); false=0 (falso) c=0; La sentencia: Es equivalente for i=2:n^0.5 a: if mod(n,i)==0 esprimo==1 esprimo c=1; esprimo=1 esprimo=true end true+true 2 end if c==0 &&n >1 fprintf('Es primo\n'); else fprintf('No es primo\n'); end

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

16

Pequeños ejercicios E1: Mostrar los números enteros desde n E2: Leer n números y mostrar e indicar si cada hasta 1, con sus respectivos cubos, usar solo número es divisible por d, así mismo deberá while. mostrar la suma de los divisibles, usar solo while. Ejemplo: Ejemplo: Ingrese n: 5 Ingrese n:3 5==>125 Ingrese d:7 4==>64 Ingrese n1:5 3==>27 El número no es divisible por 7 2==>8 Ingrese n2:14 1==>1 El número es divisible por 7 Ingrese n3:21 El número es divisible por 7 La suma total de los divisibles es: 35 E3: Leer un número n y mostrar la división E4: Leer n notas y mostrar el número de notas entera y el residuo cuando se divide k por 3, aprobadas (>=10) y el número de notas donde k varia de 1 hasta n, usar solo while. desaprobadas, usar solo while. Ejemplo: Ejemplo: Ingrese n:7 Ingrese n:4 1/3=0 resto=1 Ingrese nota 1:15 2/3=0 resto=2 Ingrese nota 2:9 3/3=1 resto=0 Ingrese nota 3:17 4/3=1 resto=1 Ingrese nota 4:2 5/3=1 resto=2 Reporte final 6/3=2 resto=0 Desaprobados:2 7/3=2 resto=1 Aprobados:2 E5: Mostrar todos los primos que están en el intervalo [a,b] Ejemplo: Ingrese a:10 Ingrese b:20 Los primos son: 11 13 17 19 E7: Estime el número pi mediante la serie:

y con una cantidad de decimales exactos.

E6: Estime el número pi mediante una cantidad de términos de la serie:

E8: Estime el valor de √7mediante la secuencia: 𝑥 (𝑖) 7 𝑥 (𝑖+1) = + (𝑖) 2 2𝑥 Partiendo de 𝑥 (0) y con una cantidad n de decimales exactos.

E9: Estime el valor de √11mediante la secuencia: 𝑥 (𝑖) 11 𝑥 (𝑖+1) = + (𝑖) 2 2𝑥 Partiendo de 𝑥 (0) y con una cantidad n de decimales exactos.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

17

APLICACIÓN DE LAS ITERATIVAS SOBRE UN MENÚ INTERACTIVO E1: Implemente un menú para procesar operaciones aritméticas entre 2 números. Solución clear; while 1 clc; fprintf('************************\n'); fprintf('* CALCULADORA *\n'); fprintf('* 1) Leer numero 1 *\n'); fprintf('* 2) Leer numero 2 *\n'); fprintf('* 3) Calcular la suma *\n'); fprintf('* 4) Calcular la resta *\n'); fprintf('* 9) Salir *\n'); fprintf('************************\n'); op=input('Ingrese opción:'); if op==9 break end; switch op case 1 n1=input('Ingrese n1:'); pause; case 2 n2=input('Ingrese n2:'); pause; case 3 fprintf('La suma es %d\n',n1+n2); pause; case 4 fprintf('La resta es %d\n',n1-n2); pause; end end

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

18

APLICACIÓN DE LAS ITERATIVAS SOBRE LAS FUNCIONES MATEMÁTICAS (Método de los pasos) Este método plantea una division del intervalo [a,b] en subintervalos de tamaño h llamado paso, es decir se hace un analisis en cada uno de los intervalos: • El primer intervalo será: [a, a+h] • El segundo intervalo será: [a+h, a+2h] • El tercer intervalo será: [a+2h, a+3h] • Y asi sucesivamente Esta partición en subintervalos se puede realizar mediante una iterativa. Usemos la siguiente función matemática definida en un intervalo [a,b]

ezplot('sin(1/(x+2)+x^2)*x^0.1',[1,5]);grid; E1: Hallar todas las raíces aproximadas en el Solución a=1;b=5;h=1e-4; f=inline('sin(1/(x+2)+x^2)*x^0.1'); for x=a:h:(b-h) y1=f(x); y2=f(x+h); %if y1>=0 &&y2f(x1)=1.72 x2=1.72 =>f(x2)=1.44 … Observa que el número se va aproximando a √2 = 1.4142 … Desarrolle un programa que lea como dato de entrada x0 y n, y muestre la √2 después de n iteraciones y compare este resultado con el valor exacto. Problema 11: Usando el procedimiento anterior, considerando n iteraciones y partiendo de un x0 cualquiera: 2𝑥 1 Calcule √3, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = 3 + 𝑥 2 Calcule √4, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) = Calcule √5, sabiendo que la fórmula de recurrencia es 𝑓(𝑥) =

3𝑥 4 4𝑥 5

1

+ 𝑥3 1

+ 𝑥4

Calcule √𝑎 por deducción de las fórmulas anteriores.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

20

Problema 12: En todos los problemas anteriores que usan una serie o una fórmula de recurrencia, se ha usado como criterio de parada la cantidad de iteraciones. Intente ahora usar el error aparente como criterio de parada, la cual está definido por: 𝐄𝐫𝐫𝐨𝐫⁡𝐚𝐩𝐚𝐫𝐞𝐧𝐭𝐞 = ⁡ |𝐮𝐥𝐭𝐢𝐦𝐚⁡𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧 − ⁡𝐩𝐞𝐧ú𝐥𝐭𝐢𝐦𝐚⁡𝐚𝐩𝐫𝐨𝐱𝐢𝐦𝐚𝐜𝐢ó𝐧| Entonces las iteraciones se deben realizar hasta que este error sea menor que un error máximo, que previamente se ha tenido que leer como dato de entrada.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

21

FUNCIONES EN MATLAB Es una subrutina que permite organizar en módulos el Ejemplo de funciones propias de Matlab, desarrollo de aplicaciones, permitiendo ahorrar ya conocidas hasta el momento: muchas líneas de código, sobre todo, cuando se trate sin, cos, fix, floor,mod, etc… de aplicaciones más complejas. Ejemplo la creación de una función para calcular la hipotenusa de un triángulo rectangular.

Función

Entradas

E1: Desarrolle una función llamado mayorde3 que a partir de 3 números escalares ubicado cada uno en un parámetro de entrada, calcule el mayor de ellos, luego verifique que funcione. Ejemplo: mayor3(7,9,2)=>9

function h=calhipo(a,b) h=(a^2+b^2)^0.5; Salidas

¿Cuántas variables de entrada y salida tiene esta función?

Pequeños ejercicios E2: Desarrolle una función llamado prombet, que calcule el promedio entre el máximo y mínimo de 3 números. Ejemplo: prombet(2,4,9)=>5.5

E3: Desarrolle una función llamado sumabet, que calcule la suma de todos los enteros comprendido en el intervalo [a;b]. Usar iterativas. Ejemplo: sumabet(3,6)=>18

Trabajando con varias funciones y con varias variables de salida E1: Desarrolle una función que halle el mayor entre 2 números y otra que halle el menor de 2 números y una tercera función que ordene 3 valores en 3 variable de salida function m=mayor(a,b) function m=menor(a,b) if a>b if a>b m=a; m=b; else else m=b; m=a; end end function [a,b,c]=ordenar(m,n,p) a=menor(menor(m,n),p); c=mayor(mayor(m,n),p); b=m+n+p-a-c;

Autor: Ing. Máximo Obregón R. (+51) 951629294

Esta es la orden que debes ingresar en la línea de comando para llamar a la función ordenar: [a,b,c]=ordenar(6,7,4)

/ [email protected]

22

Pequeños ejercicios E1: Cree una función (no cree funciones E2: Cree una función llamado cuenta, que adicionales) que convierta una coordenada calcule el número de dígitos. (usar iterativas, polar en coordenada cartesiana en 2 variables no usar logaritmos) de salidas. Considere los ángulos en Ejemplo: cuenta(34561) =>5 sexagesimal y pruebe en la ventana de comandos. Cree una función que calcule el dígito de una x=rcos(teta) posición determinada. (usar la función anterior, y=rsin(teta) cuenta) Ejemplo: extrae(37456,2) =>7 E3: Cree otra función que calcule la suma y E4: Cree otra función que verifique si un producto de sus dígitos usando las funciones número es capicúa. anteriores.

FUNCIONES RECURSIVAS Una función recursiva es aquella función que se llama a si misma varias veces, por ello, Si la función tiene la forma: f(xi ) = g(f(xi−1 )) , entonces esta, puede ser implementada como una función recursiva. Pero es necesario que deban tener algún criterio de parada. Ejemplos de casos donde se podría implementar la función recursiva: 1. n!=n(n-1)! 0!=1 ∑ ∑(𝑛 ∑ 0=0 2. 𝑛=𝑛+ − 1) 3. Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2) Fibonacci(1)=0,Fibonacci(2)=1 4. Mayor(n, V)= Al mayor entre V[n] y Mayor(n-1,V) Mayor(1,V) = V[1] 5. Triángulo de pascal

Implemente las funcione pascal(f,t) donde f es la fila del triángulo y t es el término a extraer de esa fila. Por ejemplo pascal(5,3) debe devolver 6 6. La determinante de una matriz de n x n, considere el siguiente ejemplo para el caso de 3x3. 𝑎1,1 𝑎1,2 𝑎1,3 𝑎2,2 𝑎2,3 𝑎2,1 𝑎2,3 𝑎2,1 𝑎2,2 𝑎 | 2,1 𝑎2,2 𝑎2,3 | = 𝑎1,1 |𝑎 | -𝑎 | |+𝑎 | 1,2 1,3 𝑎3,1 𝑎3,3 𝑎3,1 𝑎3,2 | 3,2 𝑎3,3 𝑎3,1 𝑎3,2 𝑎3,3 7. La derivada enésima de función determinada. 𝑓(𝑥 + ℎ)(𝑛−1) − 𝑓(𝑥)(𝑛−1) 𝑓(𝑥)(𝑛) = 𝐿𝑖𝑚ℎ→0 ℎ (𝑛−1) (𝑛−1) 𝑓(𝑥 + ℎ) − 𝑓(𝑥) 𝑓(𝑥)(𝑛) ≈ ⁡⁡, 𝑐𝑜𝑛⁡ℎ⁡𝑚𝑢𝑦⁡𝑝𝑒𝑞𝑢𝑒ñ𝑜⁡ ℎ 8. El Juego de Buscaminas en un tablero de mxn.

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

23

E1: Desarrolle una función recursiva llamado Ejemplo propuesto funfactorial Implemente una función recursiva Solución para todos los casos anteriores. function f=funfactorial(n) if n==0 f=1; else f=n*funfactorial(n-1); end

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

24

ARREGLOS (Arrays) Los arreglos son tipos de datos que permiten almacenar varios valores en una sola variable, estas pueden ser multidimensionales. • Arreglos de una dimensión • Arreglos de 2 dimensiones • Arreglos de 3 dimensiones Ejemplo de dimensión: x(4)=7; x(1)=x(4)-3; 4 7 x 1

2

3

4

una Ejemplo de dos dimensiones: m(3,2)=5; m(2,3)=7; m(1,2)=m(3,2)+4;

5

m

1

1

2

4

9 7

2 3

3

5

ARREGLOS DE UNA DIMENSIÓN Ejemplos básicos E1: Cargando valores en un arreglo E4: Genera un arreglo con valores al azar, Solución: que simule el lanzamiento de 2 dados y clc;clear; mostrar el mayor valor y la posición n=5; respectiva de cada uno. for i=1:n Solución: x(i)=5; clc;clear; end %Genera valores al azar de 2 a 12 disp(x) n=10; for i=1:n E2: Genera un arreglo con valores al azar A(i)=round(rand()*10)+2; Solución: end clc;clear all; disp(A') n=input('Ingrese la cantidad de números:'); %Hallando el mayor for i=1:n M=A(1); A(i)=round(rand()*10)+2; for i=2:n end if MVector modificado:'); for i=1:n-1 for j=i+1:n if V(i)>V(j) tem=V(j); V(j)=V(i); V(i)=tem; end fprintf('\n %2d %2d =>',i,j); fprintf('%d ',V); end end fprintf('\n');

10 =>1 2 6 5 6 4 6 4 8 8 8 11 =>1 2 6 5 6 4 6 4 8 8 8 4 =>1 2 5 6 6 4 6 4 8 8 8 5 =>1 2 5 6 6 4 6 4 8 8 8 6 =>1 2 4 6 6 5 6 4 8 8 8 7 =>1 2 4 6 6 5 6 4 8 8 8 8 =>1 2 4 6 6 5 6 4 8 8 8 9 =>1 2 4 6 6 5 6 4 8 8 8 10 =>1 2 4 6 6 5 6 4 8 8 8 11 =>1 2 4 6 6 5 6 4 8 8 8 5 =>1 2 4 6 6 5 6 4 8 8 8 6 =>1 2 4 5 6 6 6 4 8 8 8 7 =>1 2 4 5 6 6 6 4 8 8 8 8 =>1 2 4 4 6 6 6 5 8 8 8 9 =>1 2 4 4 6 6 6 5 8 8 8 10 =>1 2 4 4 6 6 6 5 8 8 8 11 =>1 2 4 4 6 6 6 5 8 8 8 6 =>1 2 4 4 6 6 6 5 8 8 8 7 =>1 2 4 4 6 6 6 5 8 8 8 8 =>1 2 4 4 5 6 6 6 8 8 8

Autor: Ing. Máximo Obregón R. (+51) 951629294

5 9 =>1 2 4 4 5 6 6 6 8 8 8 5 10 =>1 2 4 4 5 6 6 6 8 8 8 5 11 =>1 2 4 4 5 6 6 6 8 8 8 6 7 =>1 2 4 4 5 6 6 6 8 8 8 6 8 =>1 2 4 4 5 6 6 6 8 8 8 6 9 =>1 2 4 4 5 6 6 6 8 8 8 6 10 =>1 2 4 4 5 6 6 6 8 8 8 6 11 =>1 2 4 4 5 6 6 6 8 8 8 7 8 =>1 2 4 4 5 6 6 6 8 8 8 7 9 =>1 2 4 4 5 6 6 6 8 8 8 7 10 =>1 2 4 4 5 6 6 6 8 8 8 7 11 =>1 2 4 4 5 6 6 6 8 8 8 8 9 =>1 2 4 4 5 6 6 6 8 8 8 8 10 =>1 2 4 4 5 6 6 6 8 8 8 8 11 =>1 2 4 4 5 6 6 6 8 8 8 9 10 =>1 2 4 4 5 6 6 6 8 8 8 9 11 =>1 2 4 4 5 6 6 6 8 8 8 10 11 =>1 2 4 4 5 6 6 6 8 8 8

/ [email protected]

28

ARREGLO CON FUNCIONES Pequeños ejercicios Desarrolle un programa que calcule la suma de 2 números de n cifras. En este caso cada número será generado aleatoriamente en un vector, donde cada elemento será cada digito. Sin funciones Con funciones clc;clear;nd=4; function N=Genera(nd) A(1)=0;A(2)=round(rand*8)+1; N(1)=0; for i=3:nd N(2)=round(rand*8)+1; A(i)=round(rand*9); for i=3:nd end N(i)=round(rand*9); disp(A) end B(1)=0;B(2)=round(rand*8)+1; function mostrar(N,nd) for i=3:nd for i=1:nd B(i)=round(rand*9); if i==1&& N(1)==0 end fprintf(' '); disp(B) else C(nd)=0; fprintf('%d',N(i)); for i=nd:-1:2 end C(i-1)=floor((A(i)+B(i)+C(i))/10); end C(i)=mod(A(i)+B(i)+C(i),10); fprintf('\n'); end function C=sumar(A,B,nd) disp(C) C(nd)=0; for i=nd:-1:2 C(i-1)=floor((A(i)+B(i)+C(i))/10); C(i)=mod(A(i)+B(i)+C(i),10); end %Programa principal nd=4; N1=Genera(nd);N2=Genera(nd); mostrar(N1,nd);mostrar(N2,nd); C=sumar(N1,N2,nd); mostrar(C,nd);

Pequeños ejercicios E1: Desarrolle un programa que genere valores E2: Generar dos vectores V1 y V2 con valores al azar de n valores y realice una estadística de aleatorios, donde el número de elementos del la cantidad de veces que se repite cada valor: primero es mayor que el segundo y verificar si Ejemplo: n=6 un vector está contenido en otro vector. 4 3 -2 4 -2 4 Reporte: Ejemplo 1: 4 =>3 veces V1=4 5 7 8 3 4 3 =>1 vez V2=7 8 3 -2 =>2 veces V2 está contenido en V1 Ejemplo 2: V1=4 5 7 8 3 4 V2=7 8 5 V2 no está contenido en V1 Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

29

ARREGLOS DE DOS DIMENSIÓNES Ejemplo de dos dimensiones: M(2,1)=4; M 1 2 3 M(2,3)=7; 1 M(3,2)=M(2,1)+5; 2 4 7 3 9

4

m=5;n=4;c=1; for i=1:m for j=1:n M(i,j)=c; c=c+1; end end

M

1

2

3

4

1 2 3 4 5

Ejemplos básicos E1: Leer una matriz de m x n de dos %Generando los reportes dimensiones de varias maneras. fprintf('Reporte:'); Solución: for i=1:n for j=1:n %Forma1: Leer cada elemento de la matriz if mod(M(i,j),2)==1 clc;clear; fprintf('%d ',M(i,j)); m=input('Ingrese numero de filas:'); end n=input('Ingrese numero de columnas:'); end for i=1:m end for j=1:n fprintf('\n'); fprintf('\tIngrese M(%d,%d):',i,j); M(i,j)=input(''); FORMA 2: end clc;clear; end %Generando una matriz al azar disp(M) n=3; k=0; %Forma 2: Leer la matriz directamente M=round(rand(n)*99) clc;clear; %Generando los reportes M=input('Ingrese matriz:'); fprintf('Reporte:'); disp(M) for i=1:n for j=1:n %Forma 3: Generar una matriz aleatoriamente if mod(M(i,j),2)==1 clc;clear; k=k+1; m=input('Ingrese número de filas:'); V(k)=M(i,j); n=input('Ingrese número de columnas:'); end M=round((rand(m,n)*5))+1; end disp(M) end disp(V) E2: Generar una matriz de nxn y mostrar todos los valores impares. Solución: FORMA 1: clc;clear; %Generando una matriz al azar n=3; M=round(rand(n)*99)

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

30

E3: Generar una matriz de nxn y mostrar la suma y la cantidad de los valores impares. Solución: clc;clear; %Generando una matriz al azar n=3; M=round(rand(n)*99) %Calculando las sumas si=0;c=0; for i=1:n for j=1:n if mod(M(i,j),2)==1 si=si+M(i,j); c=c+1; end end end fprintf('La suma de impares es %d\n',si); fprintf('La cantidad de impares es %d\n',c);

E5: Desarrolle un programa que genere una matriz de mxn al azar con valores enteros de 1 cifra y reporte los valores sin repetir Ejemplo: Matriz Generada 24552 35121 23533 Reporte: 2 4 5 3 1 Solución: clc; clear all; m=4; n=3; fprintf('Matriz generada:\n'); A = round(rand(n,m)*9); disp(A); k=0; for i = 1: m for j = 1: n %Busqueda hacia atraz E4: Generar una matriz de nxn y mostrar la esta=0; suma de los valores impares y la suma de for p=1:k valores primos. if V(p)==A(i,j) Solución: esta=1; %Función que verifica si un número es primo end function p=esprimo(n) end p=n>1;% variable booleana if esta==0 for i=2:n^0.5 k=k+1; if mod(n,i)==0 V(k)=A(i,j); p=0; end break; end end end end %Programa principal fprintf('Reporte:'); clc; clear; for i = 1:k n=3; %Generando una matriz al azar fprintf('%d ',V(i)); M=round(rand(n)*99) end %Calculando las sumas fprintf('\n'); si=0;sp=0; for i=1:n E6: Generar una matriz de nxn y agregar una for j=1:n fila donde se indique el mayor de cada columna, if mod(M(i,j),2)==1 sin usar la función max. si=si+M(i,j); Solución: end function mayor=mayorcol(M,j,n) if esprimo(M(i,j))==1 mayor=M(1,j); sp=sp+M(i,j); for i=2:n end if mayor0 for i=1:n dig=mod(n,10); for j=1:n n=floor(n/10); if M(i,j)>=1000 s=s+dig; sn=sn+M(i,j); end c=c+1; end %Programa principal end clc;clear;n=5; end M=round(rand(n)*999) fprintf('Numero de 4 cifras:\n'); for i=1:n fprintf('\tCantidad es %d\n',c); for j=1:n fprintf('\tSuma es %d\n',sn); P(i,j)=sumdig(M(i,j)); end end disp(P)

Autor: Ing. Máximo Obregón R. (+51) 951629294

/ [email protected]

32

E10: Generar una matriz al azar de nx7 y considere que la primera columna es el código del alumno y las demás columnas son sus notas de 4 practicas, ep, ef. Considerando que la nota final es de NF=(PP+EP+2EF)/4 redondeado 0 decimales, reporte los códigos de los alumnos que tienen la mínima nota con su respectiva nota de ep, ef y pp. Los códigos de los alumnos no deben repetirse. Solución: clear;clear; n=15;%asumo una cantidad de alumnos %Generando los codigos y notas M=zeros(n,7); for i=1:n M(i,1)=i; end for i=1:n for j=2:7 M(i,j)= round(rand()*20); end end %Calculando los promedios for i=1:n sp=0; for j=2:5 sp=sp+M(i,j); end PP(i)=sp*0.25; end %Calculando las Notas finales for i=1:n NF(i)=round((PP(i)+M(i,6)+2*M(i,7))/4); end %Hallando la nota minima m=NF(1); for i=2:n if NF(i)max max=M(i,j); end end end fprintf('Reporte\n') fprintf('El máximo es %d\n',max) fprintf('Las coordenadas son:\n') for i=1:n for j=1:n if M(i,j)==max fprintf('\t(%d;%d)\n',i,j) end end end

/ [email protected]

33

E12: A partir de una matriz generada de nxn, halle la suma de todos los elementos que están alrededor de cada elemento en otra matriz del mismo tamaño, sin usar sum. Solución: clc;clear; n=4; M=round(rand(n)*5) for i=1:n for j=1:n N(i,j)=0; for ii=i-1:i+1 for jj=j-1:j+1 if ii>0 &&jj>0 &&ii0 &&ii