Arreglos PDF
Arreglos PDF
Arreglos PDF
________________________________________________________________________________________
Autor
Luis Norberto Zapata Puerta
Docente Facultad de Ingenierías
Politécnico Colombiano Jaime Isaza Cadavid
Medellín – Colombia. 2009
4 ARREGLOS
Introducción
Generalmente algunos problemas son difíciles de resolver utilizando datos de tipo simple
y es por ello que se requiere la implementación de arreglos que permitan el
almacenamiento de un conjunto de datos.
Partamos del siguiente ejemplo: La empresa XX cuenta con un total de 760 empleados y
desea determinar el total de personas que devengan sueldos por debajo al promedio de
salarios de dicha empresa.
Si se decide resolver éste problema haciendo uso de datos de tipo simple, muy
seguramente nos daremos cuenta del gran consumo de tiempo y variables de memoria
que se requieren, lo que hace que el programa sea muy ineficiente, además, se presenta
un problema adicional y es que el usuario debe ingresar los datos dos veces, la primera
vez al momento de calcular el promedio y la segunda al momento de calcular los salarios
por debajo al promedio, esto puede ocasionar que los datos ingresados en la segunda
ronda sean diferentes y por ende los resultados arrojados no serán confiables, por lo tanto
la mejor solución para éste tipo de problemas es utilizar datos de tipo estructurados como
son los arreglos de memoria.
Justificación
Como ya se menciono, el hecho de tener que ingresar datos doblemente no solo causa
problemas de eficiencia sino también de fiabilidad, ya que se corre el riesgo de ingresar
datos diferentes en la segunda vuelta.
Cuando se utilizan variables de tipo simple, cada vez que se ingresa un nuevo dato hace
que el anterior se pierda, y en el caso de necesitar realizar nuevas operaciones o cálculos
no previstos se tendría entonces que volver a introducir dichos datos, lo cual no es una
buena práctica desde cualquier punto de vista.
Los arreglos son necesarios cuando se requiere manejar cierta cantidad de datos que
posteriormente se deben volver a utilizar, y cuando al realizar cálculos u operaciones
resulte más eficiente almacenarlos provisionalmente que volverlos a calcular.
Objetivo General
Competencias Específicas
Cognitivas (Saber):
Actitudinales (Ser):
Resultados de Aprendizaje
Estrategias Metodológicas
1. Trabajo Presencial
a. Clase magistral
- El profesor explica los conceptos fundamentales y orienta el desarrollo
de la temática.
- El docente estimula al estudiante en la elaboración de algoritmos y el
desarrollo de su capacidad de análisis e ingenio.
b. Actividades dinámicas en clase.
El profesor plantea y dirige las actividades a desarrollar.
- Lectura de documentos
- Consultas
- Taller
- Autoevaluación
- Desarrollo de pequeños retos (prácticas) con relación a cada temática.
(Actividades propuestas en cada unidad)
c. Clase práctica (Laboratorio).
- El desarrollo de algoritmos y el lenguaje de programación se manejan de
forma simultánea.
- Para afianzar el aprendizaje se plantea desarrollar como mínimo tres
prácticas las cuales son independientes de los problemas resueltos en
clase, donde se apliquen los conocimientos adquiridos.
2. Trabajo Asistido
a. Tutorías
Los estudiantes asisten a las tutorías que imparte el docente en el
horario acordado.
Contenidos
1. Arreglos (Arrays)
1. Arreglos (Arrays)
Un arreglo es un conjunto de datos del mismo tipo, agrupados bajo un nombre que los
identifica, y deben ser finitos, es decir, estan compuestos por un tamaño limitado de
elementos.
Ejemplo:
Dada una lista de edades de un grupo de estudiantes, así:
1 2 3 4 5 6 7
Edades 15 21 16 17 20 19 18
NombArreglo[#]
Indice
Edades[1]=15
Edades[4]=17
Inicio
Entero: vec[50],n,i=1
Imprima: “Ingrese el tamaño del vector <1-50>:”
Lea n
Mientras (i <= n) Haga
Imprima: “Ingrese un valor en la posición:”, i
Lea vec[i]
i=i+1
FinMQ
Fin
Inicio
Entero: vec[50],n,i
Imprima: “Ingrese el tamaño del vector <1-50>:”
Lea n
Para (i=1, n, 1) Haga
Imprima: “Ingrese un valor en la posición:”, i
Lea vec[i]
FinPara
Fin
Inicio
Entero: vec[50],n,i=0
Imprima: “Ingrese el tamaño del vector <1-50>:”
Lea n
Repita
i = i +1
Imprima: “Ingrese un valor en la posición:”, i
Lea vec[i]
Hasta_Que(i = n) Haga
Fin
1.- Diferencia:
- En el ciclo MIENTRAS la variable contador (i) debe inicializarse por fuera del ciclo.
- En el ciclo PARA, NO se requiere inicializar la variable contador (i) por fuera del ciclo,
ya que cuando llega al ciclo: Para (i=1, n, 1) , éste la inicializa automáticamente en
uno.
2.- Diferencia:
- Al interior del ciclo MIENTRAS la variable contador (i) se debe incrementar: i = i +1, el
no hacerlo conlleva a que el programa se quede en un ciclo infinito.
- En el ciclo PARA, NO requiere incrementar la variable (i) al interior del ciclo, éste
automáticamente la incrementa según se specifique en: Para (i=1, n, Incr) Haga.
- El término Incr significa que la variable (i) debe incrementarse en el valor que sea
especificado en éste lugar.
1ra. Diferencia:
2da. Diferencia:
- El MIENTRAS repite el ciclo siempre y cuando la condición sea verdadera, es decir, que
Cuando la condición se haga falsa se sale de dicho ciclo.
Resultados en memoria
n i vec[ i ] Iteración Posiciones
5 1 2 3 4 5
1 vec[1]=4 1 vec 4 7 11 9 3
2 vec[2]=7 2
3 vec[3]=11 3
4 vec[4]=9 4
5 vec[5]=3 5
6 Fin ciclo
Resultados en memoria
n i Imprime Iteración Posiciones
5 1 2 3 4 5
1 4 1 vec 4 7 11 9 3
2 7 2
3 11 3
4 9 4
5 3 5
6 Fin ciclo
Resultados en memoria
n i Imprime Iteración Posiciones
5 1 2 3 4 5
5 3 1 vec 4 7 11 9 3
4 9 2
3 11 3
2 7 4
1 4 5
0 Fin ciclo
Las operaciones básicas que se pueden realizar con los elementos de un vector son:
a. Métodos de búsqueda
b. Métodos de ordenación
c. Actualización (inserción, elimininación y modificación)
a. Búsqueda
Consiste en recorrer todo el vector elemento por elemento, accediendo a todas las
posiciones del vector. Si el valor a buscar es localizado, se informa la posición del vector
donde fue encontrado dicho valor, de lo contrario, se presenta un mensaje diciendo que el
valor buscado no se encontró.
Ventajas:
Desventajas:
Con éste método de búsqueda sucede lo mismo que sucede con los bancos o sitios de
atención al público y es que puede ocurrir que cuando llegas al sitio te dicen que ya no
hay servicio, con relación a la búsqueda secuencial puede ocurrir algo similar, es decir,
perder tiempo recorriendo el arreglo y no localizar el dato.
Ejemplo:
Documentación:
Subprograma: Busq_Secuencial( ):
Este método consiste en hacer particiones sucesivas de dos en dos sobre cada arreglo
resultante y requiere que dicho arreglo se encuentre ordenado ya sea ascendente o
descendentemente. El procedimiento consiste en dividir el vector en dos mitades y
comparar el valor buscado con el elemento de la mitad del arreglo, si no coinciden, se
determina en cuál de las dos mitades puede estar, eliminando con ello una de las dos
mitades; se divide en dos la mitad en donde posiblemente está y se compara el valor
buscado con la mitad de ese segmento, si no coincide, se procede de igual forma hasta
que se encuentre o se determine que no está en el vector. De existir el valor en el vector
siempre será localizado en la posición del medio.
Ejemplo:
Documentación:
Otras variables:
Li : Limite Inferio (posición del primer elemento del segmento del vector en donde se
Busca).
Ls : Limite Superior (posición del último elemento del segmento del vector en donde
se busca).
Med : Posición de la mitad del vector.
Subprograma: Busq_Binaria( ):
b. Ordenación
Si el vector queda ordenado ascendentemente, sus elementos quedan de forma tal que:
Si el vector queda ordenado descendentemente, sus elementos quedan de forma tal que:
Existen diferentes métodos de ordenamiento, dentro de los cuales, los más conocidos
son:
1
1 2
2 3
3 4
4 5
5
14
14 5
5 8
8 3
3 1
1 Vector original
Aux = vec[1]
vec[1] = vec[2]
vec[2] = Aux
El vector queda:
1 2 3 4 5
5 14 8 3 1
Aux = vec[2]
vec[2] = vec[3]
vec[3] = Aux
El vector queda:
1 2 3 4 5
5 8 14 3 1
Aux = vec[3]
vec[3] = vec[4]
vec[4] = Aux
El vector queda:
1 2 3 4 5
5 8 3 14 1
Aux = vec[4]
vec[4] = vec[5]
vec[5] = Aux
El vector queda:
1 2 3 4 5
5 8 3 1 14
Al finalizar esta primera pasada, el mayor de los elementos quedó en la última posición.
Luego se hace la segunda pasada, pero esta vez se compara el primero con el segundo,
el segundo con el tercero y el tercero con el cuarto. El quinto no se compara con ninguno
porque ya está en su posición. Al finalizar esta segunda pasada, el segundo mayor
elemento queda en la penúltima posición.
Se continúa así, hasta completar N-1 pasadas, al final de la cual, el vector queda
ordenado. Miremos la segunda pasada:
1 2 3 4 5
5 8 3 1 14
1 2 3 4 5
5 8 3 1 14 El método permite que la burbuja
1 2 3 4 5 (valor) más pesado emerja a la
5 3 8 1 14 superficie o viceversa.
1 2 3 4 5
5 3 1 8 14
1 2 3 4 5
5 3 1 8 14
1 2 3 4 5
3 5 1 8 14
1 2 3 4 5
3 1 5 8 14
Para hacer el intercambio de posición entre un valor y otro, es necesario utilizar una
variable auxiliar que guarde uno de los valores a intercambiar para evitar que alguno de
ellos se pierda.
Ejemplo:
Hacer un subprograma que ordene ascendentemente por medio del método burbuja, un
vector de N elementos.
Documentación:
Otras variables:
i, j : Índices para el vector
aux : Variable auxiliar para guardar uno de los elementos a
intercambiar.
Subprograma: Burbuja( ):
Este método se basa en el de la burbuja pero es eficiente si los elementos están casi
ordenados, por ejemplo, cuando el vector está ordenado inicialmente y se le ingresan al
final nuevos elementos sin tener en cuenta el ordenamiento. La variación con respecto al
Ejemplo:
Documentación:
Otras variables:
j, k : Índices para el vector
aux : Variable auxiliar para guardar uno de los elementos a
intercambiar.
sw : Variable tipo suiche o bandera que cambiará de valor si
hay intercambio.
Subprograma: BurbujaMejor( ):
El método de inserción es similar al método utilizado por los jugadores de cartas para
ordenar la baraja. El procedimiento se realiza recorriendo la baraja con la carta nueva a
insertar, ésta se va comparando con cada una a medida que se va desplazando, cuando
se localiza el espacio adecuado, todas las cartas son desplazan un lugar hacia delante
para alojarla.
Ejemplo:
Documentación:
Otras variables:
i, k : Índices para el vector
aux : Variable auxiliar para guardar uno de los elementos a
intercambiar.
sw : Variable tipo suiche o bandera que cambiará de valor si
hay intercambio.
Subprograma: Insercion( ):
vec[i+1]=aux
FinPara
Fin
Resultados en Memoria
n i k aux sw i >= 1 AND sw = 0 aux < vec[i] Posiciones
5 1 2 14 0 Verdadero Falso 1 2 3 4 5
1 Falso vec 5 14 2 8 1
2 3 2 0 Verdadero Verdadero vec 5 14 2 8 1
1 Verdadero Verdadero vec 5 14 8 1
0 Falso vec 2 5 14 8 1
3 4 8 0 Verdadero Verdadero vec 2 5 14 8 1
2 Verdadero Falso vec 2 5 8 14 1
1 Falso vec 2 5 8 14 1
4 5 1 0 Verdadero Verdadero vec 2 5 8 14
3 Verdadero Verdadero vec 2 5 8 14
2 Verdadero Verdadero vec 1 2 5 8 14
1 Verdadero Verdadero
0 Falso
El método de ordenación por selección consiste en encontrar el valor más pequeño del
vector e intercambiarlo con el que se encuentra en la primera posición, luego se localiza el
siguiente menor y se intercambia con el de la segunda posición, y así sucesivamente
hasta completar el proceso con todo el vector.
Ejemplo:
Documentación:
Otras variables:
i, j : Índices para el vector
aux : Variable auxiliar para guardar uno de los elementos a
intercambiar.
Subprograma: Seleccion( ):
Resultados en Memoria
n I j aux vec[ i ] > vec[ j ] Posiciones
5 1 2 Verdadero 1 2 3 4 5
3 Verdadero vec 14 8 2 5 1
4 Falso
5 Verdadero vec 8 14 2 5 1
6
2 3 Falso vec 2 14 8 5 1
4 Verdadero
5 Verdadero vec 2 14 8 5 1
6
3 4 Verdadero vec 2 14 8 5 1
5 Verdadero
6 vec 1 14 8 5 2
4 5 Verdadero
6 vec 1 8 14 5 2
vec 1 8 14 5 2
vec 1 5 14 8 2
vec 1 2 14 8 5
vec 1 2 8 14 5
vec 1 2 5 14 8
vec 1 2 5 8 14
Como su nombre lo indica, en vez de “subir o burbujear” hacia el final los elementos más
grandes (ordenación ascendente) o los más pequeños (ordenación descendente), en este
método, van a “bajar” hacia el principio del vector los más pequeños (ordenación
ascendente) o los más grandes (ordenación descendente). Es un método similar al de la
burbuja, solo que en este nuevo método, se compara el primer elemento con todos los
demás a su derecha en la primera pasada, al cabo de la cual, el menor elemento quedará
en la primera posición. Luego se compara el segundo elemento con los demás a su
derecha en la segunda pasada, al cabo de la cual, el segundo menor elemento, quedará
en la segunda posición y así sucesivamente.
Ejemplo:
Documentación:
Otras variables:
j, k : Índices para el vector
aux : Variable auxiliar para guardar uno de los elementos a
intercambiar.
Subprograma: Piedrita( ):
c. inserción
La inserción se puede hacer tanto si el arreglo está ordenado como si está desordenado,
si está desordenado, el proceso es sencillo, pero si está ordenado, el proceso es un poco
más complejo.
Ejemplo:
Documentación:
Subprograma: InsDesorden( ):
Ejemplo:
Documentación:
Variables locales:
Subprograma: InsOrdenado( ):
b. Borrado
Consiste en eliminar un elemento del vector y se puede hacer tanto si éste está ordenado
como si está desordenado mediante el mismo procedimiento. Para hacerlo hay que hacer
lo siguiente:
Ejemplo:
Documentación:
Variables locales:
Subprograma: Eliminar( ):
Void Eliminar(entero:vec[ ], entero:n, entero:val){
Entero: i=1
Mientras (i <= n) AND (val <> vec[ i ]) Haga
i=i+1
FinMQ //finalizado este mientras, I tiene la posición de borrado
Si (i <= n) entonces
Para (j = i, n - 1, 1) Haga
vec[ j ] = vec[j+1]
FinPara
n=n-1
Sino
Imprima: “El valor “, val, “no está en el vector”
FinSi
}
2.1.2 Ejemplos
Ejemplo 1
a. Definición
b. Análisis
Datos de entrada
o n : Tamaño del vector
Dato de Proceso
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: n,i,vec[100],sum=0
Real: prom
Imprima: “Ingrese el tamaño del vector: “ Realmente son las posiciones a llenar
Lea n
Para (i=1, n, 1) Haga
Imprima: “Ingrese un valor en la posición: “,i
Lea vec[ i ]
sum = sum + vec[ i ]
FinPara
prom = sum / n
Imprima: “El promedio de los valores del arreglo es:“,prom
Fin
d. Prueba de escritorio
Resultados en memoria
n i Imprime Iteración Posiciones
5 1 2 3 4 5
5 3 1 vec 4 7 11 9 3
4 9 2
3 11 3
2 7 4
1 4 5
0 Fin ciclo
Programa Principal
Inicio
Entero: n,vec[100]
Real: prom
Imprima: “Ingrese el tamaño del vector: “
Lea n
Crear_Vector(vec, n)
prom = Promediar(vec, n)
Imprima: “El promedio de los valores del arreglo es:“,prom
Fin
Subprograma: Crear_Vector( )
Subprograma: Promediar( )
Ejemplo 2
a. Definición
b. Análisis
Datos de entrada
o n : Tamaño del vector
o val : Valor a buscar
Datos de salida
Otras variables:
o vec[ ] : Vector
c. Pseudocódigo
Inicio
Entero: n,i,vec[100],val
Imprima: “Ingrese el tamaño del vector: “ Realmente son las posiciones a llenar
Lea n
Para (i=1, n, 1) Haga
Imprima: “Ingrese un valor en la posición: “,i
Lea vec[ i ]
FinPara
Imprima: “Ingrese el valor a buscar:”
Lea val
i=1
Mientras (i <= n) AND (val <> vec[ i ]) Haga
i = i +1
FinMQ
Si (i <= n) entonces
Imprima: “El valor fue localizado en la posición:”, i
Sino
Imprima: “El valor no existe en el vector”
FinSi
Fin
d. Prueba de escritorio
Resultados en memoria
n i vec[ i ] val (i <= n) AND Iteración Posiciones
(val <> vec[ i ])
7 1 2 3 4 5 6 7
1 vec[1]=4 1 vec 4 7 11 9 3 8 1
2 vec[2]=7 2
3 vec[3]=11 3
4 vec[4]=9 4
5 vec[5]=3 5
6 vec[6]=8 6
7 vec[7]=1 7
8 11
1 vec[1]=4 11 Verdadero
2 vec[2]=7 11 Verdadero 1
3 vec[3]=11 11 Falso 2 “El valor fue localizado en la posición:", 3
Programa Principal
Inicio
Entero: n,vec[100],val,pos
Imprima: “Ingrese el tamaño del vector: “
Lea n
Crear_Vector(vec, n)
Imprima: “Ingrese el valor a buscar:”
Lea val
pos = Busq_Secuencial(vec, n, val)
Si (pos <> 0) entonces
Imprima: “El valor fue localizado en la Posición:”, pos
Sino
Imprima: “El valor no existe en el vector”
FinSi
Fin
Subprograma: Crear_Vector( )
Subprograma: Busq_Secuencial( ):
Programa Principal
Inicio
Entero: n,vec[100],val,pos
Imprima: “Ingrese el tamaño del vector: “
Lea n
Crear_Vector(vec, n)
Imprima: “Ingrese el valor a buscar:”
Lea val
Ordenar_Vector(vec, n)
pos = Busq_Binaria(vec, n, val)
Si (pos <> 0) entonces
Imprima: “El valor fue localizado en la Posición:”, pos
Sino
Imprima: “El valor no existe en el vector”
FinSi
Fin
Subprograma: Crear_Vector( )
Subprograma: Ordenar_Vector( ):
Subprograma: Busq_Binaria( ):
Ejemplo 3
a. Definición
n _
σ = 1 /(n − 1)∑ ( xi − x) 2
i =1
Donde:
_
Media aritmética o promedio: prom = x = ( x[1] + x[2] + x[3] + ... + x[n]) / n
Sumatoria de cada valor xi menos el promedio al cuadrado:
n
b. Análisis
Datos de entrada
Datos de Proceso
Datos de salida
o desv : Desviación estándar
c. Pseudocódigo
Inicio
Entero n,i
Real: vec[100], prom,sum=0,sumat=0,desv
Imprima: "Ingrese el limite superior de la sumatoria:"
Lea n
Para (i =1, n, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea vec[ i ]
sum = sum + vec[ i ]
FinPara
prom = sum / n Importante: Observe que no es
Para (i =1, n, 1) Haga necesario ingresar nuevamente
los datos, ya que se encuentran
sumat = sumat + (vec[ i ] – prom)^2
almacenados en el vector.
FinPara
desv = sqrt(1/(n-1)*sumat)
Imprima: “La desviación estándar es =”, desv
Fin
d. Prueba de escritorio
Resultados en memoria
n I vec[ i ] sum prom sumat desv Posiciones
7 0 0 1 2 3 4 5 6 7
1 4 4 vec 4 7 11 9 3 8 1
2 7 11
3 11 22
4 9 31
5 3 34
6 8 42
7 1 43
8 6.1
1 4 4.4
2 7 5.2
3 11 29.2
4 9 37.6
5 3 47.3
6 8 50.9
7 1 76.9
8 3.6
Programa Principal
Inicio
Entero n
Real: vec[100],prom,sumat,desv
Imprima: "Ingrese el limite superior de la sumatoria:"
Lea n
Crear_Vector(vec, n)
prom = Promedio(vec, n)
sumat = Sumatoria(vec,n,prom)
desv = sqrt(1/(n-1)*sumat)
Imprima: “La desviación estándar es =”, desv
Fin
Subprograma: Crear_Vector( )
Subprograma: Promedio( )
Subprograma: Sumatoria( )
Ejemplo 4
a. Definición
Ejemplo ilustrativo:
1 2 3 4 5
A 1 3 5 6 7
1 2 3 4 5 6
B 1 2 3 4 6 8
1 2 3 4 5 6
C 1 2 3 4 5 6 7 8
b. Análisis
Datos de entrada
Procedimiento:
Datos de salida
o C[ ] : El vector resultante
c. Pseudocódigo
Inicio
Entero: A[100],n,B[100],p,i,j,k,aux
Imprima: "Ingrese el tamaño del vector A:”
Lea n
Imprima: "Ingrese el tamaño del vector B:”
Lea p
Entero: C[n+p]
Para (i =1, n, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea A[ i ]
FinPara
Para (i =1, p, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea B[ i ]
FinPara
Para (i = 1, n-1, 1) Haga
Para (j = i, n, 1) Haga
Si (A[ i ] > A[ j ]) entonces
aux = A[ i ]
A[ i ] = A[ j ]
A[ j ] = aux
FinSi
FinPara
FinPara
Para (i = 1, n-1, 1) Haga
Para (j = i, n, 1) Haga
Si (B[ i ] > B[ j ]) entonces
aux = B[ i ]
B[ i ] = B[ j ]
B[ j ] = aux
FinSi
FinPara
FinPara
i = 1, j = 1
k=0
Mientras (i <= n AND j <= p) Haga
k=k+1
Si (A[ i ] = B[ j ]) entonces
C[k] = A[ i ]
i=i+1
j = j +1
Sino
Si (A[ i ] < B[ j ]) entonces
C[k] = A[ i ]
i=i+1
Sino
C[k] = B[ j ]
j=j+1
FinSi
FinSi
FinMQ
Si (i <= n) Haga
Mientras ( i <= n ) Haga
C[k] = A[ i ]
k=k+1
i=i+1
FinMQ
Sino
Mientras ( j <= p ) Haga
C[k] = B[ j ]
k=k+1
j=j+1
FinMQ
FinSi
Para (i =1, k, 1) Haga
Imprima: C[ i ]
FinPara
Fin
d. Prueba de escritorio
Resultados en memoria
n I A[ i ] p J B[ j ] Posiciones
5 1 5 1 2 3 4 5
2 3 A 5 3 6 7 1
3 6
4 7 1 2 3 4 5 6
5 1 B 8 4 2 6 1 3
6
6 1 8 1 2 3 4 5
2 4 A 1 3 5 6 7
3 2
4 6 1 2 3 4 5 6
5 1 B 1 2 3 4 6 8
6 3
7 1 2 3 4 5 6 7 8
Ordenación del vector A C 1 2 3 4 5 6 7 8
Ordenación del vector B
Intercalación del Vector A y B en C
Imprime: 1 ,2, 3, 4, 5, 6, 7, 8
Programa Principal
Inicio
Entero: A[100],n,B[100],p,k=0
Imprima: "Ingrese el tamaño del vector A:”
Lea n
Imprima: "Ingrese el tamaño del vector B:”
Lea p
Entero: C[n+p]
Crear_Vector(A, n)
Crear_Vector(B, p)
Ordenar_Vector(A, n)
Ordenar_Vector(B, p)
Intercalar_Vector(A,n,B,p,C,k)
Imprimir_Vector(C,k)
Fin
Subprograma: Crear_Vector( )
Subprograma: Ordenar_Vector( ):
Subprograma: Intercalar_Vector( ):
Subprograma: Imprimir_Vector( )
Ejemplo 5
a. Definición
Ejemplo ilustrativo:
1 2 3 4 5
A 1 4 5 8 9
1 2 3 4 5 6
B 1 5 6 7 8 11
1 2 3 4 5
C 4 6 7 9 11
b. Análisis
Datos de entrada
Procedimiento:
Datos de salida
o C[ ] : El vector resultante
c. Pseudocódigo
Inicio
Entero: A[100],n,B[100],p,i,j,k,aux
Imprima: "Ingrese el tamaño del vector A:”
Lea n
Imprima: "Ingrese el tamaño del vector B:”
Lea p
Entero: C[n+p]
Para (i =1, n, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea A[ i ]
FinPara
Para (i =1, p, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea B[ i ]
FinPara
Para (i = 1, n-1, 1) Haga
Para (j = i, n, 1) Haga
Si (A[ i ] > A[ j ]) entonces
aux = A[ i ]
A[ i ] = A[ j ]
A[ j ] = aux
FinSi
FinPara
FinPara
Para (i = 1, n-1, 1) Haga
Para (j = i, n, 1) Haga
Si (B[ i ] > B[ j ]) entonces
aux = B[ i ]
B[ i ] = B[ j ]
B[ j ] = aux
FinSi
FinPara
FinPara
i = 1, j = 1
k=0
Mientras (i <= n AND j <= p) Haga
k=k+1
Si (A[ i ] = B[ j ]) entonces
i=i+1
j = j +1
Sino
Si (A[ i ] < B[ j ]) entonces
C[k] = A[ i ]
i=i+1
Sino
C[k] = B[ j ]
j=j+1
FinSi
FinSi
FinMQ
Si (i <= n) Haga
Mientras ( i <= n ) Haga
C[k] = A[ i ]
k=k+1
i=i+1
FinMQ
Sino
Mientras ( j <= p ) Haga
C[k] = B[ j ]
k=k+1
j=j+1
FinMQ
FinSi
Para (i =1, k, 1) Haga
Imprima: C[ i ]
FinPara
Fin
d. Prueba de escritorio
Resultados en memoria
n i A[ i ] p J B[ j ] Posiciones
5 1 9 1 2 3 4 5
2 5 A 9 5 8 1 4
3 8
4 1 1 2 3 4 5 6
5 4 B 8 6 1 11 5 7
6
6 1 8 1 2 3 4 5
2 6 A 1 4 5 8 9
3 1
4 11 1 2 3 4 5 6
5 5 B 1 5 6 7 8 11
6 7
7 1 2 3 4 5
Ordenación del vector A C 4 6 7 9 11
Ordenación del vector B
Valores NO comunes del Vector A y
B en C
Imprime: 4, 6, 7, 9, 11
Programa Principal
Inicio
Entero: A[100],n,B[100],p,k=0
Imprima: "Ingrese el tamaño del vector A:”
Lea n
Imprima: "Ingrese el tamaño del vector B:”
Lea p
Entero: C[n+p]
Crear_Vector(A, n)
Crear_Vector(B, p)
Ordenar_Vector(A, n)
Ordenar_Vector(B, p)
Intercalar_Vector(A,n,B,p,C,k)
Imprimir_Vector(C,k)
Fin
Subprograma: Crear_Vector( )
Subprograma: Ordenar_Vector( ):
Subprograma: Intercalar_Vector( ):
Subprograma: Imprimir_Vector( )
Ejemplo 6
a. Definición
Elabore un algoritmo que elimine el valor que más se repita en un vector de N elementos.
Ejemplo:
1 2 3 4 5 6 7 8 9
1 3 2 3 5 2 3 6 3
Pasos solución: 1
b. Análisis
Datos de entrada
Procedimiento:
Datos de salida
o vec[ i ] : El valor más repetido
c. Pseudocódigo
Inicio
Entero: vec[100],n,Y[100],i,j,may,val
Imprima: "Ingrese el tamaño del vector vec:”
Lea n
Para (i =1, n, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea vec[ i ]
FinPara
Para (i =1, n -1, 1) Haga
cont = 1
Para (j =i+1, n, 1) Haga
Si (vec[ i ] = vec[ j ]) entonces
cont = cont + 1
FinSi
FinPara
Y[ i ] = cont
FinPara
may = Y[1]
val = vec[1] \\ se asume el primero como el mayor valor
Para (i =2, n, 1) Haga
Si (may < Y[ i ]) entonces
may = Y[ i ]
val = vec[ i ]
FinSi
FinPara
\\ en este punto, ya se sabe cual es el valor que más se repite (val)
\\ lo que se hace para eliminar el valor más repetido, es traer los demás valores hacia
\\ adelante y al final se disminuye el tamaño del vector.
Veamos:
d. Prueba de escritorio
n i vec[ i ] Posiciones
9 1 1 1 2 3 4 5 6 7 8 9
2 3 vec 1 3 2 3 5 2 3 6 3
3 2
4 3
5 5 Y 1 4 2 3 1 1 2 1 1
6 2
7 3 Procedimiento para eliminar el valor más repetido
8 6
9 3 1 2 3 4 5 6 7 8 9
10 vec 1 3 2 3 5 2 3 6 3
Número de veces que se repiten
El valor que más se repite n
1 2 3 4 5 6 7 8 n = n-1
vec 1 2 3 5 2 3 6 3 3
1 2 3 4 5 6 7 n = n-1
vec 1 2 5 2 3 6 3 3 3
1 2 3 4 5 6 n = n-1
vec 1 2 5 2 6 3 3 3 3
Si (val = vec[ i ]) entonces: n = n - 1
n = n-1
Programa Principal
Inicio
Entero: vec[100],n,Y[100],i,j,val
Imprima: "Ingrese el tamaño del vector vec:”
Lea n
Crear_Vector(vec, n)
Valores_Repetidos(vec, n, Y)
val = Valor_Masrepetido(Y, n, vec)
Eliminar_Masrepetido(vec, n, val)
Imprimir_Vector(vec, n)
Fin
Subprograma: Crear_Vector( )
Subprograma: Valores_Repetidos( ):
Subprograma: Valor_Masrepetido( ):
Subprograma: Eliminar_Masrepetido( ):
vec[ j ] = vec[j+1]
FinPara
n=n-1
FinSi
FinPara
Si (val = vec[ i ]) entonces
n=n–1
FinSi
}
Subprograma: Imprimir_Vector( )
Pasos solución: 2
1°. Ordenar el vector en forma ascendente o descend ente: de ésta forma los
valores que se repiten quedan en forma consecutiva.
2°. Contar el número de veces que se repite cada va lor.
3°. Cada vez que se localice un valor que se repita más que el anterior más
repetido, se reemplaza para actualizar dicho valor.
b. Análisis
Datos de entrada
Procedimiento:
Datos de salida
o vec[ i ] : El valor más repetido
c. Pseudocódigo
Inicio
Entero: vec[100],n,i,j,aux,cont=1,may=0
Imprima: "Ingrese el tamaño del vector vec:”
Lea n
Para (i =1, n, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, i
Lea vec[ i ]
FinPara
Para (i = 1, n-1, 1) Haga
Para (j = i, n, 1) Haga
Si (vec[ i ] > vec[ j ]) entonces
aux = vec[ i ]
vec[ i ] = vec[ j ]
vec[ j ] = aux
FinSi
FinPara
FinPara
val = vec[1]
Para (i =1, n -1, 1) Haga
Si (vec[ i ] = vec[i+1]) entonces
cont = cont + 1
else
Si (cont > may) entonces
may = cont
val = vec[ i ]
cont = 1
FinSi
FinSi
FinPara
Para (i =1, n -1, 1) Haga
Si (vec[ i ] = val) entonces
Para (j = i, n -1, 1) Haga
vec[ j ] = vec[j+1]
FinPara
n=n-1
FinSi
FinPara
Si (val = vec[ i ]) entonces
n=n-1
FinSi
Para (i =1, n , 1) Haga
Imprima: vec[ i ]
FinPara
Ejemplo 7
a. Definición
Crear un vector con una frase, la cual debe ser ingresada caracter por caracter hasta que
se introduzca un punto; se desea, crear un programa que elimine todos los espacios en
blanco que contenga dicha frase.
b. Análisis
Datos de entrada
Procedimiento:
o Si (frase[ i ] = ‘ ‘) entonces
: Cada vez sea localizado un espacio en blanco, se deben traer todos
los caracteres siguientes en el vector un lugar hacia a atrás, es decir,
el carácter siguiente se mueve a la posición en blanco, y así
sucesivamente con todos los demás caracteres hasta terminar de
recorrer el vector:
Datos de salida
Otras variables:
A continuación pude visualizar dos programas equivalentes para crear el vector frase:
Repetir
Imprima: "Ingrese un caracter o <punto (.) para finalizar>:”
Lea car
i=i+1
frase[ i ] = car
Hasta_Que (car <>’.’) Haga
n=i
1°. Diferencia:
2°. Diferencia:
c. Pseudocódigo
Inicio
Entero: n,i=0,j
Caracter: frase[100], car
Repetir
Imprima: "Ingrese un caracter o <punto (.) para finalizar>:”
Lea car
i=i+1
frase[ i ] = car
Hasta_Que (car <>’.’) Haga
n=i
Para (i = 1, n-1, 1) Haga
Si (frase[ i ] = ‘ ‘) entonces
Para (j = i, n-1, 1) Haga
frase[ j ] = frase[j+1]
FinPara
n = n -1
FinSi
FinPara
Para (i = 1, n-1, 1) Haga
Imprima: frase[ i ]
FinPara
Fin
d. Prueba de escritorio
Resultados en memoria
n i frase[ i ] Car frase[ i ] = ‘ ‘ Vector Frase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 frase[1]=’H’ ‘H’ H O L A F E L I Z D I A .
2 frase[2]=’O’ ‘O’
3 frase[3]=’L’ ‘L’
4 frase[4]=’A’ ‘A’
5 frase[5]=’ ‘ ‘‘
6 frase[6]=’F’ ‘F’
7 frase[7]=’E’ ‘E’
8 frase[8]=’L’ ‘L’
9 frase[9]=’I’ ‘I’
10 frase[10]=’Z’ ‘Z’
11 frase[11]=’ ’ ‘‘
12 frase[12]=’D’ ‘D’
13 frase[13]=’I’ ‘I’
14 frase[14]=’A’ ‘A’
15 frase[15]=’.’ ’.’ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
15 H O L A F E L I Z D I A .
1 Falso
2 Falso
3 Falso
4 Falso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
5 Verdadero H O L A F E L I Z D I A . .
14 6 Falso
7 Falso
9 Falso
10 Verdadero
13 11 Falso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
12 Falso H O L A F E L I Z D I A . . .
13 Falso
14
Programa Principal
Inicio
Entero: n
Caracter: frase[100]
n = Crear_Vector(frase)
n = Eliminar_Blancos(frase,n)
Imprimir_Frase(frase, n)
Fin
Subprograma: Crear_Vector( )
Subprograma: Eliminar_Blancos( )
Subprograma: Imprimir_Vector( )
Una matriz es un arreglo cuyos elementos están dispuestos en dos direcciones, filas y
columnas y para poder referenciar uno de sus elementos, son necesarios dos índices, uno
para la fila y otro para la columna.
Una matriz se puede ver como un vector de vectores, por ejemplo, si se tiene la matriz:
0 −5 6 9
4 −2 1 7
X=
8 −9 2 0
3 − 1 10 11
0 -5 6 9
X= 4 -2 1 7
8 -9 2 0
3 -1 10 11
O como el vector columna
0 -5 6 9
4 -2 1 7
X=
8 -9 2 0
3 -1 10 11
A los arreglos bidimensionales (matrices) se les debe dar un nombre (Nomb_arreglo) para
identificar el conjunto de datos que éste agrupa, los nombres de arreglos son
identificadores y como tal deben ser nombres nemotécnicos que sean representativos.
Nomb_arreglo[# , #]
hace referencia a la columna
hace referencia a la fila
Referencia de elementos
Ejemplo: 0 -5 6 9
• X[2,3] = 1 4 -2 1 7
• X[4,2] =-1 X=
8 -9 2 0
3 -1 10 11
ne
Para formar o crear una matriz, se puede hacer formando primero la primera fila, luego la
segunda fila, luego la tercera, y así sucesivamente, es decir se crea “por filas”, pero
también se puede hacer “por columnas”, es decir, se forma primero la primera columna,
luego la segunda columna, luego la tercera y así en adelante.
Así como un vector tiene que ser nombrado y dimensionado antes de ser utilizado, una
matriz también. La instrucción para dimensionar un matriz es:
• Entero M[5,6], se creará una matriz de cinco filas x seis columnas, de valores enteros.
• Real M[4,3], se creará una matriz de cuatro filas x tres columnas, de valores reales.
La carga de datos se realiza de la misma forma que un vector, por medio de un ciclo
PARA; solo que en este caso, vamos a necesitar 2 ciclos; uno que recorra las filas y otro
las columnas:
Ejemplo:
Para (F = 1, 5, 1) Haga
Para (C = 1, 6, 1) Haga
Imprima: “Ingrese un valor en la Posición:”, F, C
Lea M[F, C]
FinPara
FinPara
En éste ejemplo, la variable fila (F) comienza en el valor 1, luego se da inicio al ciclo más
interno que controla las columnas (C) que va desde 1 hasta 6. El ciclo de las columnas
debe terminar todo su recorrido para que pueda saltar a la siguiente fila. Los índices van
tomando estos valores:
1er Ciclo 2do Ciclo 3er Ciclo 4to Ciclo 5to Ciclo 6to Ciclo
F,C F,C F,C F,C F,C F,C
MAT [1, 1] MAT [2, 1] MAT [3, 1] MAT [4, 1] MAT [5, 1] MAT [6, 1]
MAT [1, 2] MAT [2, 2] MAT [3, 2] MAT [4, 2] MAT [5, 2] MAT [6, 2]
MAT [1, 3] MAT [2, 3] MAT [3, 3] MAT [4, 3] MAT [5, 3] MAT [6, 3]
MAT [1, 4] MAT [2, 4] MAT [3, 4] MAT [4, 4] MAT [5, 4] MAT [6, 4]
MAT [1, 5] MAT [2, 5] MAT [3, 5] MAT [4, 5] MAT [5, 5] MAT [6, 5]
C=6 C=6 C=6 C=6 C=6 C=6
F =7
Fin del ciclo interno
Fin del ciclo externo
2.2.1 Sintaxis: para crear e imprimir una matriz de dimensiones nxm elementos
Sintaxis: para crear una matriz de dimensiones nxm elementos fila por fila
Entero: i, j, n, m, mat[20,20]
Imprima: “Ingrese el número de filas:”
Lea n
Imprima: “Ingrese el número de columnas:”
Lea m
Para (i=1 , n, 1) Haga
Para (j=1 , m, 1) Haga
Imprima:”Ingrese un valor en la posición:”, i, j
Lea mat[i, j]
Fin Para
Fin Para
Fin
Resultados en memoria
n m i j Mat[i, j] Mat
4 3 1 1 Mat[1, 1] = 5
1 2 3
2 Mat[1, 2] = 2 5 2 9
1
3 Mat[1, 3] = 9 11 8 3
2
4 Fin ciclo interno 4 1 6
3
2 1 Mat[2, 1] = 11 10 13 25
4
2 Mat[2, 2] = 8
3 Mat[2, 3] = 3
4 Fin ciclo interno
3 1 Mat[3, 1] = 4
2 Mat[3, 2] = 1
3 Mat[3, 3] = 6
4 Fin ciclo interno
4 1 Mat[4, 1] = 10
2 Mat[4, 2] = 13
3 Mat[4, 3] = 25
4 Fin ciclo
5 Fin ciclo externo
Sintaxis: para crear una matriz de dimensiones nxm elementos columna por columna
Entero: i, j, n, m, mat[20,20]
Imprima: “Ingrese el número de filas:”
Lea n
Imprima: “Ingrese el número de columnas:”
Lea m
Para (j=1 , m, 1) Haga se intercambian los ciclos, el interno pasa a ser externo y vs.
Para (i=1 , n, 1) Haga
Imprima:”Ingrese un valor en la posición:”, i, j
Lea mat[i, j]
Fin Para
Fin Para
Fin
Resultados en memoria
n m j i Mat[i, j] Mat
4 3 1 1 Mat[1, 1] = 5
1 2 3
2 Mat[2, 1] = 11 5 2 9
1
3 Mat[3, 1] = 4 11 8 3
2
4 Mat[4, 1] = 10 4 1 6
3
5 Fin ciclo interno 10 13 25
4
2 1 Mat[1, 2] = 2
2 Mat[2, 2] = 8
3 Mat[3, 2] = 1
4 Mat[4, 2] = 13
5 Fin ciclo interno
3 1 Mat[1, 3] = 9
2 Mat[2, 3] = 3
3 Mat[3, 3] = 6
4 Mat[4, 3] = 25
5 Fin ciclo interno
4 Fin ciclo externo
Sintaxis: para imprimir una matriz de dimensiones nxm elementos fila por fila
Sintaxis: para imprimir una matriz de dimensiones nxm elementos columna por columna
a. Matriz cuadrada
12 10 32
MAT -6 -9 56
45 81 97
En una matriz cuadrada existen dos diagonales que son: la diagonal principal y la
diagonal secundaria. La principal está conformada por los elementos que están en la línea
imaginaria que va desde la parte superior izquierda hasta la parte inferior derecha de la
matriz.
La diagonal secundaria está conformada por los elementos que están situados en la línea
imaginaria que va desde la parte superior derecha hasta la parte inferior izquierda de la
matriz. Así
Diagonal secundaria
Diagonal principal
Las matrices cuadradas tienen ciertas características; por ejemplo, los elementos en
donde el número de filas es igual al número de columnas se llama diagonal principal
(señalados en amarillo): fila = columna
La diagonal principal define así dos áreas bien notorias, una que está por encima y otra
por debajo. La región determinada por los elementos situados sobre la diagonal principal
se llama matriz triangular superior que tiene la propiedad en la cual: fila < columna.
b. Matriz identidad
1 0 0 0
0 1 0 0
I=
0 0 1 0
0 0 0 1
c. Matriz transpuesta
La transpuesta de la matriz A, denotada AT, es una matriz tal que las filas de A son las
columnas de AT y las columnas de A son las filas de AT. Por consiguiente, si la matriz A es
de orden N*M, la matriz AT es de orden M*N.
Ejemplo:
9 -1 0
9 5 7 8
5 40 2
Sea la matriz A = -1 40 11 -5 la transpuesta AT =
7 11 6
0 2 6 7
8 -5 7
d. Matriz simétrica
Una matriz S es simétrica si se cumple que S[I,J] = S[J,I], para todos los elementos de la
matriz.
8 4 -1 0
4 7 -2 9
S=
-1 -2 0 3
0 9 3 5
e. Matriz inversa
La inversa de la matriz A, denotada A-1, es una matriz tal que A * A-1 = I, siendo I la matriz
identidad.
Diagonal secundaria
A11 A12 A13 A14
10 8 3 0 1 6 9 69
A= 7 -3 33 45 B= 14 22 56 7
9 15 71 29 3 5 80 1
A y B son de igual dimensión, por lo tanto existe una matriz C que es la suma de A y B
11 14 13 69
C= 21 19 89 52
12 20 151 30
Ejemplo:
1 3 11 19
2 1
2 5
A * B = R 19 32
3 6
4 0 8 4
2.2.4 Ejemplos
Ejemplo 1
a. Definición
b. Análisis
Datos de entrada
o notas[ ][ ] : Matriz de notas
Dato de Proceso
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: i, j,estp,estn1,estn5,testp=0
Real: notas[20][5], sum, prom, sumpro=0
Para (i =1, 20, i) Haga
Para (j=1, 5, 1) Haga
Imprima: “Ingrese la nota del estudiante:”, i “en su materia:”, j
Lea notas[i][j]
FinPara
FinPara
//a. Promedio de cada estudiante en sus cinco materias
Para (i =1, 20, i) Haga
sum = 0, estp = 0
Para (j=1, 5, 1) Haga
sum = sum + notas[i][j]
Si (notas[i][j] < 3.0) entonces
estp = estp + 1
FinSi
FinPara
Si (estp >= 3) entonce
testp = testp + 1
FinSi
prom = (sum / 5)
Imprima: “El promedio del estudiante:”, i, “En sus 5 materias es:”, prom
FinPara
Imprima: “El total de estudiantes que perdieron tres (3) o más materias es:”, testp
Para (j =1, 5, i) Haga
estp=0, estn1=0,estn5=0, sum=0
Para (i=1, 20, 1) Haga
sum = sum + notas[i][j]
Si (notas[i][j] < 3.0) entonces
estp = estp + 1
d. Prueba de escritorio
Nota: para efectos de la prueba de escritorio se creará una matriz para un grupo de 4
estudiantes.
Resultados en memoria
Materias
i j sum prom estp testp
j =1 2 3 4 5
1 1a5 19.5 3.9 1 1 i=1 2.5 3.5 5.0 4.5 4.0
2 1a5 12.2 2.4 4 2.9 2.3 1.5 1.8 3.7
2
3 1a5 16.5 3.3 2 4.5 4.0 3.3 2.0 2.7
3
4 1a5 15.5 3.1 2 2.6 3.8 2.0 4.0 3.1
4
Estudiantes que pierden 3 o más materias: 1
i j sum prom estp estn1 estn5 Estudiantes
1a4 1 12.5 3.1 3 0 0
1a4 2 13.6 3.4 1 0 0
1a4 3 11.8 3.0 2 0 1
1a4 4 12.3 3.1 2 0 0
1a4 5 13.5 3.4 1 0 0
Total: 16
El promedio de todo el grupo en sus 5 materias es: (16 / 5) = 3.2
Programa Principal
Inicio
Real: notas[20][5]
Crear_Matriz(notas)
Calcular_Datos1(notas)
Calcular_Datos2(notas)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Calcular_Datos1( )
Subprograma: Calcular_Datos2( )
Ejemplo 2
a. Definición
- El primer vector debe contener todos los valores pares de la matriz, sin que queden
valores repetidos en éste.
- El segundo vector debe contener todos los valores impares de la matriz, sin que
queden valores repetidos en éste.
b. Análisis
Datos de entrada
o X[ ][ ] : Matriz de valores creada por el usuario
Dato de Proceso
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: X[10][10], par[50],imp[50],n,m, i, j,k=0, r=0, s
Imprima: “Ingrese el número de filas de la matriz X:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz X:”
Lea m
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
Imprima: “Ingrese un valore en la posición:”, i, j
Lea X[i][j]
FinPara
FinPara
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
Si (X[i][j] mod 2=0) entonces
s=1
Mientras (X[i][j] <> par[s] AND s <= k) Haga
s=s+1
FinMQ
Si (s > k) entonces
k = k +1
par[k] = X[i][j]
FinSi
Sino
s=1
Mientras (X[i][j] <> imp[s] AND s <= r) Haga
s=s+1
FinMQ
Si (s > r) entonces
r = r +1
imp[r] = X[i][j]
FinSi
FinSi
FinPara
FinPara
Para (i =1, k, 1) Haga
Imprima: par[i]
FinPara
Para (i =1, r, 1) Haga
Imprima: imp[i]
FinPara
Fin
d. Prueba de escritorio
Resultados en memoria
X
i j X[i][j] K Par[k] r imp[r]
j =1 2 3 4
1 1 4 1 4 i=1 4 1 8 3
2 1 1 1 10 5 3 7
2
3 8 2 8 4 6 7 8
3
4 3 2 3 15 4 1 6
4
2 1 10 3 10
2 5 3 5
3 3
K=1 2 3 4 5 6
4 7 4 7 par 4 8 10 6
3 1 4
r =1 2 3 4 5 6
2 6 4 6 imp 1 3 5 7 15
3 7
4 8
4 1 15 5 15
2 4
3 1
4 6
Programa Principal
Inicio
Entero: X[10][10], n,m
Imprima: “Ingrese el número de filas de la matriz X:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz X:”
Lea m
Crear_Matriz(X,n,m)
Par_Impar(X,n,m)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Par_Impar( )
Ejemplo 3
a. Definición
b. Análisis
Datos de entrada
o M[i][j] : Matriz de valores creada por el usuario
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: M[10][10],n,m,i,j,k,aux,men,nmen=0,may,nmay=0
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz M:”
Lea m
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
Imprima: “Ingrese un valore en la posición:”, i, j
Lea M[i][j]
FinPara
FinPara
Para (j =1, m, 1) Haga
Para (k=1, n-1, 1) Haga
nmay = nmay + 1
FinSi
FinPara
FinPara
Imprima: “El menor valor de la matriz es:”, men “y se repite:”, contmen “veces”
Imprima: “El mayor valor de la matriz es:”, may “y se repite:”, contmay “veces”
Fin
d. Prueba de escritorio
Resultados en memoria
i J M[1][j] M[n][j]
j =1 2 3 4
1 1 10 i=1 4 8 2 6
2 2 8 2. 2 8 9 1
2
3 2 9 10 2 6 9
3
4 1 9 3 8 3 1
4
1 2 5 9
Menor de cada col Mayor de cada columna n=5
i j M[i][j] cont 3.
1 1 1 1 Número
j =1 2 3 4
de veces i=1
1 2 2 1 1 2 2 1
que se
2 2 2 2 2 3 1
repite 2
1 3 2 1 el menor 1. 3 8 5 6
3
valor
1 4 1 1 de cada 4 8 6 9
4
2 1 2 columna 10 8 9 9
5
Programa Principal
Inicio
Entero: M[10][10], n,m, j
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz M:”
Lea m
Crear_Matriz(M,n,m)
Ordenar_Matriz(M,n,m)
Para (j=1, m, 1) Haga
Imprima: “El menor valor de la columna:”, j “es :”, M[1][j]
Imprima: “El mayor valor de la columna:”, j “es :”, M[n][j]
FinPara
Tvalmen_Col(M,n,m)
Tvalmay_Col(M,n,m)
Menmay_Matriz(M,n,m)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Crear_Matriz( )
Subprograma: Tvalmen_Col( )
Subprograma: Tvalmay_Col( )
Subprograma: Menmay_Matriz( )
Ejemplo 4
a. Definición
Construya una matriz de dimensiones n x m; diseñe un algoritmo que calcule e
imprima:
b. Análisis
Datos de entrada
o M[i][j] : Matriz de valores creada por el usuario
Datos de proceso
o cont : Número de veces que se repite un valor en la matriz
o sum = sum + M[i][j] : Sumatoria de los valores de la matriz
o prom=(sum/(n*m)) : Promedio de los valores de la matriz
o nmen : Contador de valores menores al promedio
o vec[ ] : Vector que contiene los valores de la matriz
o cont : Número de veces que se repite un valor
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: M[10][10],n,m,i,j,k=0,sum=0,nmen=0,cont=0,aux,tot,val
Real: prom
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz M:”
Lea m
Entero: vec[n*m]
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
Imprima: “Ingrese un valore en la posición:”, i, j
Lea M[i][j]
FinPara
FinPara
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
k = k +1
vec[k] = M[i][j]
sum = sum + M[i][j]
FinPara
FinPara
prom = sum /(n*m)
Para (i =1, n, 1) Haga
Para (j=1, m, 1) Haga
Si (M[i][j] < prom) entonces
nmen = nmen + 1
FinSi
FinPara
FinPara
Imprima: “Total de números menores al promedio de los valores de la matriz:”, nmen
Para (i =1, n-1, 1) Haga
Para (j=i+1, n, 1) Haga
Si (vec[i] > vec [j]) entonces
aux = vec[i]
vec[i] = vec[j]
vec[j] = aux
FinSi
FinPara
FinPara
cont = 1,tot=1,val=vec[1]
Para (i =1, n-1, 1) Haga
Si (vec[i] = vec[i+1]) entonces
cont = cont + 1
Sino
Imprima : “El valor : “, vec[i], “se repite:”, cont ,”veces”
Si (cont > tot) entonces
tot = cont
val = vec[i]
FinSi
cont = 1
FinSi
FinPara
Imprima : “El valor que más se repite es: “, val, “con un total de:”, may ,”repeticiones”
Fin
d. Prueba de escritorio
Resultados en memoria
1. 2. Mat
i j sum nmen
1 2 3
1 1-4 17 2 5 3 9
1
2 1-4 39 1 Valores 11 8 3
2
3 1-4 55 2 menores al
promedio 3
9 1 6
4 1-4 87 0 10 13 9
4
prom 7.25 5 Valores menores al promedio
vec 5 3 9 11 8 3 9 1 6 10 13 9
3. Vector Ordenado
vec 1 3 3 5 6 8 9 9 9 10 11 13
Programa Principal
Inicio
Entero: M[10][10], n,m,men
Real: prom
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Imprima: “Ingrese el número de columnas de la matriz M:”
Lea m
Entero: vec[n*m]
Crear_Matriz(M,n,m)
prom = Promedio(M,n,m,vec)
men = Menor_Promedio(M,n,m,prom)
Imprima: “Total de números menores al promedio de los valores de la matriz:”, men
Ordenar_Vector(vec,n*m)
Val_Masrepet(vec,n*m)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Promedio( )
Subprograma: Menor_Promedio( )
Subprograma: Ordenar_Vector( )
Subprograma: Val_Masrepet( )
Ejemplo 5
a. Definición
Dada una matriz cuadrada de orden N; desarrollar un algoritmo que calcule e imprima:
b. Análisis
Datos de entrada
o M[i][j] : Matriz de valores ingresados por el usuario
Datos de proceso
o sdp : Sumatoria de valores de la diagonal principal
o stsup : Sumatoria de valores de la triangular superior
o sds : Sumatoria de valores de la diagonal secundaria
o stinf : Sumatoria de valores de la triangular inferior
o pdp : Promedio de valores de la diagonal principal
o ptsup : Promedio de valores de la triangular superior
o pds : Promedio de valores de la diagonal secundaria
o ptinf : Promedio de valores de la triangular inferior
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: M[10][10],n,i,j,sdp=0,stsup=0,sds=0,stinf=0,cont=0
Real: pdp,ptsup,pds,ptinf
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Para (i =1, n, 1) Haga
Para (j=1, n, 1) Haga
Imprima: “Ingrese un valor en la posición:”, i, j
Lea M[i][j]
FinPara
FinPara
j=n
Para (i =1, n, 1) Haga
sdp = sdp + M[i][i]
sds = sds + M[i][j]
j = j -1
FinPara
pdp = sdp/n
pds = sds/n
Imprima: “El promedio de valores de la diagonal principal es:”, pdp
Imprima: “El promedio de valores de la diagonal secundaria es:”, pds
stsup=0, stinf=0
Para (i =1, n, 1) Haga
Para (j=1, n, 1) Haga
Si (i < j) entonces
stsup = stsup + M[i][j]
cont = cont + 1
Sino
Si (i > j) entonces
stinf = stinf + M[i][j]
FinSi
FinSI
FinPara
FinPara
ptsup = stsup/cont
ptinf = stinf/cont
Imprima: “El promedio de la triangular superior es:”, ptsup
Imprima: “El promedio de la triangular inferior es:”, ptinf
Si (ptsup > ptinf) entonces
Imprima:”El promedio de valores de la triangular superior es mayor al promedio de
valores de la triangular inferior”
Sino
Imprima:”El promedio de valores de la triangular inferior es mayor al promedio de
valores de la triangular superior”
FinSi
Fin
d. Prueba de escritorio
Resultados en memoria
Programa Principal
Inicio
Entero: M[10][10], n
Imprima: “Ingrese el número de filas de la matriz M:”
Lea n
Crear_Matriz(M,n)
Prom_Diagonales(M,n)
Prom_Triangulares(M,n)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Prom_Diagonales( )
Subprograma: Prom_Triangulares( )
ptinf = stinf/n
Imprima: “El promedio de la triangular superior es:”, ptsup
Imprima: “El promedio de la triangular inferior es:”, ptinf
Si (ptsup > ptinf) entonces
Imprima:”El promedio de valores de la triangular superior es mayor al promedio
de valores de la triangular inferior”
Sino
Imprima:”El promedio de valores de la triangular inferior es mayor al promedio
de valores de la triangular superior”
FinSi
}
Ejemplo 6
a. Definición
Elaborar un algoritmo que forme e imprima una matriz con las siguientes características:
• La primera fila y la primera columna tienen como elementos los números del 0 a N.
• Los demás elementos se obtienen de multiplicar cada elemento de la fila uno por
cada elemento de la columna uno. Así:
Ilustración:
0 1 2 3 4 5 6 7 8 9 10 …… N
1 1 2 3 4 5 6 7 8 9 10 ……
2 2 4 6 8 10 12 14 16 18 20 ……
3 3 6 9 12 15 18 21 24 27 30 ……
.
.
N
b. Análisis
Datos de entrada
o M[i][j] : Matriz con las tablas de multiplicar
o N : Número hasta el cual se generarán las
multiplicaciones
Datos de proceso
o M[i][j]= (i - 1) * (j – 1) : Multiplicación de posiciones de la matriz
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: M[10][10],n,i,j
Imprima: “¿Hasta qué número quiere generar las tablas de multiplicar?”
Lea: n
Para (j = 1, n, 1) Haga
M[1][j] = j -1
M[j][1] = j -1
FinPara
Para (i = 2, n, 1) Haga
Para (j = 2, n, 1) Haga
M[i][j] = (i - 1) * (j – 1)
FinPara
FinPara
Para (i= 1, n, 1) Haga
Para (j = 1, n, 1) Haga
Imprima: M[i][j]
FinPara
FinPara
Fin
d. Prueba de escritorio
Resultados en Memoria
j =1 2 3 4 5 6 7 8
i=1 0 1 2 3 4 5 6 7
2 1 1 2 3 4 5 6 7
3 2 2 4 6 8 10 12 14
4 3 3 6 9 12 15 18 21
5 4 4 8 12 16 20 24 28
i j M[i][j] = (i - 1) * (j – 1)
2 2 M[2][2] 1 = (2 - 1) * (2 – 1)
3 M[2][3] 2 = (2 - 1) * (3 – 1)
4 M[2][3] 3 = (2 - 1) * (4 – 1)
3 2 M[3][2] 2 = (3 - 1) * (2 – 1)
3 M[3][3] 4 = (3 - 1) * (3 – 1)
4 M[3][3] 6 = (3 - 1) * (4 – 1)
4 2 M[4][2] 3 = (4 - 1) * (2 – 1)
3 M[4][3] 6 = (4 - 1) * (3 – 1)
4 M[4][4] 9 = (4 - 1) * (4 – 1)
Programa Principal
Inicio
Entero: M[10][10],n
Imprima: “¿Hasta qué número quiere generar las tablas de multiplicar?”
Lea: n
Crear_Matriz(M,n)
Tabla_Multiplicar(M,n)
Imprimir(M,n)
Fin
Subprograma: Crear_Matriz( )
Subprograma: Tabla_Multiplicar( )
Subprograma: Imprimir( )
Ejemplo 7
a. Definición
b. Análisis
Datos de entrada
o A[ ] : Matriz A
o N,M : Dimensiones de la matriz A
o B[ ] : Matriz B
o P, Q : Dimensiones de la matriz B
Datos de proceso
o sum=sum+A[i][j] * B[i][j]: Multiplicación de los elementos de la matriz
o R[i][j] = sum : Conformación de la matriz resultante
Datos de salida
Otras variables:
c. Pseudocódigo
Inicio
Entero: A[10][10],B[10][10],R[10][10],n,m,p,q,i,j,k,sum
Imprima: “Ingrese el número de filas de la matriz A:?”
Lea: n
Imprima: “Ingrese el número de columnas de la matriz A:?”
Lea: m
Imprima: “Ingrese el número de filas de la matriz B:?”
Lea: p
Imprima: “Ingrese el número de columnas de la matriz B:?”
Lea: q
Si (m <> p) entonces
Imprima: “Las matrices no se pueden multiplicar, <m <> p>”
Sino
Para (i = 1, n, 1) Haga
Para (j = 1, m, 1) Haga
Imprima: “Ingrese un valor en la posición A[”, i “,” j ”]:”
Lea: A[i][j]
FinPara
FinPara
Para (i = 1, p, 1) Haga
Para (j = 1, q, 1) Haga
Imprima: “Ingrese un valor en la posición B[”, i “,” j ”]:”
Lea: B[i][j]
FinPara
FinPara
Para (i = 1, n, 1) Haga
sum =0
Para (j = 1, q, 1) Haga
Para (k = 1, m, 1) Haga
sum= sum + A[i][k]*B[k][j]
FinaPara
FinaPara
R[i][j]=sum
FinPara
Para (i = 1, n, 1) Haga
Para (j= 1, q, 1) Haga
Imprima: R[i][j]
FinPara
FinPara
FinSi
Fin
d. Prueba de escritorio
Resultados en Memoria
A B R
1 2 3 1 2 1 2
1
3 2 1 1
4 2 1
16 19
2
1 4 3 * 2
1 6 = 2
14 29
2X3 2 1 2X2
3
Nxm nxq
3X2
pxq
i <= 2 j <= 2 k <= 3 sum = A[i][k]*B[k][j]
0
1 1 1 12 12= A[1][1]*B[1][1]
2 14 2= A[1][2]*B[2][1]
3 16 2= A[1][3]*B[3][1]
0
2 1 6 6= A[1][1]*B[1][2]
2 18 12= A[1][2]*B[2][2]
3 19 1= A[1][3]*B[3][2]
0
2 1 1 4 4= A[2][1]*B[1][1]
2 8 4= A[2][2]*B[2][1]
3 14 6= A[2][3]*B[3][1]
0
2 1 2 2= A[2][1]*B[1][2]
2 26 24= A[2][2]*B[2][2]
3 29 3= A[2][3]*B[3][2]
Programa Principal
Inicio
Entero: A[10][10],B[10][10],R[10][10],n,m,p,q
Imprima: “Ingrese el número de filas de la matriz A:?”
Lea: n
Imprima: “Ingrese el número de columnas de la matriz A:?”
Lea: m
Imprima: “Ingrese el número de filas de la matriz B:?”
Lea: p
Imprima: “Ingrese el número de columnas de la matriz B:?”
Lea: q
Si (m <> p) entonces
Imprima: “Las matrices no se pueden multiplicar, <m <> p>”
Sino
Crear_Matriz(A,n,m)
Crear_Matriz(B,p,q)
Mult_Matrices(A,n,m,B,p,q,R)
Imprimir(R,n,q)
FinSi
Fin
Subprograma: Crear_Matriz( )
Subprograma: Mult_Matrices( )
Subprograma: Imprimir( )
Actividad 1:
Competencias a desarrollar:
Ejemplo 6´756.420*******
Imprimir: Seis Millones Setecientos Cicuenta y Seis Mil Cuatro Cientos Veinte Pesos M/L.
Actividad 2:
Competencias a desarrollar:
Descripción Actividad: Una empresea desea que usted desarrolle un programa que
permita calcular la nómina quincenal de sus 20 empleados. Los datos de los empleados
son almacenados en la siguiente forma:
• Las horas menores o iguales a 96 se pagan al Valor Hora asignado a cada empleado.
• Las horas superiores a 96 se consideran como Horas Extras y se pagan al doble del
Valor Hora asignado a cada empleado.
• A cada empleado se le hace un descuento del 12% sobre su salario básico:
SalBas = HorT*ValHT (es decir, horas trabajadas * valor de la hora, NO incluye el valor
de las horas extras)
• A cada empleado se le da un subsidio de transporte de 15.000 pesos.
• Adicionalmente, cada empleado recibe una bonificación adicional de 20.000 pesos por
cada hijo que tenga.
a. Valor pagado por salario neto, salario básico, descuento, bonificación por cada
empleado.
b. Valor total pagado por salarios netos, valor horas extras, y bonificaciones de todos los
empleados.
c. Código del empleado que más gana y código del que menos gana.
d. Además, desea que ordene e imprima ascendentemente los salarios netos de cada
empleado.
Taller
Diseñe un algoritmo para cada uno de los problemas planteados, con su respectiva
prueba de escritorio.
1. Desarrollar un algoritmo que permita determinar los tres valores que más se repiten en
un vector de n elementos, además imprima el número de veces que se presenta cada
valor.
4. Se desea crear un vector con un párrafo que es ingresado por teclado, dicho párrafo
termina con el caracter de punto. Desarrolle un algoritmo que determine lo siguiente:
- Número total de preposiciones: a, con, de.
- Númeto total de determinantes artículos: el, la, los, las , un, una.
- Número total de espacios en blanco.
- Número total de palabras que no sean preposiciones ni artículos.
- Número de palabras que comiencen con: e (elefante), c (casa), u (uña), que
no sean preposiciones ni artículos.
- Número total de vocales.
n
X [i]2i+1
∑
i =1 (2i + 1)!
Para n > 0
6. Dado un vector “V1” de n enteros positivos en base (10 , elaborar un algoritmo que
permita crear un nuevo vector “V2” el cual deberá contener el correspondiente Octal
de cada uno de los valores de “V1”.
7. Dado un vector “V1” de n enteros positivos, elaborar un algoritmo que permita crear
un nuevo vector “V2” el cual debe contener el correspondiente valor inverso de cada
posición de “V1”.
8. Dado un vector “V1” compuesto por N valores enteros positivos entre 1 y 100,
elaborar un algoritmo que permita crear un nuevo vector “V2” el cual deberá contener
el correspondiente Binario de cada valor decimal de “V1”.
9. La liga de Antioquia tiene almacenado los datos de una serie de deportista en tres
vectores, así:
La liga desea contratar sus servicios para desarrollar un programa, que permita
seleccionar los deportitas que jugarán los próximos torneos, según los siguientes
criterios:
Clasifican:
- Todos los deportistas cuya estatura sea mayor al promedio de todas las estaturas,
siempre y cuando su edad no sea mayor a 25 años.
- Todos los deportistas cuya estatura sea igual al promedio de todas las estaturas,
siempre y cuando su edad no sea menor o igual a 20 años.
Por ejemplo:
Por ejemplo:
Por ejemplo:
res 236 3004 1345 3687 2967
Nota: recuerde que los enteros (int) sólo se pueden almacenar valores
comprendidos en el rango: (-32767 a +32768), por lo tanto, en cada posición
únicamente se pueden almacenar máximo 4 dígitos.
Se sabe que:
a11 a12 a13
Det (A) = a21 a22 a23 = a11a22a33 + a12a23a31+ a21a32a13 - a13a22a31 - a12a21a33 – a32a23a11
a31 a32 a33
12. Dada una matriz X de dimensiones NxN, desarrollar un algoritmo que intercambie los
valores de la triangular inferior con los de la triangular superior.
13. Dada una matriz A de dimensiones NxN, elaborar un algoritmo que permita calcular la
inversa de dicha matriz.
14. Dadas tres matrices A, B y C de diemensiones 3x3, diseñar un algoritmo para que
calcule:
a. A + B – C
b. 3*A + C/2
c. (A * B) / C
15. Dada una matriz de dimensiones NxM, se desea contruir tres nuevos vectores, así:
16. Desarrollar un algoritmo que ordene todos los valores de una matriz ascendente, no
esta permitido llevar los elementos de la matriz a otro medio de almacenamiento para
ordenarlos y luego traerlos de vuelta.
17. Crear una matriz con valores reales, diseñe un programa que cree un menú con las
siguientes opciones:
MENÚ
1. Moda Debe calcular e imprimir la moda de los valores de la matriz
2. Varianza Debe calcular e imprimir la varianza de los valores de la matriz
3. Media Debe calcular e imprimir la media de los valores de la matriz
18. El instituto del medio lleva un registro sobre las temperaturas que se producen a diario
en la ciudad durante los doce meses del año, dichas temperaturas son almacenadas
en una matriz de 12x31 (doce meses por 31 días), se desea crear un programa que:
a. Calcule el promedio de temperatura de cada mes (complete con cero (0) para los
meses que tienen 29 o 30 días). Nota: para calcular el promedio se debe tener en
cuenta el número de días reales del mes.
b. Imprima el mes (en letras) más caliente y el de temperatura más baja.
c. Imprima los dias con su mes (en letras), en el cual la temperatura estuvo por
encima al promedio.
19. Un restaurante almacena las ventas diarias totales de sus meseros en una matriz de
10X7 (diez meseros por siete días de la semana). El restaurante paga a sus meseros
una comisión que depende del valor total de las ventas realizadas en el día, según la
siguiente tabla:
20. Crear una matriz A de dimensiones NxM con valores enteros que son ingresados por
el usuario, se desea construir un algoritmo que copie todos los valores de la matriz a
un vector, luego los ordene de la siguiente manera:
a. Los valores pares deben quedar en la primera mitad del vector (ordenados
ascendente mente).
b. Los valores impares deben quedar en la segunda mitad del vector (ordenados
ascendentemente).
Autoevaluación
1 5
A= 2 3
4 6
3x2
2 4
B=
3 1
2x2
C=
Desarrollar un algoritmo que elimine el valor que más se repite en un vector de n valores
enteros positivos.
Respuestas Autoevaluación
R/=1. A. ososos
R/=2. C. 8
R/=7. D. 4,2,8,4,12
R/=10.
17 9
C= 13 11
26 22
Solución Algoritmo:
Análisis:
Otros datos:
j : Indice para recorrer el vector al momento de eliminar
aux : Variable auxiliar para intercambiar los valores
max : Máximo de veces que se repite el valor
sw : Suiche utilizado con la finalidad de que el programa
termine una vez se elimina el valor más repetido.
Algoritmo:
Inicio
Entero: vec[200],n,cont=1,val,i=1,num,j,aux,max=1,sw=1
Imprima: “Ingrese el tamaño del vector <2 a 200>:”
Lea n
\\Valida el tamaño que se va a llenar, no sobrepase la dimensión del vector (vec[200])
Mientras (n < 2 OR n > 200) haga
Imprima: “Ingrese el tamaño del vector <2 a 200>:”
Lea n
FinMQ
\\Valida que el número sea positivo
Mientras (i <= n) haga
Imprima: “Ingrese un número entero positivo en la posición:”, i
Lea num
Si (num >=0) entonces
vec[i] =num
i=i+1
FinSi
FinPara
Para (i=1, n-1, 1) haga
Para (j=i+1, n, 1) haga
Si (vec[i] > vec[j]) entonces
aux = vec[i]
vec[i] = vec[j]
vec[j] = aux
FinSi
FinPara
FinPara
\\Determina el valor que más se repite
Para (i=1, n-1 ,1) haga
Si (vec[i] = vec[i+1]) entonces
cont = cont + 1
Sino
Si (cont > max) entonces
max = cont
val = vec[i]
FinSi
cont = 1
FinSi
FinPara
\\Elimina el valor que más se repite del vector
i=1, cont=0
Mientras (i < n AND sw=1) haga
Si (val = vec[i]) entonces
Para (j = i, n-1, 1) haga
vec[j] = vec[j+1]
FinPara
n = n -1
cont = cont + 1
Si (cont=max) entonces
sw=0
FinSi
Sino
i = i +1
FinSi
FinMQ
Para (i=1, n ,1) haga
Imprima: vec[i]
FinPara
Fin
Criterios De Evaluación
CUMPLIÓ
CRITERIOS OBSERVACIONES
SI NO
Criterios Generales:
Criterios Específicos:
Evidencia De Desempeño
Bibliografía