Está en la página 1de 31

ARREGLOS (Arrays)

Los arreglos son tipos de datos que permiten almacenar varios valores en una sola
variable, estas pueden ser de varias dimensiones (multidimensionales).
• Arreglos de una dimensión
• Arreglos de 2 dimensiones
• Arreglos de 3 dimensiones
Ejemplo de una Ejemplo de dos dimensiones:
dimensión:
y=8; 8 y m(3,4)=1; m 1 2 3 4
x(5)=7; m(3,2)=5; 1 0 9 0 0
x(3)=9; m(2,3)=7; 2 0 0 7 0
x(9)+1; =>error m(1,2)=m(3,2)+4; 3 0 5 0 1
x(1)=x(5)-3;
4 0 9 0 7 x
1 2 3 4 5

ARREGLOS DE UNA DIMENSIÓN

Variables simples para 4 Un arreglo de una dimensión para 4 valores


valores
x1=3; 3 x1 x(1)=3;
x2=5; 5 x2 x(2)=5; 3 5 7 11 x
x3=7; 7 x3 x(3)=7; 1 2 3 4
x4=11; 11 x4 x(4)=11;
x1+x4=>14 x(1)+x(4)=>14
x2=input(‘Ingrese x2’); x(2)=input(‘Ingrese x2’);

Variables simples para Un arreglo de una dimensión para 100 valores,


100 valores, grabar el grabar el 5 a cada uno.
5 a cada uno
x1=5; x(1)=5;
x2=5; x(2)=5; for i=1:100
x3=5; x(3)=5; x(i)=5; %()
…. …. end
…. x(100)=5;
X100=5;
5 5 .. 5 x
1 2 … 100

Si () fuera Entonces los valores guardados serian


x(i)=i; 1, 2, 3, 4 …. 100
x(i)=i-1; 0 1 2 3.. 0, 1, 2, 3, … 99
x(i)=3*i+1; 4, 7, 10, 13.. 4, 7, 10, 13, …
x(i)= i^2+2*i; 3, 8,… 3, 8, 15, …
x(i)=round(rand()*5+1); Cargará 100 valores al azar entre [1;6]
x(i)=x(i)+2; Agrega 2 a cada uno de los elementos del arreglo.
Ojo: El arreglo tiene que estar previamente definido.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 55


Pequeñas rutinas a analizar Valores grabados en el arreglo
x(100)=1; x(1)=5; 5 8 11 14 .. 1 x
for i=2:100 1 2 3 4 .. 100
x(i)=x(i-1)+3;
end
for i=1:100 3 6 1 4 4 3 .. 5 1 6 2 x
x(i)= round(rand()*5+1); 1 2 3 4 5 6 .. 97 98 99 100
end
for i=3:100 1 4 4 3 .. .. .. 6 2 6 2 x
x(i-2)=x(i); 1 2 3 4 5 6 .. 97 98 99 100
end
n=100; 3 6 1 4 .. 3 4 5 x
for i=1:n 1 2 3 4 .. 98 99 100
x(i)= round(rand()*5+1); i=1
i=2
i=3
end
for i=1:n 0 1 .. 0 0 6
0 0 y
y(round(rand()*99+1))=x(i); 1 2 3 .. 97 98 99 100
end Observación:
• Algunas casillas de y podrían quedarse en 0
• Todos los valores de x son copiados en y, pero
algunos de estos podrían sobrescribirse.
n=100; 3 6 1 4 .. 3 4 5 x
for i=1:n 1 2 3 4 .. 98 99 100
x(i)= round(rand()*5+1); i=1 i=2
end i=3
for i=1:n 4 3 4 .. 4 1 6 3 y
y(i)=x(round(rand ()*99+1); 1 2 3 .. 97 98 99 100
end Observación:
• Todas las casillas de y son ocupadas por
algunas casillas de x.
• Algunas casillas de x podrían ser copiadas más
de una vez en las casillas de y
n=100; 3 6 1 4 .. 3 4 5 x
for i=1:n 1 2 3 4 .. 98 99 100
x(i)= round(rand()*5+1);
end
for i=1:n 5 4 3 .. 4 1 6 3 y
y(i)=x(n-i+1); 1 2 3 .. 97 98 99 100
end
n=100; 3 6 1 4 .. 3 4 5 x
for i=1:n 1 2 3 4 .. 98 99 100
x(i)= round(rand()*5+1);
end
for i=1:n/2
5 4 1 4 .. 3 6 3 x
tem= x(i); 1 2 3 .. 97 98 99 100
x(i)=x(n-i+1);
x(n-i+1)=tem;
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 56


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 M<A(i)
disp(A) M=A(i);
end
E3: Leer un arreglo desde consola(pantalla) end
Solución: fprintf('El mayor es %d\n',M);
clc;clear all; %Hallando las posiciones del mayor
n=input('Ingrese la cantidad de numeros:'); for i=1:n
for i=1:n if M==A(i)
fprintf('\tIngrese numero %d:',i); fprintf('\tPosicion %d\n',i);
A(i)=input(''); end
end end
disp(A)

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 57


E5: Leer el código y nota final de todos los fprintf('El menor es %d\n',m);
alumnos de un aula en 2 vectores. Y mostrar el %Hallando el promedio
código de la nota más alta. p=(M+m)/2;
Solución: fprintf('El promedio es %.2f\n',p);
clc;clear;
n=input('Ingrese número de alumnos:'); E7: Desarrolle un programa que simule las
for i=1:n notas de un aula de 80 alumnos y determine la
fprintf('Ingrese datos alumno %d\n',i); cantidad de alumnos de cada nota de 0 a 20,
C(i)=input(' Ingrese código:'); con la siguiente presentación.
N(i)=input(' Ingrese nota final:'); Nota 0: 2 alumnos
end Nota 1: 3 alumnos
disp([C' N']) ….
%Buscar la mayor nota Nota 20:1 alumno
m=N(1); Solución Forma 1:
for i=2:n clc;clear;
if m<N(i) %Genera valores al azar de 0 a 20
m=N(i); n=80;
end for i=1:n
end A(i)=round(rand()*20);
%Reportando los alumnos con mayor nota end
fprintf('Los alumnos con mayor nota son:\n') disp(A')
for i=1:n %Cantidad de alumnos por nota
if m==N(i) for j=0:20
fprintf('%d %d\n',C(i)); c=0;
end for i=1:n
end if A(i)==j
c=c+1;
E6: Desarrolle un programa que simule las end
notas de un aula de 80 alumnos y determine la end
mínima, máxima y el promedio de la nota más fprintf('Nota %2d: %d alumnos\n',j,c);
alta y la más baja. Usar arreglos con iterativas end
(sin usar la función max ni min). Solución Forma 2:
Solución: clc;clear;n=80;
clc;clear; n=80; %Genera valores al azar de 0 a 20
for i=1:n %Genera valores a la azar de 0 a 20 for i=1:21
A(i)=round(rand()*20); C(i)=0;
end end
disp(A'); for i=1:n
M=A(1); %Hallando el mayor A(i)=round(rand()*20);
for i=2:n C(A(i)+1)=C(A(i)+1)+1;
if M<A(i) end
M=A(i); disp(A')
end %Cantidad de alumnos por nota
end for i=1:21
fprintf('El mayor es %d\n',M); fprintf('Nota %2d: %d alumnos\n',i-1,C(i));
m=A(1); %Hallando el menor end
for i=2:n
if m>A(i)
m=A(i);
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 58


E8: Desarrolle un programa que lea n y genera E9: Leer n valores en un vector, cada vez que
al azar n valores en un arreglo y reporte las se lee un valor deberá insertar dentro del vector
posiciones de los valores pares. en la posición adecuada, de tal manera que
Ejemplo: n=6 siempre este ordenado de menor a mayor:
136724 Ejemplo:
Reporte de posiciones de los pares: Ingrese n: 5
356 Ingrese elemento 1: 4
Solución: El vector es: 4
clc;clear; Ingrese elemento 2: 1
n=input('n='); El vector es: 1 4
for i=1:n Ingrese elemento 3: 2
A(i)=round(rand()*8+1); El vector es: 1 2 4
end Ingrese elemento 4: -1
disp(A) El vector es: -1 1 2 4
fprintf('Reporte de posiciones de los pares:\n') Ingrese elemento 5: 2
p=0; El vector es: -1 1 2 2 4
for i=1:n Solución:
if mod(A(i),2)==0 clear;clc;
fprintf('%d ',i) n=input('Ingrese n:');
p=p+1; for i=1:n
end fprintf('Ingrese elemento:');
end v=input('');
fprintf('\n') if i==1
V(1)=v;
else
esta=false; %3 5 8 11
for j=1:i-1
if v<=V(j)
for k=i-1:-1:j
V(k+1)=V(k);
end
V(j)=v;
esta=true;
break;
end
end
if esta==false
V(i)=v;
End
end
fprintf('El vector es:');
disp(V);
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 59


ARREGLO CON FUNCIONES

E1: 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.
Solución:
Sin funciones Con funciones
clc;clear;nd=4; %Programa principal
A(1)=0;A(2)=round(rand*8)+1; nd=4;
for i=3:nd N1=Genera(nd); mostrar(N1,nd);
A(i)=round(rand*9); N2=Genera(nd); mostrar(N2,nd);
end C=sumar(N1,N2,nd); mostrar(C,nd);
disp(A)
B(1)=0;B(2)=round(rand*8)+1; function N=Genera(nd)
for i=3:nd N(1)=0;
B(i)=round(rand*9); N(2)=round(rand*8)+1;
end for i=3:nd
disp(B) N(i)=round(rand*9);
C(nd)=0; end
for i=nd:-1:2
C(i-1)=floor((A(i)+B(i)+C(i))/10); function mostrar(N,nd)
C(i)=mod(A(i)+B(i)+C(i),10); for i=1:nd
end if i==1&& N(1)==0
disp(C) fprintf(' ');
else
fprintf('%d',N(i));
end
end
fprintf('\n');
function C=sumar(A,B,nd)
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

E2: Desarrolle un programa que genere n E3: Simule el proceso de una rifa,
elementos en un arreglo p, m elementos en otro considerando que ingresa en la bolsa 100
arreglo q, los valores de los 2 arreglos serán números correspondientes a 100 personas, el
enteros entre 1 y 20, n debe ser par, luego programa deberá mostrar quien sale primero,
deberá insertar el arreglo q en medio del arreglo segundo, tercero,…..n-vo.
p generando un nuevo arreglo r, al final deberá Solución:
mostrar el arreglo r. clc;clear;
p= 5 7 8 9 q=1 4 2 r= 5 7 1 4 2 8 9 ne=20;
Solución:
rif=genera(ne);disp(rif);
clc;clear;
rif=desordenar(rif,ne);
n=4; m=5;
mostrar(rif);
p=generar(n);mostrar('p',p);
function rif=genera(ne)
q=generar(m); mostrar('q',q);
for i=1:ne
r=insertar(p,n,q,m);
rif(i)=i;
mostrar('r',r);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 60


end
function p=generar(n) function rif=desordenar(rif,ne)
for i=1:n for i=1:ne
p(i)=round(rand*19)+1; p=i;
end q=round(rand*(ne-1))+1;
tem=rif(p);
function r=insertar(p,n,q,m) rif(p)=rif(q);
rif(q)=tem;
for i=1:n/2
end
r(i)=p(i);
function mostrar(rif)
end
fprintf('El primero es %d\n',rif(1));
fprintf('El segundo es %d\n',rif(2));
for i=1:m
fprintf('El tercero es %d\n',rif(3));
r(n/2+i)= q(i);
end

for i=1:n/2
r(n/2+m+i)=p(n/2+i);
end

function mostrar(nom,v)
fprintf('El vector %s es ',nom);
disp(v);

E3: Genere al azar dos vectores que representa a function mostrar(codcon,cod,sue,n)


n trabajadores, la primera representa el código encontro=false;
único del trabajador que son valores de 5 dígitos
for i=1:n
y el segundo representa su sueldo respectivo la
cual pueden ser: 1000 o 1500 o 2500 o 3200 o if codcon==cod(i)
4000. El programa deberá permitir realizar una fprintf('Codigo encontrado\n');
consulta por el sueldo de un trabajador a partir de fprintf('Su sueldo es:
su código, además deberá mostrar un mensaje %d\n',sue(i));
apropiado si el código no existe. Use números encontro=true;
aleatorios para llenar los 2 vectores.
end
Solución:
end
clc;clear;n=15;
if ~encontro
[cod,sue]=genera(n);
fprintf('Codigo no hallado\n');
mostrartrab(cod,sue,n);
end
codcon=input('Ingrese codigo:');
mostrar(codcon,cod,sue,n);
function [cod,sue]=genera(n)
cod=generacod(n);
for i=1:n
sue(i)=generasue(round(rand*4+1));
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 61


function cod=generacod(n)
cod(1)=10000+round(rand*10);
for i=2:n
cod(i)=cod(i-1)+round(rand*100+10);
end
function sue=generasue(n)
switch n
case 1
sue=1000;
case 2
sue=1500;
case 3
sue=2500;
case 4
sue=3200;
case 5
sue=4000;
end

function mostrartrab(cod,sue,n)
fprintf(' No Codigo Sueldo\n');
for i=1:n
fprintf('\t%2d\t%d\t%d\n',i,cod(i),sue(i));
end

E4: Generar dos vectores V1 y V2 con valores E5: Desarrolle un programa que genere n
aleatorios, donde el número de elementos del valores al azar y realice una estadística de la
primero es mayor que el segundo y verificar si un cantidad de veces que se repite cada valor:
vector está contenido en otro vector. Ejemplo: n=6
4 3 4 -2 -2 4
Ejemplo 1: Reporte:
V1=4 5 7 8 3 4 4 =>3 veces
V2=7 8 3 3 =>1 vez
V2 está contenido en V1 -2 =>2 veces
Solución:
Ejemplo 2: clc;clear;nV=6;
V1=4 5 7 8 3 4 V=genera(nV);mostrar(V,nV);
V2=7 8 5
[U,C,nU]=calcula(V,nV);
V2 no está contenido en V1
mostrareporte(U,C,nU);
Solución:
clc;clear; function V=genera(n)
n1=10;n2=4; for i=1:n
V1=genera(n1);mostrar('V1',V1,n1); V(i)=round(rand()*9);
end
Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 62
V2=genera(n2);mostrar('V2',V2,n2); function mostrareporte(U,C,nU)
reportar(V1,n1,V2,n2); fprintf('Reporte:\n');
for i=1:nU
function V=genera(n) if C(i)>1
for i=1:n cad='veces';
V(i)=round(rand()*9); else
end cad='vez';
end
function reportar(V1,n1,V2,n2) fprintf('%d=>%d
if estacontenido(V1,n1, V2,n2) %s\n',U(i),C(i),cad);
fprintf('V2 esta contenido en V1\n'); end
else
fprintf('V2 no esta contenido en V1\n'); function mostrar(V,n)
end fprintf('V=')
for i=1:n
function c=estacontenido(V1,n1, V2,n2) fprintf('%d ',V(i));
c=false; end
for i=1:(n1-n2+1) fprintf('\n');
if V2(1)==V1(i) function [U,C,nU]=calcula(V,nV)
con=1; nU=0;
for j=2:n2 for i=1:nV
if V2(j)==V1(i+j-1) esta=false;
con=con+1; for j=1:nU
end if V(i)==U(j)
end esta=true;
if con==n2 C(j)=C(j)+1;
c=true; end
end end
end if ~esta
end nU=nU+1;
U(nU)=V(i);
function mostrar(nom,V,n)
C(nU)=1;
fprintf('%s=',nom)
end
for i=1:n
end
fprintf('%d ',V(i));
end
fprintf('\n');

E6: Genere una secuencia de n números al azar


y luego cifre con la técnica del +1-1, muestre la
secuencia cifrada, luego descifre y muestre la
secuencia descifrada.
Ejemplo:
Secuencia: 5 6 3 6 8 9

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 63


Secuencia cifrada:6 5 4 5 9 8
Secuencia descifrada: 5 6 3 6 8 9
Solución:
clc;clear;n=20;
S=genera(n);mostrar(S,n);
C=cifrar(S,n);mostrar(C,n);
D=descifrar(C,n);mostrar(D,n);

function mostrar(V,n)
fprintf('V=')
for i=1:n
fprintf('%d ',V(i));
end
fprintf('\n');
function V=genera(n)
for i=1:n
V(i)=round(rand()*9);
end

function C=descifrar(V,n)
for i=1:n
if mod(i,2)==1
C(i)=V(i)-1;
else
C(i)=V(i)+1;
end
end

function C=cifrar(V,n)
for i=1:n
if mod(i,2)==1
C(i)=V(i)+1;
else
C(i)=V(i)-1;
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 64


ORDENAMIENTO DE UN ARREGLO UNIDIMENSIONAL
Dado un vector de valores en desorden, se desea cambiar la posición de los valores de tal manera
que los valores estén ordenados de menor a mayor o al revés. Por ejemplo tenemos un arreglo de
8 elementos tal como se muestra a continuación:

4 3 4 6 4 1 6 3 V
1 2 3 4 5 6 7 8

Esta debería modificarse de tal manera que quede ordenado de la siguiente manera:

1 3 3 4 4 4 6 6 V
1 2 3 4 5 6 7 8

Existen varios algoritmos, estos están bien documentados y están disponibles en diferentes fuentes,
por ejemplo, en la siguiente URL, se presentan varias estrategias, inclusive con explicaciones
animadas:

http://lwh.free.fr/pages/algo/tri/tri_es.htm

Donde se exponen los siguientes métodos:

Algoritmos estables Algoritmos inestables


Ordenamiento por inserción Ordenamiento por selección
Ordenamiento de burbuja Ordenamiento peine
Ordenamiento de burbuja bidireccional Ordenamiento Shell
Ordenamiento Gnome Ordenamiento por montículos
Ordenamiento por mezcla Ordenamiento rápido

Algoritmo para ordenar de menor a mayor Para analizar el algoritmo, presentamos el


Se recomienda memorizar algún algoritmo de siguiente programa que permite analizarlo paso
ordenamiento, por ejemplo, este algoritmo es a paso para un mejor entendimiento de lo que
relativamente corto, aunque no es el más hace en cada paso dentro del doble for:
optimo, este algoritmo se llama ordenamiento clc; n=9;
por selección para un vector V de n fprintf('Vector generado:\n ');
elementos. V=randi(9,1,n);
fprintf('%d ',V);
for i=1:n-1 fprintf('\n i j =>Vector modificado:');
for j=i+1:n for i=1:n-1
if V(i)>V(j) for j=i+1:n
tem=V(j); if V(i)>V(j)
V(j)=V(i); tem=V(j);
V(i)=tem; V(j)=V(i);
end V(i)=tem;
end end
end fprintf('\n %2d %2d =>',i,j);
Donde el comparador puede ser: fprintf('%d ',V);
(>): De menor a mayor end
(<): De mayor a menor end
fprintf('\n');

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 65


Vector generado: 2 10 =>1 2 7 8 7 5 4 9 2 7 4 5 9 =>1 2 2 4 5 8 7 9 7 7 4
72785149274 2 11 =>1 2 7 8 7 5 4 9 2 7 4 5 10 =>1 2 2 4 5 8 7 9 7 7 4
i j =>Vector modificado: 3 4 =>1 2 7 8 7 5 4 9 2 7 4 5 11 =>1 2 2 4 4 8 7 9 7 7 5
1 2 =>2 7 7 8 5 1 4 9 2 7 4 3 5 =>1 2 7 8 7 5 4 9 2 7 4 6 7 =>1 2 2 4 4 7 8 9 7 7 5
1 3 =>2 7 7 8 5 1 4 9 2 7 4 3 6 =>1 2 5 8 7 7 4 9 2 7 4 6 8 =>1 2 2 4 4 7 8 9 7 7 5
1 4 =>2 7 7 8 5 1 4 9 2 7 4 3 7 =>1 2 4 8 7 7 5 9 2 7 4 6 9 =>1 2 2 4 4 7 8 9 7 7 5
1 5 =>2 7 7 8 5 1 4 9 2 7 4 3 8 =>1 2 4 8 7 7 5 9 2 7 4 6 10 =>1 2 2 4 4 7 8 9 7 7 5
1 6 =>1 7 7 8 5 2 4 9 2 7 4 3 9 =>1 2 2 8 7 7 5 9 4 7 4 6 11 =>1 2 2 4 4 5 8 9 7 7 7
1 7 =>1 7 7 8 5 2 4 9 2 7 4 3 10 =>1 2 2 8 7 7 5 9 4 7 4 7 8 =>1 2 2 4 4 5 8 9 7 7 7
1 8 =>1 7 7 8 5 2 4 9 2 7 4 3 11 =>1 2 2 8 7 7 5 9 4 7 4 7 9 =>1 2 2 4 4 5 7 9 8 7 7
1 9 =>1 7 7 8 5 2 4 9 2 7 4 4 5 =>1 2 2 7 8 7 5 9 4 7 4 7 10 =>1 2 2 4 4 5 7 9 8 7 7
1 10 =>1 7 7 8 5 2 4 9 2 7 4 4 6 =>1 2 2 7 8 7 5 9 4 7 4 7 11 =>1 2 2 4 4 5 7 9 8 7 7
1 11 =>1 7 7 8 5 2 4 9 2 7 4 4 7 =>1 2 2 5 8 7 7 9 4 7 4 8 9 =>1 2 2 4 4 5 7 8 9 7 7
2 3 =>1 7 7 8 5 2 4 9 2 7 4 4 8 =>1 2 2 5 8 7 7 9 4 7 4 8 10 =>1 2 2 4 4 5 7 7 9 8 7
2 4 =>1 7 7 8 5 2 4 9 2 7 4 4 9 =>1 2 2 4 8 7 7 9 5 7 4 8 11 =>1 2 2 4 4 5 7 7 9 8 7
2 5 =>1 5 7 8 7 2 4 9 2 7 4 4 10 =>1 2 2 4 8 7 7 9 5 7 4 9 10 =>1 2 2 4 4 5 7 7 8 9 7
2 6 =>1 2 7 8 7 5 4 9 2 7 4 4 11 =>1 2 2 4 8 7 7 9 5 7 4 9 11 =>1 2 2 4 4 5 7 7 7 9 8
2 7 =>1 2 7 8 7 5 4 9 2 7 4 5 6 =>1 2 2 4 7 8 7 9 5 7 4 10 11 =>1 2 2 4 4 5 7 7 7 8 9
2 8 =>1 2 7 8 7 5 4 9 2 7 4 5 7 =>1 2 2 4 7 8 7 9 5 7 4
2 9 =>1 2 7 8 7 5 4 9 2 7 4 5 8 =>1 2 2 4 7 8 7 9 5 7 4

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 66


Pequeños ejercicios
E1: Desarrolle un programa que genere n function W=ordenar(V,n)
valores al azar que representan las notas de for i=1:n-1
los alumnos de un aula y mostrar las 2 notas for j=i+1:n
mas altas y la cantidad de alumnos que han if V(i)>V(j)
obtenido cada uno de esas notas: tem=V(i);
(Use el proceso de ordenamiento en su V(i)=V(j);
solución) V(j)=tem;
Ejemplo: n=6 end
Notas: 15 16 15 13 16 15 end
La nota más alta es 16 de 2 alumnos end
La segunda nota más alta es 15 de 3 W=V;
alumnos function [n1,c1,n2,c2]=hallar(V,n)
Solución: n1=V(n);c1=1;n=n-1;
clc;clear; while V(n)==n1 &&n>=1
n=14; n=n-1;
V=generarnotas(n);mostrar(V); c1=c1+1;
V=ordenar(V,n);mostrar(V); end
[n1,c1,n2,c2]=hallar(V,n); if n>=1
reportar(n1,n2,c1,c2); n2=V(n);c2=1;n=n-1;
function V=generarnotas(n) while V(n)==n2&&n>=1
for i=1:n n=n-1;
V(i)=round(rand*20); c2=c2+1;
end end
function mostrar(V) else
fprintf('Notas:'); n2=-1;c2=-1;
disp(V); end
function reportar(n1,n2,c1,c2)
fprintf('La nota mas alta es %d de %d
alumnos\n',n1,c1);
if n2~=-1
fprintf('La segunda nota mas alta ');
fprintf('es %d de %d alumnos\n',n2,c2);
end
E2: Desarrolle un programa que genere n function [W,nW]=quitarrepetidos(V,nV)
valores al azar que representan las edades j=1;W(1)=V(1);
de personas, y deberá mostrar las edades for i=2:nV
sin repetir y ordenados de menor a mayor. if V(i)~=W(j)
(Use el proceso de ordenamiento en su j=j+1;
solución) W(j)=V(i);
Ejemplo: n=6 end
Edades: 75 12 16 75 12 end
Edades sin repetir: 12 16 75 nW=j;
Solución:
clc;clear; function W=ordenar(V,n)
n=30; for i=1:n-1

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 67


V=generaredades(n);mostrar('Edades:',V,n); for j=i+1:n
V=ordenar(V,n); if V(i)>V(j)
mostrar('Edades Ordenado:',V,n); tem=V(i);
[V,n]=quitarrepetidos(V,n); V(i)=V(j);
mostrar('Edades sin repetir:',V,n); V(j)=tem;
function V=generaredades(n) end
for i=1:n end
V(i)=round(rand*99+1); end
end W=V;

function mostrar(cad,V,n)
fprintf('%s',cad);
for i=1:n
fprintf('%4d',V(i));
end
fprintf('\n');

E3: Genere 2 vectores de n elementos al function V=generacod(n)


azar que representen los V(1)=round(rand*20+1);
códigos(números) de un alumno(no se
for i=2:n
debe repetir) y su nota final respectiva.
Muestre la tabla en forma horizontal 2 V(i)=V(i-1)+round(rand*5+1);
veces, ordenado por código y por nota. end
Ejemplo: n=5 for i=1:n
Tabla generada: p=round(rand*(n-1)+1);
Código: 4 15 7 14 6 tem=V(i);
Nota: 16 18 5 16 16
V(i)=V(p);
Tabla ordenada por código: V(p)=tem;
Código: 4 6 7 14 15 end
Nota: 16 16 5 16 18

Tabla ordenada por Nota: function [cods,nots]=ordenar(cod,not,n)


Código: 7 14 4 6 15 for i=1:(n-1)
Nota: 5 16 16 16 18 for j=i+1:n
if cod(i)>cod(j)
Solución
tem=cod(i);
clc;clear;n=6;
cod(i)=cod(j);
cod=generacod(n);
cod(j)=tem;
not=generanot(n);
tem=not(i);
mostrartabla('Tabla
not(i)=not(j);
generada:',cod,not,n);
not(j)=tem;
[cod,not]=ordenar(cod,not,n);
end
mostrartabla('Tabla ordenada por
end
codigo:',cod,not,n);
end
[not,cod]=ordenar(not,cod,n);
cods=cod;nots=not;

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 68


mostrartabla('Tabla ordenada por
nota:',cod,not,n);

function
mostrartabla(cad,cod,not,n)
fprintf('%s\n',cad);
mostrar('Codigo:',cod,n);
mostrar('Nota: ',not,n);

function mostrar(cad,V,n)
fprintf('%s',cad);
for i=1:n
fprintf('%4d',V(i));
end
fprintf('\n');

function V=generanot(n)
for i=1:n
V(i)=round(rand*20);
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 69


ARREGLOS DE DOS DIMENSIÓNES

Ejemplo de dos dimensiones:


M(3,4)=5; M 1 2 3 4 m=5;n=4;c=1; M 1 2 3 4
M(2,1)=4; 1 for i=1:m 1 1 2 3 4
M(2,3)=7; 2 4 7 for j=1:n 2 5 6 7 8
M(3,2)=M(2,1)+5; 3 9 5 M(i,j)=c; 3 9
c=c+1; 4
end
5
end

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

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 70


E3: Generar una matriz de nxn y mostrar la fprintf('Numero de 4 cifras:\n');
suma y la cantidad de los valores impares. fprintf('\tCantidad es %d\n',c);
Solución: fprintf('\tSuma es %d\n',sn);
clc;clear;
%Generando una matriz al azar
n=3; E5: Desarrolle un programa que genere una
M=round(rand(n)*99) matriz de mxn al azar con valores enteros de 1
%Calculando las sumas cifra y reporte los valores sin repetir
si=0;ci=0; Ejemplo:
for i=1:n Matriz Generada
for j=1:n 24552
if mod(M(i,j),2)==1 35121
si=si+M(i,j); 23533
ci=ci+1; Reporte: 2 4 5 3 1
end Solución:
end clc; clear all;
end m=3;
fprintf('La suma de impares es %d\n',si); n=5;
fprintf('La cantidad de impares es %d\n',ci); fprintf('Matriz generada:\n');
A = round(rand(m,n)*9);
E4: Desarrolle un programa que genere una disp(A);
matriz de nxn al azar con valores enteros de k=0;
hasta 4 cifras y calcule la cantidad de números for i = 1: m
cuya cantidad de dígitos sea 4 y muestre la for j = 1: n
suma de todos ellos. %Busqueda hacia atraz
Ejemplo: esta=0;
Matriz Generada for p=1:k
234 412 5000 if V(p)==A(i,j)
500 255 121 esta=1;break;
6000 2000 5 end
Reporte end
Cantidad de números con 4 dígitos: 3 if esta==0
La suma es:13000 k=k+1;
Solución: V(k)=A(i,j);
clc; clear; end
n=3; end
M=round(rand(n)*9999); end
fprintf('Matriz generada:\n');
disp(M) fprintf('Reporte:');
%Calculando las sumas for i = 1:k
sn=0;c=0; fprintf('%d ',V(i));
for i=1:n end
for j=1:n fprintf('\n');
if M(i,j)>=1000
sn=sn+M(i,j);
c=c+1;
end
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 71


E6: Desarrolle un programa que genere una fprintf('La suma de impares es %d\n',si);
matriz A de m filas y n columnas, con valores fprintf('La suma de primos es %d\n',sp);
aleatorios de 4 dígitos, luego genere otra matriz
B que sea la traspuesta de A y otra matriz C que
gire 90 grados en sentido horario respecto a la E8: Generar una matriz de nxn y mostrar la
matriz A. No usar operador traspuesta ni suma de los dígitos de cada valor en otro
funciones de rotación propias de Matlab. arreglo del mismo tamaño
Solución: Solución:
clc; clear; %Función de apoyo para sumar los dígitos de
m=5; n=4; un numero cualquiera.
A= round(rand(m,n)*9000)+1000; function s=sumdig(n) 753
for i=1:m s=0;
for j=1:n while n>0
B(j,i)=A(i,j);%La traspuesta dig=mod(n,10);
C(n-j+1,i)=A(i,j);%rot 90 n=floor(n/10);
end s=s+dig;
end end
fprintf('Matriz generada:\n');disp(A);
fprintf('Matriz B:\n');disp(B) %Programa principal
fprintf('Matriz C:\n');disp(C) clc;clear;n=5;
M=round(rand(n)*999)
for i=1:n
E7: Generar una matriz de nxn y mostrar la for j=1:n
suma de los valores impares y la suma de P(i,j)=sumdig(M(i,j));
valores primos. end
Solución: end
%Función que verifica si un número es primo disp(P)
function p=esprimo(n)
p=n>1;% variable booleana E9: Generar una matriz de nxn y agregar una
for i=2:n^0.5 fila donde se indique el mayor de cada columna,
if mod(n,i)==0 sin usar la función max.
p=0; Solución:
break; function mayor=mayorcol(M,j,n)
end mayor=M(1,j);
end for i=2:n
%Programa principal if mayor<M(i,j)
clc; clear; mayor=M(i,j);
n=3; %Generando una matriz al azar end
M=round(rand(n)*99) end
%Calculando las sumas %Programa principal
si=0;sp=0; clc;clear;
for i=1:n n=4;
for j=1:n
if mod(M(i,j),2)==1
M=round(rand(n)*90);disp(M);
si=si+M(i,j); for j=1:n
end M(n+1,j)=mayorcol(M,j,n);
if esprimo(M(i,j))==1 end
sp=sp+M(i,j); disp(M);
end
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 72


E10: Generar una matriz al azar de nx7 y considere E11: Desarrolle un programa que
que la primera columna es el código del alumno y las genere una matriz de nxn al azar con
demás columnas son sus notas de 4 practicas, ep, ef. valores enteros y reporte las
Considerando que la nota final es de coordenadas de las celdas que contienen
NF=(PP+EP+2EF)/4 redondeado 0 decimales, reporte al máximo, no usar función max.
los códigos de los alumnos que tienen la mínima nota Ejemplo:
con su respectiva nota de ep, ef y pp. Los códigos de Matriz Generada
los alumnos no deben repetirse. 245
Solución: 351
clear;clear; 235
n=15;%asumo una cantidad de alumnos Reporte
%Generando los codigos y notas El máximo es 5
M(n,7)=0; Las coordenadas son:
for i=1:n (1;3)
M(i,1)=i; (2;2)
end (3;3)
for i=1:n
for j=2:7 Solución:
M(i,j)= round(rand()*20); clc;clear;
end n=3;
end M=round(rand(n)*9);
%Calculando los promedios fprintf('Matriz generada:\n');
for i=1:n disp(M)
sp=0; max=M(1,1);
for j=2:5 for i=1:n
sp=sp+M(i,j); for j=1:n
end if M(i,j)>max
PP(i)=sp*0.25; max=M(i,j);
end end
%Calculando las Notas finales end
for i=1:n end
NF(i)=round((PP(i)+M(i,6)+2*M(i,7))/4); fprintf('Reporte\n')
end fprintf('El máximo es %d\n',max)
%Hallando la nota minima fprintf('Las coordenadas son:\n')
m=NF(1); for i=1:n
for i=2:n for j=1:n
if NF(i)<m if M(i,j)==max
m=NF(i); fprintf('\t(%d;%d)\n',i,j)
end end
end end
disp([M PP' NF']) end
%Reporte de la menor nota
fprintf('Alumnos con nota minima %d\n',m);
fprintf('\tCodigo Ep Ef PP\n');
for i=1:n
if NF(i)==m
fprintf('\t %d \t %2d %2d %.2f\n', …
M(i,1),M(i,6),M(i,7),PP(i));
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 73


E12: A partir de una matriz generada de nxn, halle E14: Generar una matriz de nxn e indicar
la suma de todos los elementos que están que columnas contienen el valor máximo, no
alrededor de cada elemento en otra matriz del usar función max.
mismo tamaño, sin usar sum. Solución:
Solución: %funcion para hallar el maximo
clc;clear; function m=valormax(M,n)
n=4; m=M(1,1);
M=round(rand(n)*5) for i=1:n
for i=1:n for j=1:n
for j=1:n if m<M(i,j)
N(i,j)=0; m=M(i,j);
for ii=i-1:i+1 end
for jj=j-1:j+1 end
if ii>0 &&jj>0 &&ii<=n&&... end
jj<=n && (ii~=i || jj~=j) %funcion que indica si la coluna contiene o
N(i,j)=N(i,j)+M(ii,jj); no al maximo
end function l=contiene(M,n,m,c)
end l=0;
end for i=1:n
end if M(i,c)==m
end l=1;
disp(N) break;
end
E13: Generar una matriz al azar de nxn y end
reportar las coordenadas de los elementos que %Programa
tienen a todos sus vecinos contiguos con valores clc;clear;
pares. n=5;
Solución: M=round(rand(n,n)*20);
clc;clear; m=valormax(M,n);
n=5; disp(M);
M=round(rand(n)*5); fprintf('El valor maximo es %d\n',m);
disp(M) fprintf('Columnas que los contienen:');
for i=1:n for c=1:n
for j=1:n if contiene(M,n,m,c)==1
par=true; fprintf('%d ',c)
for ii=i-1:i+1 end
for jj=j-1:j+1 end
if ii>0 &&jj>0 &&ii<=n&& ... fprintf('\n');
jj<=n &&(ii~=i || jj~=j)
if mod(M(ii,jj),2)==1
par=false;
end
end
end
end
if par==true
fprintf(' (%d,%d) \n',i,j);
end
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 74


E15: Generar una matriz que simule la %contando rayas en diagonal P
marcación del michi en una matriz de 7x7 s=0;
donde se llenen al azar la marcación de 2 for i=1:7
personas: Juan y José los cuales marcan con s=s+M(i,i);
valores de 0 o 1, respectivamente, se debe end
tener en cuenta que debe haber 24 ceros y if s==0
25 unos. c0=c0+1;
El programa debe contar el número de rayas elseif s==7
c1=c1+1;
obtenidos por cada jugador y debe indicar
end
quien gana y si tienen la misma cantidad se
%contando rayas en diagonal S
declara un empate. s=0;
for i=1:7
Solución Forma 1 de E15: s=s+M(i,8-i);
clc;clear; end
M(7,7)=0; if s==0
c=0; c0=c0+1;
while c<25 elseif s==7
i=round(rand*6)+1; c1=c1+1;
j=round(rand*6)+1; end
if M(i,j)==0 disp(M)
c=c+1; fprintf('La cantidad de rayas de ceros es %d \n',c0);
M(i,j)=1; fprintf('La cantidad de rayas de unos es %d \n',c1);
end if c0>c1
end fprintf('El ganador es Juan\n');
%contando rayas horizontales elseif c0<c1
c0=0;c1=0; fprintf('El ganador es José\n');
for i=1:7 else
fprintf('Es un empate\n');
s=0;
end
for j=1:7
Solución Forma 2 de E15: Usando funciones
s=s+M(i,j);
personalizadas
end
if s==0 clc;clear;
c0=c0+1; M=generaMichif1;
elseif s==7 %Todas las Rayas
c1=c1+1; sp=0;ss=0;c0=0;c1=0;
end for i=1:7
end sh=0;sv=0;
%contando rayas verticales for j=1:7
for j=1:7 sh=sh+M(i,j);
s=0; sv=sv+M(j,i);
for i=1:7 end
s=s+M(i,j); [c0,c1]=evalua(sh,c0,c1);
end [c0,c1]=evalua(sv,c0,c1);
if s==0 sp=sp+M(i,i);
c0=c0+1; ss=ss+M(i,8-i);
elseif s==7 end
[c0,c1]=evalua(sp,c0,c1);
c1=c1+1;
[c0,c1]=evalua(ss,c0,c1);
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 75


disp(M) function [s0,s1]=evalua(s,e0,e1)
fprintf('La cantidad de rayas de ceros es %d \n',c0); s0=e0;
fprintf('La cantidad de rayas de unos es %d \n',c1); s1=e1;
if c0>c1 if s==0
fprintf('El ganador es Juan\n'); s0=s0+1;
elseif c0<c1 elseif s==7
fprintf('El ganador es José\n'); s1=s1+1;
else end
fprintf('Es un empate\n');
end
E16: Genere una matriz de nxn y reporte las
coordenadas de los valores que se igualan a la
function M=generaMichif1
suma de sus coordenadas y si no se encuentra
M=zeros(7,7);
ningún valor con esa condición deberá reportar el
c=0;
mensaje “Ningún valor detectado”
while c<25
Ejemplo1: Ejemplo2:
i=round(rand*6)+1;
Matriz generada Matriz generada
j=round(rand*6)+1; 134 137
if M(i,j)==0 563 513
c=c+1; 351 351
M(i,j)=1; Valores detectados Ninguno valor detectado
end 3: (1,2)
end 4: (1,3)
5: (3,2)
%Otra forma de generar el michi
function M=generaMichif2 Solución:
c=0; clc;clear;
for i=1:7 n=3;
for j=1:7 M=round(rand(n)*9);
if c<25 fprintf('Matriz generada\n')
M(i,j)=1; disp(M)
else %Reportando valores que igualan
M(i,j)=0; %a la suma de sus coordenadas
end c=0;
c=c+1; for i=1:n
end for j=1:n
end if M(i,j)==i+j
for i=1:49 I(c+1)=i;
i1=round(rand*6)+1; J(c+1)=j;
j1=round(rand*6)+1; c=c+1;
i2=round(rand*6)+1; end
j2=round(rand*6)+1; end
tem=M(i1,j1); end
M(i1,j1)=M(i2,j2); if c==0
M(i2,j2)=tem; fprintf('Ningún valor detectado\n')
end else
fprintf('Valores detectados\n')
for i=1:c
fprintf('%d:(%d,%d)\n',I(i)+J(i),I(i),J(i))
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 76


E17: Genere una matriz con valores al azar fprintf('Matriz Generada\n');
de nxn y reporte todas las filas cuya suma de disp(M);
todos sus elementos sea igual al producto del if c==0
valor máximo con el valor mínimo. fprintf(' Ninguna cumple')
Ejemplo 1: elseif c==1
Matriz generada fprintf( ' La fila que cumple es : %d' ,u);
4563 else
3786 fprintf( ' Las filas que cumplen son : %d ' );
7256 for i=1:n
6993 if CUM(i)==1
Las filas que cumplen son: 1 3 4 fprintf('%d ',i);
Ejemplo 2: Ejemplo 3: end
Matriz generada Matriz generada end
4563 1563
end
1785 1785
fprintf('\n');
7256 7256
7998 7998
La fila que cumple es: 1 Ninguna fila cumple E18: Genere una matriz con valores al azar de 0
al 9 nxn y reporte todas las columnas que
Solución: contienen la secuencia 1 3 5 en ascendente o
descendente, n>=3.
clear; clc;
%n = input(' Ingrese el tamaño de la matriz : ' ); Ejemplo 1:
n=5; Matriz generada
M=round(rand(n)*9)+1; 5563
%Hallando el mayor, menor y suma 3716
%de cada fila en 3 arreglos 1236
for i = 1:n 6953
mayorfila=M(i,1); Columnas que cumplen: 1 y 3
menorfila=M(i,1); Solución
s=0; function esta=detecta(A,j,n)
for j = 1:n esta=0;
if mayorfila<M(i,j) for i=1:n-2
if (A(i,j)==1&&A(i+1,j)==3 && A(i+2,j)==5) ...
mayorfila=M(i,j);
|| ...
end
(A(i,j)==5&&A(i+1,j)==3 && A(i+2,j)==1)
if menorfila>M(i,j) esta=1;
menorfila=M(i,j);
end end
s=s+M(i,j); end
end
N(i)=mayorfila; %Programa principal
B(i)=menorfila; n=4;
V(1,i)=s; A=randi([0 9],n,n);
end disp(A);
c=0;u=0; fprintf('Columnas que cumplen:');
CUM(n)=0; for j=1:n
for i = 1:n if detecta(A,j,n)==1
if N(1,i)*B(1,i)==V(1,i) fprintf('%d ',j);
c=c+1; end
CUM(i)=1; end
u=i; fprintf('\n');
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 77


E19: Genere una matriz de mxn al azar con function esta=estavertical(A,i,j,V,m,p)
valores en [1;9], luego ordene cada if m-i+1<p
columna de menor a mayor. esta=0;
Ejemplo 1: else
Matriz generada Matriz ordenada esta=1;
55636 12131 for k=2:p
37167 35366 if V(k)~=A(i+k-1,j)
12361 57667 esta=0;
Solución: break;
function B=ordenar(A,c,n) end
for i=1:n-1 end
for j=i+1:n end
if A(i,c)>A(j,c)
tem=A(j,c); %Programa principal
A(j,c)=A(i,c); clc;clear;m=5;n=8;p=2;
A(i,c)=tem; A=randi([1 9],m,n);
end disp(A)
end V=randi([1 9],1,p);
end disp(V)
B=A; con=0;
%Programa principal for i=1:m
m=3;n=5; for j=1:n
A=randi([1 9],m,n); if A(i,j)==V(1)
fprintf('Matriz generada:\n'); if estahorizontal(A,i,j,V,n,p) ...
disp(A); ||...
fprintf('Matriz ordenada:\n'); estavertical(A,i,j,V,m,p)
for j=1:n con=con+1;
A=ordenar(A,j,m); fprintf('Pos %d: (%d;%d)\n',...
end con,i,j);
disp(A); end
end
E20: Genere una matriz de mxn y un vector end
de p elementos al azar con valores entre end
[1;9], si el vector se ubica dentro de la
matriz de izquierda a derecha o de arriba
hacia abajo, deberá indicar la coordenada
donde inicia.
Solución
function esta=estahorizontal(A,i,j,V,n,p)
if n-j+1<p
esta=0;
else
esta=1;
for k=2:p
if V(k)~=A(i,j+k-1)
esta=0;
break;
end
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 78


E21: Genere una matriz de nxn al azar con E22: Genere una matriz de mxn al azar con
valores entre [1;9] detectar en que columnas valores entre [1;9] detectar en cada fila, dígitos
se encuentran 2 dígitos repetidos repetidos consecutivamente, debe reportar la
consecutivamente, debe reportar que coordenada donde empieza, el valor que repite y
columnas las contiene. las veces que se repite.
Ejemplo: Ejemplo:
15612 1 5 6 1 2 6 5 2 2 Las repetidas son:
21357 2 1 1 1 5 7 7 2 2 (1;8) 2 2
14557 1 4 5 5 7 8 5 6 1 (2;2) 1 3
74367 7 4 4 4 7 8 5 5 1 (2;6) 7 2
11167 (2;8) 2 2
Las columnas son: 2 4 5 (3;3) 5 2
(4;2) 4 3
Solución (4;7) 5 2
function esta=existerepetidos(A,j,n)
esta=0; Solución
for i=1:n-1 function reportar(A,i,n)
if A(i,j)==A(i+1,j) j=1;
esta=1; while j<n
break; c=1;
end if A(i,j)==A(i,j+1)
end c=2;
%Programa principal while 1 && j+c<=n
clc;clear; if A(i,j)==A(i,j+c)
n=5; c=c+1;
A=randi(9,n,n);disp(A) else
fprintf('Las columnas son:'); break;
for j=1:n end
if existerepetidos(A,j,n) end
fprintf('%d ',j); fprintf('(%d;%d) %d %d\n', ...
end i,j,A(i,j),c);
end end
fprintf('\n'); j=j+c;
end
%Programa principal
clc;clear;m=4;n=9;
A=randi(9,m,n);disp(A)
fprintf('Las repetidas son: \n');
for i=1:m
reportar(A,i,n);
end
fprintf('\n');

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 79


E23: Genere una matriz de nxn al azar con E24: Genere una matriz de nxn al azar con
valores entre [1;9] y extraer las dos valores entre [1;9] y extraer las dos diagonales
diagonales en un vector y mostrarla en un vector y mostrar cada valor
ordenadamente ascendentemente. ordenadamente descendentemente e indicar si
Ejemplo: pertenece a la principal(1) o secundaria(2)
15612 Ejemplo:
21357 15612
14557 21357
74367 14557
11167 74367
Los elementos de la diagonal ordenados: 11167
1112455567 Los elementos de la diagonal ordenados:
7655542111
Solución 1122122211
function VS=ordenarasc(V,n)
for i=1:n-1 Solución
for j=i+1:n function V=extraer(A,n)
if V(i)>V(j) for i=1:n
tem=V(i); V(1,i)=A(i,i);
V(i)=V(j); V(2,i)=1;
V(j)=tem; end
end for i=1:n
end V(1,n+i)=A(i,n-i+1);
end V(2,n+i)=2;
VS=V; end

function V=extraer(A,n) function VS=ordenardesc(V,n)


for i=1:n for i=1:n-1
V(i)=A(i,i); for j=i+1:n
end if V(1,i)>V(1,j)
for i=1:n tem=V(1,i);
V(n+i)=A(i,n-i+1); V(1,i)=V(1,j);
end V(1,j)=tem;
tem=V(2,i);
%Programa principal V(2,i)=V(2,j);
clc;clear;n=3; V(2,j)=tem;
end
A=randi(9,n,n);disp(A)
end
fprintf('Los elementos de la'); end
fprintf(' diagonal ordenados: \n'); VS=V;
V=extraer(A,n);
V=ordenarasc(V,2*n); %Programa principal
disp(V); clc;clear;n=3;
A=randi(9,n,n);disp(A)
fprintf('Los elementos de la');
fprintf(' diagonal ordenados: \n');
V=extraer(A,n);
V=ordenardesc(V,2*n);
disp(V);

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 80


E25: Desarrolle un programa que permita entrenar a un niño la tabla de multiplicación. Para ello,
genere una matriz donde se guarde todas las combinaciones del producto de dos números de un
digito (del 0 al 9), en las 2 primeras columnas, luego use esta matriz para mostrar combinaciones
al azar para que el niño responda, se debe proponer n veces todas las combinaciones, cada vez
que el niño juega el sistema deberá contar el número de fallas de cada combinación en la tercera
columna. El programa deberá mostrar todas las combinaciones que el niño a fallado por lo menos
una vez, y deberá listarse de mayor a menor, para determinar que combinación debería practicar
más el niño.
function A=llenar() function E=ordenar(A)
p=0; for i=1:99
for i=0:9 for j=i+1:100
for j=0:9 if A(i,3)<A(j,3)
p=p+1; tem=A(i,3);
A(p,1)=i; A(i,3)=A(j,3);
A(p,2)=j; A(j,2)=tem;
A(p,3)=0; tem=A(i,2);
end A(i,2)=A(j,2);
end A(j,2)=tem;
function V=generaindices() tem=A(i,1);
for i=1:100 A(i,1)=A(j,1);
V(i)=i; A(j,1)=tem;
end end
for i=1:100 end
pos1=randi(100); end
pos2=randi(100); E=A;
tem=V(pos1);
V(pos1)=V(pos2); %Programa principal
V(pos2)=tem; clc;clear;n=3;
end A=llenar();
for k=1:n
function res=preguntar(A,V,i) V=generaindices();
fprintf('%dx%d=',A(V(i),1),A(V(i),2)); for i=1:100
%Lee la respuesta del niño res=preguntar(A,V,i);
%res=input(''); if fallo(A,V,i,res)
A(i,3)=A(i,3)+1;
%Generar respuestas al azar end
res=A(V(i),1)*A(V(i),2)+(randi(10)<3); end
fprintf('%d\n',res); end
A=ordenar(A);
function f=fallo(A,V,i,res) disp(A);
f=A(V(i),1)*A(V(i),2)~=res;

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 81


Pequeños ejercicios
E1: Se tiene las notas de m alumnos con E2: Genere dos matrices de m1xn1 y m2xn2 al azar
n prácticas, genere las notas de prácticas con valores entre [1;9], si la segunda matriz está
al azar, numere consecutivamente el contenida en la primera, deberá indicar la
código del alumno empezando en 1 y coordenada de la esquina superior izquierda donde
calcule la NF como el promedio simple de empieza la coincidencia en la primera matriz. Podría
las practicas redondeado. Luego muestre estar contenida varias veces.
la tabla ordenado por NF.
Alumno P1 P2 P3 P4 NF
1 1 1 2 2 2
2 5 6 7 3 6
3 7 8 9 0 8
4 1 1 2 3 2
5 5 6 7 6 5

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 82


PROGRAMACION ORIENTADA A OBJETOS
E1: Cree un objeto que permita definir la Ejemplo propuesto
clase CCirculo. …..

Solución
classdef CCirculo
properties
r
x
y
end

methods
function obj = CCirculo(r,x,y)
obj.r=r;
obj.x=x;
obj.y=y;
end
function A = area(obj)
A=pi*obj.r^2;
end
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 83


ANEXOS
OPERADORES DE FORMATO
Tipo de valor Conversión Detalles

Entero, con signo %d o %i Base 10


Entero, sin signo %u Base 10
%o Base 8 (octal)
%x Base 16 (hexadecimal), letras en minúscula a–f
%X Igual que %x, letras en mayúscula A–F
Número en punto flotante %f Notación en punto fijo (utilice un operador de
precisión para especificar el número de dígitos
después del punto decimal).
%e Notación exponencial, como 3.141593e+00 (utilice
un operador de precisión para especificar el número
de dígitos después del punto decimal).
%E Igual que %e, pero en mayúsculas,
como 3.141593E+00 (utilice un operador de precisión
para especificar el número de dígitos después del
punto decimal).
%g El más compacto entre %e y %f, sin ceros finales
(utilice un operador de precisión para especificar el
número de dígitos significativos.)
%G El más compacto entre %E y %f, sin ceros finales
(utilice un operador de precisión para especificar el
número de dígitos significativos.)
Caracteres o cadenas %c Carácter único
%s Vector de caracteres o array de cadenas. El tipo del
texto de salida es el mismo que el de formatSpec.

CARACTERES ESPECIALES
Carácter especial Representación
Comilla simple ''
Carácter de porcentaje %%
Barra invertida \\
Alarma \a
Retroceso \b
Salto de impresión \f
Nueva línea \n
Retorno de carro \r
Tabulación horizontal \t
Tabulación vertical \v

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 84


Carácter especial Representación
Carácter cuyo valor numérico Unicode® se \xN
puede representar mediante el número
hexadecimal N. Ejemplo: sprintf('\x5A') devuelve 'Z'
Carácter cuyo valor numérico Unicode se \N
puede representar mediante el número
octal N. Ejemplo: sprintf('\132') devuelve 'Z'

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 85

También podría gustarte

  • Declaracion Inkafarma
    Declaracion Inkafarma
    Documento1 página
    Declaracion Inkafarma
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Archivo Sedapal
    Archivo Sedapal
    Documento1 página
    Archivo Sedapal
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Solucionario EF BMA01 2023-1
    Solucionario EF BMA01 2023-1
    Documento5 páginas
    Solucionario EF BMA01 2023-1
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Formato Promedio Cepre
    Formato Promedio Cepre
    Documento1 página
    Formato Promedio Cepre
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Separata de Funciones
    Separata de Funciones
    Documento7 páginas
    Separata de Funciones
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Mashi Noborr5r
    Mashi Noborr5r
    Documento1 página
    Mashi Noborr5r
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Como Redactar Contrato
    Como Redactar Contrato
    Documento70 páginas
    Como Redactar Contrato
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Ru Al Miscelánea I
    Ru Al Miscelánea I
    Documento7 páginas
    Ru Al Miscelánea I
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Guía 01 Matrices Operaciones
    Guía 01 Matrices Operaciones
    Documento17 páginas
    Guía 01 Matrices Operaciones
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Guía 03 SEL Método de Gauss
    Guía 03 SEL Método de Gauss
    Documento10 páginas
    Guía 03 SEL Método de Gauss
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Avance Fisica
    Avance Fisica
    Documento14 páginas
    Avance Fisica
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Ilovepdf Merged 11
    Ilovepdf Merged 11
    Documento208 páginas
    Ilovepdf Merged 11
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • QUIMICA Constante de Equilibrio
    QUIMICA Constante de Equilibrio
    Documento8 páginas
    QUIMICA Constante de Equilibrio
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • PC03 MC505 Solucionario
    PC03 MC505 Solucionario
    Documento3 páginas
    PC03 MC505 Solucionario
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones
  • Fisica Energia
    Fisica Energia
    Documento15 páginas
    Fisica Energia
    RICHARD SABBATH SAENZ DE LA CRUZ
    Aún no hay calificaciones