Introducción a los Computadores

Anuncio
1
INTRODUCCIÓN
La principal habilidad que identifica al Ingeniero de Sistemas, es su capacidad de
abstracción y síntesis frente a un problema de la vida real. Esta capacidad se
manifiesta en el proceso de análisis del caso, detección de los procedimientos
principales, representación de estos procedimientos mediante estructuras de control
predefinidas, y finalmente la presentación de una solución lógica al problema, fácil
de programar o implementar en cualquier lenguaje o herramienta software,
disponible en el mercado.
Este texto presenta en forma gradual y ordenada, de acuerdo con el desarrollo del
curso de Introducción a los Computadores, una serie de ejercicios que le permiten al
estudiante desarrollar progresivamente, las habilidades básicas del Ingeniero de
Sistemas.
Por cada uno de los temas desarrollados en el curso de Introducción a los
Computadores, se presentan una serie de ejercicios, claramente explicados y
solucionados, que facilitan la asimilación y puesta en práctica de los conocimientos
impartidos en dicho curso.
Adicionalmente al diagrama de flujo que soluciona el problema planteado, se
presenta la codificación de dicho diagrama, utilizando un seudocódigo en español,
muy semejante al lenguaje Pascal, con el fin de facilitar al estudiante su tránsito hacia
la programación en un lenguaje formal.
En forma complementaria, se presenta solo el enunciado de algunos ejercicios, para
que el estudiante los solucione por su cuenta, y así poder confrontar su progreso en
los conocimientos impartidos, o los vacíos que le han quedado al final de cada tema
desarrollado.
2
PRESENTACIÓN
Siguiendo la estructura del curso de Introducción a los Computadores, los ejercicios
y problemas de este texto serán agrupados por temas, y presentados en forma
progresiva de acuerdo a su dificultad.
PRIMERA PARTE
La primera parte contiene los ejercicios correspondientes a las estructuras de control
básico a saber:
Página
Estructuras de control lineal
........................... 06
Estructuras de control de selección
........................... 07
- Completa
- Incompleta
Estructura de control de repetición
.............................09
- Hacer mientras
- Repetir hasta
- Para
...............................................................24
Con estas herramientas se desarrolla la primera parte del texto.
3
SEGUNDA PARTE
La segunda parte se refiere a la aplicación de las anteriores herramientas, en el
manejo de arreglos.
Página
• Manejo de subíndices en una dimensión. (Vectores).......... 37
• Manejo de subíndices en dos dimensiones. (Matrices)....... 52
Finalmente se presentan ejercicios que combinan todas las herramientas estudiadas
en el curso.
A lo largo del desarrollo de este texto, se presentan cuarenta y tres (43) ejercicios
totalmente explicados y solucionados en forma didáctica, junto con su respectivo
diagrama de flujo y programa en seudocódigo.
Adicionalmente se presentan doce (12) ejercicio que se dejan propuestos, cada uno
en su correspondiente sección, para que el estudiante los solucione por su propia
cuenta.
4
5
ESTRUCTURAS DE CONTROL LINEAL
Ejercicio:
Hacer el diagrama y el programa en seudocódigo que lea cuatro datos: El código de
un estudiante y las notas de los tres previos de una materia cualquiera; y que calcule
e imprima la nota final de la materia, junto con el código del estudiante.
Solución:
Variables de entrada: cod = código del estudiante, notal = nota del primer previo,
nota2 = nota del segundo previo, nota3 = nota del tercer previo.
Variables de proceso: notafin = nota final del estudiante.
Teniendo en cuenta que esta estructura de control es la más sencilla, considera que un
solo ejemplo es suficiente.
6
ESTRUCTURAS DE CONTROL DE SELECCIÓN
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea el número de cédula y el
salario bruto de un empleado. Que calcule su salario neto sabiendo que si gana más
de $500.000 pesos se le hace un descuento del 10%, de lo contrario solo se le
descuenta el 5%. Se debe imprimir: la cédula, el salario bruto, el descuento y el
salario neto.
Solución:
Variables de entrada: cc = cédula de ciudadanía, sb = salario bruto.
Variables de proceso: des = descuento, sn = salario neto.
7
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea tres números diferentes, (a,
b, y c), y que averigüe e imprima cuál es el mayor, junto con el comentario: el mayor
es ___ .
Solución:
Variables de entrada: a, b y c = corresponden a los tres números.
Variables de proceso: no se crea ninguna variable, pues el proceso se limita a hacer
comparaciones entre los datos leídos, y a imprimir los resultados.
8
ESTRUCTURAS DE CONTROL DE REPETICIÓN
Inicialmente estudiaremos dos estructuras: Hacer Mientras y Repetir Hasta, las
cuales se utilizan cuando el número de ciclos de repetición no se conoce, y
generalmente depende de una condición inherente al problema.
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea un capital C, y que
averigüe e imprima en cuántos meses se duplica, si lo colocamos a un interés
compuesto del 5% mensual.
Solución
Variables de entrada : C = capital leído
Variables de proceso : B = el doble del capital, n = número de meses
9
Ejercicio:
Una pelota se deja caer desde una altura H, y en cada rebote sube el 10% menos del
anterior. Hacer el diagrama y el programa en seudocódigo, que lea H, y que calcule e
imprima en cuál rebote la pelota no alcanza a subir la quinta parte de la altura inicial.
Solución:
Variables de entrada: H = altura inicial
Variables de proceso : Q = quinta parte de la altura. n = número de rebotes
10
Ejercicio:
En 1980 la ciudad A tenía 3.5 millones de habitantes y una rata de crecimiento del
7% anual; y la ciudad B tenía 5 millones y una rata de crecimiento del 5% anual. Si
el crecimiento poblacional se mantiene constante en las dos ciudades, hacer el
diagrama y el programa que calcule e imprima en qué año la población de la ciudad
A es mayor que la de la ciudad B.
Solución
Como todos los datos se encuentran definidos en el enunciado, no se requiere leer
ninguna información, solo asignar los tres datos iniciales a las respectivas variables
así: A = población de la ciudad A , B = población de la ciudad B , n = año inicial
(1980).
11
REGISTRO CENTINELA
Se dice que un ejercicio utiliza el Registro Centinela, cuando el último dato de
entrada tiene características especiales, es decir se diferencia de todos los demás, de
modo tal que puede ser utilizado para determinar cuándo termina el proceso
repetitivo que involucra la entrada de datos.
Ejercicio:
Vamos a hacer de nuevo el primer ejercicio ( Pag. 6 ), de modo tal que se pueda
utilizar para más de un estudiante, y que informe cuantos perdieron la materia.
Hacer el diagrama y el programa en seudocódigo que por cada estudiante lea el
código y las notas de los tres previos de una materia, y que calcule e imprima el
código y la nota final de cada estudiante. No sabemos cuantos estudiantes son, pero
después de la información del último, se introducen ceros en el campo
correspondiente al código, de modo tal que sirva como Centinela, para indicar
cuando terminan los datos de entrada. También se debe informar al final cuántos
estudiantes perdieron la materia.
Solución:
Utilizaremos la estructura Hacer Mientras, efectuando la primera lectura fuera del
ciclo repetitivo, y las demás dentro de él, antes de retomar.
Para llevar la cuenta de cuántos estudiantes perdieron la materia, utilizaremos la
variable con, la cual servirá como contador. Este tipo de variables se inicializa en
ceros fuera del ciclo repetitivo, y se incrementan dentro de él, en este caso de a uno
en cada ciclo ( con = con +1).
12
Diagrama y programa
13
División entera: Se indica mediante corchetes, y su función es truncar la parte
decimal. Ej: d = [ 27 / 5 ], entonces d = 5 .
Resto: Es el número equivalente a la parte decimal truncada.
Ej: r = 27 - ( d * 5 ), entonces r = 2 .
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea números enteros y
positivos (uno en cada lectura), y que averigüe e imprima cuántos son pares y
cuántos son impares. Para terminar utilizaremos el registro centinela, cuando el valor
del número leído sea cero.
Solución:
Variables de entrada: n = número leído.
Variables de proceso:
Se requieren dos contadores ( par e impar ), los cuales se inicializan en cero fuera
del ciclo, y se incrementan en uno, cada vez que se encuentre un número de su clase
(par o impar).
d = resultado de la división entera entre el número n y 2.
r = resto de la división entera.
14
Diagrama y programa:
15
Ejercicio:
Hacer el diagrama y el programa que lea un número entero, n , positivo de cuatro
dígitos, que calcule su número inverso, y que lo imprima junto con el número leído.
Ej: n =1234, entonces su número inverso es ni = 4321.
Solución:
Variables de entrada: n = número leído
Variables de proceso: d1 , d2 , d3 y d4 = corresponden a cada uno de los dígitos del
número leído, rl y r2 = son el resto de las primeras dos divisiones enteras. ni = es el
número inverso calculado.
16
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea un número ( n ), entero y
positivo, de cualquier número de dígitos, que calcule la suma de sus dígitos y que la
imprima junto con el número leído.
Ej: n = 53471, entonces la suma de sus dígitos es sum = 20.
Solución: Como no se conoce el número de dígitos, utilizaremos divisiones enteras
por 10, en forma sucesiva, hasta que el resultado de la última sea cero.
Variables de entrada: n = número leído.
variables de proceso: m == copia del número leído, para imprimirla al final, ya que el
valor de n se modifica durante el proceso, d = resultado de la división entera, r =
resto de la división entera, sum = suma de los dígitos.
17
Ejercicio:
Hacer el diagrama y el programa en seudocódigo que lea un número entero y
positivo, de cualquier número de dígitos, que le calcule su número inverso, y que lo
imprima Junto con el número leído.
Solución:
Al igual que en el anterior ejercicio, utilizaremos las divisiones enteras sucesivas por
10, recortando en cada ciclo el valor de n en su última cifra, y terminando cuando el
valor de n sea cero.
Variables de entrada: n = número leído.
Variables de proceso: m = copia del número leído. ni = número inverso calculado.
d = resultado de la división entera. r = resto de dicha división.
18
Ejercicio
La Serie de Fibonacci es una secuencia numérica, en la cual cada elemento es la
suma de los dos anteriores, así: 0,1,1,2,3,5,8,13,21, .... etc.
Tomando como variables iniciales los dos primeros elementos, a = O , y b = 1 , hacer
el programa y el diagrama en seudocódigo, que calcule e imprima, a partir del
tercero, todos los elementos de la Serie de Fibonacci que sean menores de mil.
Solución:
En este ejercicio todos los datos están definidos en el enunciado, por lo tanto se
requiere leer información.
Las variables a utilizar son: a = 0 , b = 1 , y c = al número calculado.
19
Ejercicio:
El cajero de un banco solo dispone de billetes de $10.000, $2.000 y $100. Su función
es cambiar los cheques a los clientes, dándoles el menor número posible de billetes.
Asumiendo que todos los cheques son múltiplos de $100, hacer el diagrama y el
programa que reciba el valor del cheque a cambiar y que le informe al cajero cuantos
billetes de cada denominación debe entregar, Como no se sabe cuantos clientes
vienen en un día, el programa debe terminar cuando reciba ceros como valor del
cheque, y al final del día debe informar cuántos billetes de cada denominación se
gastaron.
Solución: variables a utilizar: CH = valor cheque,
Bl = Billetes de $10.000,
B2 = Billetes de $2.000, B3 = Billetes de $100. TB1 = Total billetes de $10.000,
TB2 = Total billetes de $2.000, y TB3 = Total billetes de $100.
20
Ejercicio:
Tenemos la información de un grupo de estudiantes de la UIS, no sabemos cuantos.
Por cada uno de ellos hay un registro que contiene el Código, la Edad y el Promedio
Acumulado. El último registro trae grabados ceros en el Código. Hacer el diagrama y
el programa en seudocódigo que imprima el código, la edad y el promedio
acumulado de los estudiantes de Sistemas mayores de 21 años que estén
condicionales, también debe imprimir al final cuántos son. Asuma que el código de
la carrera de sistemas es 11.
Solución:
Este es un caso de Registro Centinela, donde el valor de código es el que define
cuándo se terminan los datos de entrada, por lo tanto utilizaremos la estructura de
control Hacer Mientras. Como el código de la carrera que estudia el alumno se
encuentra en los dos dígitos centrales ( tercero y cuarto ) del código del estudiante, se
utiliza la división entera y el Resto, para separarlos.
Variables de estrada :
cod = código del estudiante,
pro = promedio del estudiante.
ed = edad del estudiante,
Variables de proceso: con = contador que llevará la cuenta de los estudiantes
condicionales que solicita el problema. d = resultado de la división entera. r = resto
de la división entera. ca = código de la carrera que cursa el estudiante.
En la siguiente página se presenta el diagrama de flujo que soluciona este problema,
y el respectivo programa en seudocódigo.
21
Diagrama y Programa:
22
Ejercicios propuestos:
1. Hacer el diagrama y el programa en seudocódigo que lea números enteros y
positivos (uno en cada lectura), y que averigüe e imprima: a) Los números cuya suma
de dígitos sea impar , y decir cuántos, b) Los números que terminen en siete ( 7 ), y
cuántos, c) Todos los números que tengan más de cuatro dígitos.
Como no sabemos cuántos números se van a procesar, el programa debe tener en
cuenta que el último número leído debe ser cero.
2. Pedro tiene un capital de cl pesos, y Juan uno de c2 pesos. Uniendo los dos no les
alcanza para hacer un negocio que requiere una inversión de c3 pesos. Deciden
colocar cada uno su capital a ganar interés. Pedro lo colocó a un interés compuesto
del 3% mensual, y Juan al 4% mensual. Hacer el diagrama y el programa que
averigüe e imprima en cuantos meses, uniendo los dos capitales, pueden hacer el
negocio que desean.
3. Tenemos la información de las personas mayores de edad que viven en un barrio
X. Por cada una de ellas hay un registro con tres datos: el nombre, la edad y el sexo
(H=hombre, M=mujer). No sabemos cuantos son, pero en el último registro el campo
edad es igual a cero. Hacer el diagrama y el programa que averigüe e imprima:
a) Cuantos hombres y cuantas mujeres hay en el barrio, b) El nombre y la edad de
todas las ancianas (mayores de 70 años), y cuantas hay en el barrio.
23
Estructura de Repetición PARA.
Esta estructura se utiliza cuando conocemos de antemano el número de ciclos que se
van a necesitar, para solucionar el problema planteado.
Ejercicio:
Hacer el diagrama y el programa en seudocódigo, que lea cien números enteros (uno
en cada lectura), y que averigüe e imprima cuántos son pares y cuántos son impares.
Solución:
Este ejercicio ya se hizo anteriormente (página 14), solo que allí no sabíamos cuantos
números se iban a procesar. Ahora ya sabemos que son cien, por lo tanto podemos
utilizar un ciclo repetitivo PARA , de uno a cien, con incrementos de a uno, de modo
tal que permita leer y procesar todos los datos de entrada. Utilizaremos las mismas
variables del ejercicio anterior, mas una nueva llamada i, la cual será usada por el
PARA como el indicador de ciclos.
Compare las dos soluciones.
24
Ejercicio:
Hacer el diagrama y el programa que averigüe e imprima cuántos múltiplos de siete,
y cuantos múltiplos de nueve hay en los números comprendidos entre el 1000 y el
5000.
Solución:
A diferencia del ejercicio anterior, en el cual la variable i del Para, solo cumplía la
función de hacer que el ciclo se repitiera 100 veces, en este caso cumple dos
funciones, pues además de servir para que el ciclo se repita cierto número de veces,
los valores que tome la variable i son los que se van a procesar dentro del ciclo
repetitivo.
Debido a que todos los datos se encuentran explícitos en el enunciado, no hay
necesidad de leer ninguna información.
Las variables a utilizar son:
m7 = contador de los números múltiplos de 7.
m9 = contador de los números múltiplos de 9.
i = variable del Para que tomará uno a uno los valores de los números comprendidos
entre 1000 y 5000.
d = resultado de la división entera.
r = resto de dicha división.
Note que utilizaremos las mismas variables, d y r , tanto en el proceso de cálculo de
los múltiplos de siete, como en el de los múltiplos de nueve. Esto se debe a que
después de cada proceso, esos valores no se necesitan mas.
El diagrama de flujo y el programa en seudocódigo que solucionan este ejercicio se
presentan en la siguiente página.
25
Diagrama y Programa.
26
Ejercicio:
Hacer el diagrama y el programa que calcule e imprima la sumatoria de los primeros
veinte términos de la siguiente serie:
1/3 , 2/5 , 9/7 , 64/9 , 625/11 ,............ etc.
Solución:
Primero hay que deducir la secuencia a la cual equivale la serie, y luego establecer la
fórmula que la representa así:
10 , 21 , 32 , 43 , 54 , . . . , 2019 . Esto equivale a la fórmula nn-1
3 5 7 9 11
41
2n-1
Como podemos ver, se debe crear una secuencia en la cual la variable n tome los
valores desde uno hasta 20, y se utiliza la fórmula deducida para calcular cada
término y sumarlo en el acumulador sum.
27
Ejercicio:
Hacer el diagrama y el programa que lea un número entero y positivo, que le calcule
su factorial y que lo imprima junto con el número leído.
Ej: El factorial de cinco == 5! = 5x4x3x2x1 = 2x3x4x5 =120
En general N! = 2x3x4x5x6x7x .... xN
Solución:
Como podemos damos cuenta, después de leer el número N , debemos generar una
variable que tome los valores 2, 3, 4, 5,... N, esto se hace con un Para, y en cada valor
se debe multiplicar con el acumulado de productos anteriores.
Utilizaremos la variable fac como acumulador de productos, el cual a diferencia del
acumulador de sumas o contador, se debe inicializar con el valor de uno, fuera del
ciclo, ya que durante el proceso se actualiza a sí mismo con la instrucción
fac = fac*i, donde i es la variable del Para.
28
Ejercicio:
Hacer el diagrama y el programa que lea dos números enteros y positivos, N1 y N2 ,
donde N2 es mayor que N1 . Que calcule el factorial de los números comprendidos
entre ellos, incluyéndolos, y lo imprima junto con el número correspondiente.
Solución:
Se dice que hay Ciclos Anidados, cuando un Para externo, contiene uno o más Paras
internos. En estos casos se debe tener el cuidado de utilizar diferente nombre de
variable en cada uno de los Paras anidados.
Una forma de solucionar este ejercicio, es utilizando dos Paras anidados, uno externo
que se encarga de generar los números entre N1 y N2 , y otro interno que se utiliza
para calcular el factorial del número generado en el Para externo.
Variables de entrada : N1 = límite inferior. N2 = límite superior.
Variables de proceso : M = indicador del Para externo, que varía entre N1 y N2 .
fac = almacena el valor del factorial . i = indicador del Para interno, que varía entre 2
yM.
29
Ejercicio:
Generalmente los ejercicios tienen varias soluciones, y en la mayoría de los casos
una es más eficiente que las otras. Veamos este ejemplo.
Si tenemos en cuenta que el factorial de N es igual al factorial de N-l multiplicado
por N, ( ej: 6! = 5! x 6 ), la solución planteada en el anterior ejercicio, aunque luce
aparentemente clara y sencilla, es muy ineficiente cuando N1 y N2 son números
grandes. Por ejemplo, si N1 = 50000, para calcular su factorial hay que hacer casi
50000 multiplicaciones, pero si ya tenemos ese valor calculado, solo se requiere una
multiplicación mas para calcular el factorial de 50001, y no como en la solución
anterior, donde se realizan otras 50000 multiplicaciones, y así sucesivamente con
cada uno délos números siguientes.
Vamos a hacer nuevamente el ejercicio anterior, teniendo en cuenta esta
optimización
30
Ejercicio:
El número de combinaciones de m elementos, tomados en grupos de n , está dado por
la fórmula:
C = m! / ( n! ( m-n )! )
Hacer el diagrama y el programa que lea m y n , que calcule C y qué imprima los tres
datos.
31
Ejercicio.
En el plano cartesiano, tenemos un círculo de radio R y centro en el origen, y una
recta (Y=AX+B) que lo corta. Disponemos de 101 registros de entrada de datos, en el
primero vienen grabados los tres datos básicos del ejercicio, A , B , y R . En cada uno
de los cien siguientes vienen grabados dos datos, que corresponden a las coordenadas
( X y Y), de un punto en el plano.
Hacer el diagrama y el programa que leyendo los datos básicos (R, A y B), imprima
por cada uno de los 100 puntos, los valores de X y Y, y el indicador Pl, P2,....... o P6,
de acuerdo con las siguientes instrucciones:
Pl: Cuando el punto esté sobre la recta y dentro del círculo.
P2: Cuando el punto esté sobre la recta y sobre el círculo.
P3: Cuando el punto esté sobre la recta y fuera del círculo.
P4: Cuando el punto esté fuera de la recta y dentro del círculo.
P5: Cuando el punto esté fuera de la recta y sobre el círculo.
P6: Cuando el punto esté fuera de la recta y fuera del círculo.
Solución:
Podemos ver que por cada punto leído hay que analizar dos situaciones, una si está o
no sobre la recta y la otra si está dentro, sobre o fuera del círculo.
Para la primera situación solo basta reemplazar la X y la Y leídas en la ecuación
Y = AX + B , y si la igualdad se cumple, el punto estará sobre la recta, de lo
contrario estará fuera de ella.
Para la segunda situación la clave está en averiguar la distancia del punto leído al
origen, utilizando Pitágoras, y comparar esta distancia con el radio del círculo, así
podemos deducir si esta dentro, sobre o fuera de él.
En la página siguiente presentamos la gráfica del problema claramente explicada, el
diagrama de flujo y el programa en seudocódigo que solucionan este ejercicio.
32
Gráfico, Diagrama y Programa
33
Ejercicio:
Hacer el diagrama y el programa que lea un número N , entero y positivo, y que
averigüe e imprima si es o no número Primo.
Solución:
Un número es Primo, cuando solo es divisible por si mismo y por la unidad, en otras
palabras, cuando no es divisible por ningún número menor que él, excepto el 1. Por
lo tanto, hacemos un ciclo repetitivo Para, con la i variando desde 2 hasta N-l, y
probamos si el número es divisible por i.
Es bueno resaltar el uso de la variable sw (switch), la cual sirve para controlar si al
menos una vez, N fue divisible por la variable i , lo que significaría que no es número
Primo. Este control se debe implementar, debido a que el punto de salida del Para es
el mismo en los dos casos, y solo el estado de la variable sw nos indica si N es o no
número Primo, ya que si sw, después del Para, mantiene el mismo valor con que fue
inicializada, significa que ninguno de los valores numéricos que tomó la variable i
fue divisor de N , o sea que N es un número primo.
34
Ejercicios Propuestos:
1. Optimizar el ejercicio anterior, teniendo en cuenta que cuando N es muy grande,
se pueden ahorrar muchas operaciones para saber si es o no número Primo, por
ejemplo:
Considerando que todos los números pares (excepto el 2), no son números Primos,
nos evitamos la mitad del trabajo si hacemos esta prueba primero. Si el número es
impar, nunca será divisible por un número par, por lo tanto podemos ahorrar trabajo
si los divisores son solo los números impares. Esto se hace con un Para que inicia en
3 y tiene incrementos de a 2. Si tenemos en cuenta, que una vez el divisor sea mayor
que la mitad de N, es imposible que lo divida en forma exacta, entonces el Para debe
ir desde 3 hasta ( N/2), de a dos en dos. Finalmente, cuando N sea divisible por
primera vez, ya no es número Primo, y no hay necesidad de seguir probando por los
números que falten, por lo tanto después de la instrucción sw = 1, incrementamos la i
hasta más allá de su límite (i == N), y así terminaremos el ciclo repetitivo.
2. Tenemos 100 registros, en cada uno vienen tres datos a , b y c , que corresponden
a los coeficientes de la ecuación cuadrática ax2 + bx + c = 0 . Hacer el diagrama y el
programa que calcule las raíces XI y X2 , y las imprima junto con los respectivos
coeficientes. Cuando las raíces sean imaginarias, solo debe imprimir los respectivos
coeficientes y el comentario " raíces imaginarias", y al final informar en cuantos
casos se presentaron raíces imaginarias.
3. Suponga que en la UIS hay 5000 estudiantes. Por cada uno de ellos tenemos un
registro con el Código, el Nombre y el Promedio Acumulado. Hacer el diagrama y el
programa que: a) Imprima el Código y el Nombre de los estudiantes de sistemas
(código 11), que tengan promedio acumulado igual o mayor a 4.0, y cuántos fueron,
b) Imprima el código y el nombre de los estudiantes que ingresaron a la UIS antes de
1990, y que estén condicionales, decir cuantos fueron.
35
SEGUNDA PARTE
MANEJO DE ARREGLOS
Vectores y Matrices
36
MANEJO DE SUBÍNDICES EN UNA DIMENSIÓN (VECTORES).
Ejercicio:
Una empresa tiene 250 empleados, por cada uno de ellos tenemos un registro que
trae grabado dos datos, el nombre del empleado, y su correspondiente salario
mensual.
Hacer el diagrama y el programa que averigüe e imprima, cuántos empleados ganan
más del promedio salarial de la empresa.
Solución:
Una de las ventajas de los vectores, es permitir almacenar información que se va a
necesitar posteriormente, la cual se perdería si utilizamos variables planas durante el
proceso repetitivo de lectura.
Por ejemplo, en este ejercicio, para calcular el promedio salarial de la empresa
necesitamos leer los 250 registros, y luego comparar este promedio contra cada uno
de los salarios. Esto sería imposible de hacer, si durante la lectura de los 250
registros no guardamos el dato correspondiente a cada salario, de forma tal que
posteriormente lo podamos accesar fácilmente, para compararlo contra el promedio
salarial de la empresa. La forma más sencilla de hacerlo es utilizando un vector o
arreglo S(i) de 250 elementos, que almacene esta información a medida que los va
leyendo.
Variables:
sum = acumula la suma de los 250 salarios, con = contador de los que ganan más
del promedio, nom = nombre del empleado (esta variable no tiene ningún uso, pero
hay que leerla debido a que su información se encuentra antes del dato del salario),
sal = salario del empleado, pro = promedio salarial de la empresa.
S(i) = Vector de 250 elementos donde se almacenará uno a uno a medida que se vaya
leyendo, c/u de los 250 salarios.
37
Diagrama y Programa:
38
Ejercicio:
Hacer el diagrama y el programa que lea un vector A de n elementos, grabados en un
solo registro, que averigüe e imprima cual es el mayor y en que posición se
encuentra, y cual es el menor y en que posición se encuentra.
Solución:
Cuando se dice que los elementos vienen grabados en un mismo registro, para leerlos
y almacenarlos como un vector, se debe utilizar un ciclo repetitivo Para,
exclusivamente para esta función.
La variable n es el primer dato que se lee, pues es el que indica cuantos elementos va
a tener el vector A .
May = el mayor elemento. pl = posición de may . men = el menor elemento.
p2 = posición de men. Inicialmente asumimos que el primer elemento es tanto el
mayor como el menor.
39
Ejercicio:
Hacer el diagrama y el programa que lea un vector A de n elementos, grabados en un
solo registro. Estos elementos son números enteros y positivos. Debe crear dos
nuevos vectores, B y C , de modo tal que en el vector B queden todos los números
impares, y en el vector C todos los múltiplos de 3. Al final debe imprimir los tres
vectores, cada uno en un renglón diferente, de tal forma que todos los elementos de
un vector queden en un mismo renglón.
Solución:
Como no sabemos en qué forma van creciendo los vectores B y C , ni de que tamaño
quedarán, utilizamos dos variables, j y k , que se inicializan en cero, y sirven como
contadores y como subíndices de los dos vectores.
40
Ejercicio:
Hacer el diagrama y el programa que lea un vector A de n elementos,
grabados en un solo registro, y que calcule e imprima el valor de la siguiente
sumatoria:
S = A(l) + A(2) + A(4) + A(7) + A(l 1) + A(16) + A(22) + A(29) + . ... etc.
Solución:
Se debe analizar la forma en que aumenta el subíndice en la sumatoria, y
deducir esa secuencia. En este caso el incremento del subíndice es: +1 , +2 ,
+3 , +4 , . . . etc. Como el incremento del subíndice no es constante, se debe
utilizar un ciclo repetitivo diferente al Para. Utilizaremos el Repetir Hasta,
para controlar el crecimiento del subíndice, que no puede ser mayor al número de
elementos ( n ) del vector.
41
Ejercicio:
En un curso de 70 alumnos, el profesor no hace previos, hace 16 quices en el
semestre. Para calcular la nota definitiva se elimina el peor quiz. Por cada alumno
tenemos un registro que trae grabado el código del estudiante y las 16 notas. Hacer el
diagrama y el programa que calcule la definitiva de cada estudiante y la imprima
junto con el respectivo código, e informe cuántos perdieron la materia.
Solución:
Utilizamos un ciclo repetitivo Para, externo, para controlar la lectura de los 70
registros. Cada registro se lee como un vector A de 17 elementos, y utilizamos un
ciclo repetitivo Para, interno, para eliminar el peor quiz y calcular la definitiva de
cada estudiante.
42
Ejercicio
Los estudiantes de primer nivel de la Carrera X de la UIS, son 90. Asuma que todos
ven las mismas ocho materias. Al final del semestre tenemos 91 registros, con la
información académica de estos estudiantes así: El primer registro trae grabados
ocho datos, que corresponden al creditaje de cada una de las materias, en un orden
preestablecido. Cada uno de los restantes 90 registros, trae grabados nueve datos, que
corresponden al código del estudiante y las ocho notas finales de las materias
cursadas, conservando el mismo orden utilizado en el primer registro.
Hacer el diagrama y el programa que calcule el promedio semestral de cada uno de
los 90 estudiantes y que lo imprima junto con el respectivo código, e informe cuantos
quedaron PFU, y cuantos quedaron condicionales.
El promedio semestral de cada estudiante se calcula de la siguiente forma: La nota
final de cada materia se multiplica por su respectivo creditaje, estos productos se
suman, y el resultado se divide por el total de créditos cursados por el estudiante en
el semestre, que en este caso es igual para todos.
Un estudiante es considerado PFU cuando su promedio acumulado es menor
de 2.60.
Se considera que un estudiante está condicional cuando su promedio acumulado es
menor de 3.20 y no quedó PFU.
Debido a que son estudiantes de primer nivel, el promedio acumulado es el mismo
promedio semestral.
Solución:
El primer registro se lee como un vector A de ocho elementos, y se calcula la suma
de los créditos cursados en el semestre. Con el fin de leer los restantes 90 registros
utilizamos un ciclo repetitivo extemo Para. Cada registro se lee como un vector B de
9 elementos, y utilizamos un ciclo repetitivo interno Para, con el fin de calcular el
promedio semestral.
43
Diagrama y Programa:
44
Ordenamiento de un Vector
Ejercicio:
Hacer el diagrama y el programa que lea dos vectores así: Un vector A de m
elementos que contiene el código de todos los estudiantes que perdieron Calculo I , y
un vector B de n elementos con código de los estudiantes que perdieron Álgebra.
Crear un nuevo vector C con el código de todos los estudiantes que perdieron las dos
materias, ordenarlo de mayor a menor e imprimirlo.
Solución:
Si un estudiante perdió las dos materias, su código debe aparecer en los dos vectores,
por lo tanto debemos comparar cada elemento de un vector con todos los del otro
vector. Esto se hace por medio de dos ciclos anidados, de modo tal que mientras el
índice del ciclo externo identifica un elemento del vector A , el índice del ciclo
interno va recorriendo uno a uno todos los elementos del vector B, comparándolos
con el elemento del vector A. Cuando se encuentre que son iguales, se debe pasar ese
código al vector C. Esto se hace mediante el contador j que se inicializa en cero fuera
de los ciclos, y se incrementa en uno cada vez que aparecen códigos iguales,
entonces se utiliza como subíndice del vector C. Al final de este proceso el tamaño
del vector C estará en el contador j.
Una vez conformado el vector C, debemos proceder a ordenarlo antes de imprimirlo.
Para esto utilizaremos el método de la Burbuja, el cual consiste en comparar el
primer elemento del vector con todos los demás y cada vez que aparezca uno mayor
se pasa a la primera posición, y el que estaba en la primera se pasa a la posición que
ocupaba el elemento que resultó ser mayor. Una vez terminada esta comparación
tendremos en la primera posición el mayor de todos, entonces repetimos el anterior
procedimiento olvidándonos del primer elemento, y partiendo desde el segundo,
luego partiendo desde el tercero, y así sucesivamente hasta ordenar el vector.
Lo anterior se hace mediante dos ciclos anidados, de modo tal que mientras el índice
del ciclo externo se ubica en un elemento del vector, el índice del ciclo interno
recorre los demás elementos comparándolos entre si e intercambiándolos de posición
cuando sea requerido.
45
Diagrama y Programa:
46
Ejercicio:
Hacer el diagrama y el programa que lea un vector A de n elementos. Dichos
elementos pueden ser cualquier clase de carácter. Asuma que el vector tiene muchos
elementos repetidos. El programa debe crear e imprimir un nuevo vector B que
contenga todos los elementos de A, sin que haya repetidos. Por ejemplo, si el
elemento x aparece cinco veces en el vector A, debe aparecer una sola vez en el
vector B.
Solución:
El vector B se inicializa con el primer elemento del vector A, y a medida que va
creciendo, cada elemento de A se compara con todos los de B para ver si ya está
incluido. Esto se logra mediante dos ciclos anidados, donde el ciclo externo maneje
el vector A, y el ciclo interno controle el vector B, teniendo el cuidado que el tamaño
de B es variable. También utilizamos un switch (sw) para detectar si el elemento del
vector A, en estudio, está ya incluido en el vector B, o de lo contrario incluirlo.
47
Ejercicio:
En un curso de 70 alumnos la nota definitiva se calcula así: La nota de quices vale el
10%, el primer previo vale el 20%, el segundo previo vale el 30%, y el tercer previo
vale el 40%. Por cada estudiante hay un registro que trae grabados cinco datos: El
código del estudiante, y las cuatro notas en el orden antes descrito. Hacer el diagrama
y el programa que calcule la nota definitiva de cada alumno y la imprima en forma
ordenada de mayor a menor, junto con el respectivo código.
Solución: Se deben crear dos vectores de 70 elementos. El vector A con los códigos
de los estudiantes, y el vector B con la correspondiente nota definitiva de cada uno,
de modo tal que la nota B(i), sea la del estudiante cuyo código es A(i). Como el
proceso de lectura se debe hacer registro a registro, aprovechamos para calcular la
nota definitiva de cada estudiante, e ir creando los dos vectores. Una vez terminada la
lectura ya tenemos creados los dos vectores, entonces le aplicamos el proceso de
ordenamiento al vector B, teniendo el cuidado de hacer los mismos movimientos en
el vector A.
48
Ejercicio:
Hacer el diagrama y el programa que lea dos vectores: A de m elementos, y B de n
elementos, donde m puede ser mayor, igual o menor que n.
Crear un nuevo vector C de m+n elementos, que sea el resultado de intercalar los
vectores leídos, empezando por A.
Cuando un vector sea mas grande que el otro, los elementos que no alcanzan a ser
intercalados se deben colocar al final del vector C, en el mismo orden que se
encuentren.
El programa debe solucionar satisfactoriamente las tres opciones que se presentan:
m>n , m=n y m<n .
Finalmente debe imprimir el vector C.
Solución:
Para facilitar el trabajo debemos manejar en forma independiente cada una de las tres
opciones que se presentan, por lo tanto la primera acción que se toma, después de la
lectura de los datos, es comparar entre si las variables m y n , o sea los tamaños de
los vectores.
También se debe tener en cuenta que el crecimiento del vector C en independiente
del índice que recorra los vectores A y B , por lo tanto utilizaremos la variable k
como subíndice del vector C , inicializándola en cero antes de las comparaciones, e
incrementándola en dos oportunidades dentro de los ciclos repetitivos de
intercalamiento, ya que en cada ciclo el vector C recibe dos elementos.
Se debe tener en cuenta que cuando m no es igual a n , la parte final de un vector
sobra después del intercalamiento. Esta parte debe ser incluida en el vector C a
continuación del último elemento intercalado, conservando el mismo orden que tenía
en el vector original.
Lo anterior se logra con un simple Para, que va desde m+1 hasta n, cuando n es
mayor que m , o desde n+1 hasta m cuando m es mayor n , y en cada ciclo se
incrementa en uno la variable k , para ser utilizada como subíndice del vector C .
Finalmente imprimimos el vector C , sabiendo que su tamaño es m+n o simplemente
k , ya que estos dos valores deben coincidir.
49
Diagrama y Programa:
50
Ejercicios propuestos:
1. Tenemos n registros, en cada uno de ellos viene grabado un número. Hacer el
diagrama y el programa que calcule e imprima la Desviación Standar ( Y ) de los
números leídos.
2. Juego de Bolos:
Una línea consta de diez turnos(entradas) por jugador. En cada entrada se pueden
hacer un máximo de dos lanzamientos, excepto en la décima que pueden ser tres. En
una línea puede haber un máximo de 21 lanzamientos y un mínimo de 11.
Cálculo del puntaje:
• Si en el primer lanzamiento de una entrada se derriban todos los bolos (diez), se
llama moñona y el puntaje de esa entrada es igual a 10 más los bolos que derribe en
los dos lanzamientos siguientes. En esta entrada no hay mas lanzamientos.
• Si con los dos lanzamientos de una entrada logra derribar todos los bolos (diez), se
llama media moñona , y el puntaje de esa entrada es igual 10 mas los bolos que
derribe en el siguiente lanzamiento.
• Si en los dos lanzamientos de una entrada derriba menos de diez bolos, el puntaje
de esa entrada será igual al número de bolos derribados.
Datos de entrada:
Asuma que los jugadores son 15, y que cada uno jugó una línea. Por cada jugador
tenemos un registro que trae grabados el número de bolos derribados en cada uno de
los n lanzamientos realizados en la línea. Recuerde que n es menor o igual a 21 y
mayor o igual a 11.
Hacer el diagrama y el programa que imprima por cada jugador el resultado de las
diez entradas así: número de la entrada, puntaje de esa entrada, y el acumulado
respectivo.
51
MATRICES
Debido a que la posición dentro de una matriz se define mediante la utilización de
dos subíndices, cuando se necesite recorrer uno a uno sus elementos, se requiere la
utilización de dos ciclos Para anidados, de modo tal que mientras un índice se
desplaza sobre las filas, el otro lo hace sobre las columnas, simulando la secuencia
lógica de los subíndices de cada elemento.
Ejercicio:
Hacer el diagrama y el programa que lea una matriz A de diez filas y 20 columnas.
Los datos vienen grabados en forma de matriz, o sea en diez registros y en cada
registro 20 datos. Los elementos son números enteros positivos. Crear e imprimir dos
vectores así: El vector B que contenga todos los números pares de la matriz A , y el
vector C que contenga los números impares.
52
Ejercicio:
Hacer el diagrama y el programa que lea una matriz A de m filas y n columnas, los
datos vienen grabados en forma de matriz. Calcular e imprimir la suma de cada una
de sus filas, y cada una de sus columnas. Junto con el resultado de la suma imprimir
la palabra fila o columna, y el su número correspondiente.
Solución:
Como m no es necesariamente igual a n, se requiere recorrer dos veces la matriz. La
primera, para calcular la suma de las filas, se hace horizontalmente, o sea que el
Índice del ciclo externo se utiliza para las filas, y el del ciclo interno para las
columnas. Para calcular la suma de las columnas recorremos la matriz verticalmente,
el índice del ciclo externo para las columnas, y el del interno para las filas. Los
resultados se imprimen a la salida del ciclo interno.
53
Ejercicio:
Hacer el diagrama y el programa que lea una matriz cuadrada A de m filas y m
columnas, los datos vienen grabados en forma de matriz. Calcular e imprimir la suma
de: Diagonal Principal (DP), Triangular Inferior (TI), Triangular Superior (TS), y
Diagonal secundaria (DS).
Solución:
Los elementos que conforman cada una de las cuatro áreas de la matriz
solicitadas en el enunciado, tienen su propia característica que los identifican.
Si identificamos las filas de la matriz con la variable i, y las columnas con la variable
k , entonces cualquier elemento de la matriz se identifica A(i,k).
• Los elementos que pertenecen a la Diagonal Principal (DP), tienen la característica
que i = k .
• Los elementos que pertenecen a la Triangular Superior (TS), son los que se
encuentran bajo la Diagonal Principal, y se caracterizan porque i > k.
• Los elementos de la Triangular Inferior (TI), son los que se hallan sobre la Diagonal
Principal, y se caracterizan porque i < k.
• Los elementos de la Diagonal Secundaria (DS), son los que van desde la esquina
superior derecha de la matriz, hasta la esquina inferior izquierda y se identifican
porque i+k= m+1.
De acuerdo con lo anterior, utilizamos los dos ciclos anidados para recorrer la matriz,
uno con la variable i como índice, y el otro con la variable k. Entonces en cada uno
de los ciclos internos comparamos los dos índices y de acuerdo con el resultado
obtenido lo vamos sumando en el correspondiente acumulador.
Durante el proceso de comparación hay que tener en cuenta que los tres primeros
casos son excluyentes, o sea que ningún elemento puede estar en más de uno de
ellos. Solo en el caso de la Diagonal Secundaria se presenta la posibilidad que
cualquiera de sus elementos puede estar en cualquiera de los otros tres casos, por lo
tanto esta última comparación se debe hacer independiente de las otras-
54
Diagrama y Programa:
55
Ejercicio:
Hacer el diagrama y el programa que lea una matriz A de m filas y n
columnas, los datos vienen grabados en forma de matriz. Calcular e imprimir
la suma de todos los elementos periféricos: A(1,1)+A(1,2)+A(1,3)+... + A(l,n) +
A(2,l) + A(2,n) + A(3,l) + A(3,n) + A(4,l) + A(4,n) + ..... + A(m,l) + A(m,2) +
A(m.3) +...+ A(m,n).
Solución:
Esta suma se puede calcular mediante dos pasadas sobre la matriz así: Un primer
ciclo donde el índice se desplaza horizontalmente, o sea con la i desde 1 a n, que se
utiliza para sumar los elementos de la filas 1 y m. Un segundo ciclo que se desplace
verticalmente desde 2 hasta m-1, y se utiliza para sumar los elementos de la columna
1 y n, exceptuando los de las cuatro esquinas, que ya fueron sumados en el anterior
ciclo.
56
Ordenamiento de una matriz
Cuando se está manejando información procedente de un archivo, los datos
contenidos dentro de un mismo registro pertenecen a un mismo elemento, por lo
tanto no se puede perder esa unidad informativa.
Lo anterior puede ocurrir cuando almacenamos dicho archivo como una matriz,
donde cada registro es una fila y cada campo es una columna, e intentamos ordenarla
sin tener en cuenta esta unidad.
Para ordenar correctamente una matriz de, este tipo, primero hay que definir cual es
el concepto que utilizaremos para comparar, y en que columna se encuentra. Luego
aplicamos el método de la Burbuja, tomando los elementos de esta columna como
punto de comparación, y cuando se requieran intercambiar de posición dos de estos
elementos, también se deben intercambiar entre si las filas en que cada uno está
ubicado.
Lo anterior se logra mediante la utilización de tres ciclos anidados, los dos primeros
se manejan igual que en el caso del ordenamiento de un vector, solo que aquí se
requieren dos subíndices. Luego se efectúa la comparación entre los elementos de la
columna con base en la cual se va a ordenar la información, y finalmente se utiliza un
tercer ciclo interno para facilitar el proceso de intercambio de todos los elementos de
las dos filas, de modo tal que conserven su unidad de información.
Al igual que en el caso del ordenamiento de un vector, aquí también se maneja el
concepto de una variable temporal que permite almacenar el dato que va a ser
reemplazado, de modo tal que esta información no se pierda.
Ejercicio:
Hacer el diagrama y el programa que lea una matriz A de m filas y n columnas, los
datos vienen grabados en forma de matriz. Ordenarla de mayor a menor de acuerdo
con la información contenida en la columna L.
Imprimirla en forma de matriz.
57
Diagrama y Programa:
58
Ejercicio:
Tenemos el archivo de estudiantes de la Universidad (5000 estudiantes), por cada
uno hay un registro que contiene: El Código de estudiante, el Nombre, los créditos
aprobados, el promedio del semestre y el Promedio Acumulado.
Hacer el diagrama y el programa que imprima un listado que contenga el Código, el
Nombre y el Promedio Acumulado de todos los estudiantes, ordenados de mayor a
menor según el Promedio Acumulado.
Solución:
Para poder imprimir el listado que se está pidiendo, se requiere conformar
previamente una matriz A de 5000 filas por tres columnas, o sea una fila por cada
estudiante y las tres columnas corresponden al Código, al Nombre y al Promedio
Acumulado. Una vez conformada la matriz A , se le aplica el método de la Burbuja,
utilizando los elementos de la columna tres para realizar las comparaciones. Una vez
ordenada se imprime en forma de matriz, o sea una fila (los tres datos) en cada línea
de impresión.
La conformación de la matriz se realiza durante el proceso de lectura, pues a medida
que se lee cada registro, se van almacenando solo los tres datos que se necesitan así:
En A(i,l) el Código, en A(í,2) el Nombre, y en A(i,3) el Promedio Acumulado, los
demás datos (el número de créditos aprobados y el promedio del semestre) no se
almacenan pues no se requieren para la solución del problema.
El proceso de lectura se hace mediante la utilización de un ciclo repetitivo de uno a
cincomil, leyendo un registro por cada ciclo. Es de anotar que los tres datos a
almacenar se pueden leer directamente como elementos de la matriz A , sin
necesidad de leerlos previamente como una variable plana, para posteriormente
almacenarlos en la matriz.
En la siguiente página se presenta el diagrama de flujo y el programa en seudocódigo
que soluciona este ejercicio-
59
Diagrama y Programa:
60
Ejercicio :
En la Universidad se efectuó la elección del representante de los estudiantes ante el
Consejo Superior. Se presentaron 30 candidatos, y cada uno se identificó con un
número del 1 al 30. Asumiendo que los 5000 estudiantes votaron, después de la
elección tendremos 5000 registros, donde cada uno contiene dos datos: el código del
estudiante, y el número del candidato (del 1 al 30) por el cual votó. Hacer el
diagrama y el programa que imprima:
1. Un listado ordenado de mayor a menor, según el número de votos obtenidos por
cada candidato, imprimiendo el número del candidato y los votos logrados.
2. El código de todos los estudiantes que votaron por el candidato ganador.
Solución:
Para responder al primer punto, se requiere conformar una matriz B de 30 filas (una
por cada candidato), y dos columnas. En la primera columna debe estar el número del
candidato, y en la segunda la cantidad de votos obtenidos por ese candidato. Una vez
conformada así la matriz B , se ordena de mayor a menor según la segunda columna,
y se imprime.
Para conformar la matriz B de acuerdo con lo expresado en el anterior párrafo, esta
requiere ser creada e inicializada al principio del programa, de modo tal que en la
primera columna quedan los números del 1 al 30, y la segunda se inicializa con
ceros, pues será utilizada como acumulador de votos. Esto se hace con un Para donde
i va de uno a 30, colocando en la primera columna la i , y en la segunda un cero,
En cada registro de entrada viene grabado el código del estudiante (cod), y el número
del candidato por el cual votó ( n ). Este número n también nos indica la fila de la
matriz B que corresponde al candidato n , entonces simplemente le sumamos uno al
segundo elemento de esa fila: B(n,2) = B(n,2) + 1, y así vamos acumulando uno a
uno los votos de cada candidato.
Para responder al segundo punto se necesita almacenar toda la información de
entrada, mediante una matriz A de 5000 filas y dos columnas, de modo tal que en la
columna uno quede cod , y en la dos quede n , así una vez conocido el número del
candidato ganador, recorremos la matriz A buscando este número en la segunda
columna, y cada vez que lo encontremos imprimimos el correspondiente elemento de
la columna uno, o sea el código del estudiante que votó por el candidato ganador.
61
Diagrama y Programa:
62
Ejercicio:
El examen de admisión en una Universidad, consta de dos pruebas, una de
conocimientos generales llamada Pl, que consta de 25 preguntas, y otra de
conocimientos matemáticos llamada P2, que consta de 15 preguntas.
Las preguntas son de escogencia múltiple, con cinco opciones numeradas del 1 al 5.
No conocemos el número de aspirante, pero se sabe que siempre se presentan más de
cien, y que la Universidad solo recibe los cincuenta mejores puntajes (Un punto por
cada respuesta correcta).
Después de realizado el examen, tenemos un archivo con la siguiente información:
En el primer registro vienen 25 números (comprendidos entre el 1 y el 5), que
corresponden a las 25 respuestas correctas de la prueba Pl. En el segundo registro
vienen las 15 respuestas correctas de la prueba P2. Luego viene un registro por cada
aspirante, cada uno de estos registros trae 41 datos así: El primero corresponde al
número de la credencial del aspirante, los siguientes 25 corresponde a sus respuestas
a la prueba Pl, y las restantes 15 a sus respuestas a la prueba P2.
El último registro trae grabado ceros en el número de la credencial.
Hacer el diagrama y el programa que imprima un listado ordenado de mayor a menor
según el puntaje obtenido, de los cincuenta aspirantes aceptados, imprimiendo el
número de la credencial y el puntaje.
Solución:
Para poder imprimir el listado solicitado en el ejercicio, necesitamos conformar un
matriz A cuyo número de filas será igual al número de aspirantes(n), y el número de
columnas igual a dos, donde la primera contenga el número de la credencial, y la
segunda el puntaje obtenido. Una vez conformada así la matriz A , se ordena de
mayor a menor según la segunda columna, y se imprimen las primeras cincuenta
filas.
No se requiere utilizar matrices en la lectura de los datos: El primer registro lo
leemos como un vector Pl de 25 elementos, y el segundo registro como un vector P2
de 15 elementos. Debido a que no sabemos cuantos aspirantes son, y teniendo en
cuenta que la terminación del archivo se controla mediante el registro centinela,
utilizaremos la estructura de repetición Hacer Mientras.
Cada registro correspondiente a cada aspirante, se lee como un vector B de 41
elementos, utilizaremos la variable n para llevar la cuenta de cuantos registros son. el
primer elemento del vector B corresponderá al número de la credencial, el cual se
pasa a la primera columna de la matriz A así: A(n,l) = B(l), luego se calcula el
puntaje obtenido por el aspirante y el resultado se pasa a la segunda columna de la
matriz A, y así logramos conformarla.
63
Diagrama y Programa:
64
Ejercicio:
La cadena de almacenes X tiene 20 almacenes en todo el país, cada uno identificado
con un número del 1 al 20. Mensualmente se registran las ventas de cada almacén, de
modo tal que al final de ano tenemos 240 registros, cada uno con tres datos así; El
número del almacén (del 1 al 20), el número del mes (del 1 al 12), y el total de ventas
durante ese mes. Hacer el diagrama y el programa que averigüe e imprima: l) Cuál
fue el almacén que tuvo las mejores ventas en el año y a cuánto ascendieron. 2) En
qué mes logró las mejores ventas, el almacén que menos vendió durante el año, y
cuánto vendió en ese mes. 3) En qué mes se lograron las mejores ventas en todo el
país, y a cuánto ascendieron.
Solución:
Para poder responder a la segunda pregunta, necesitamos almacenar la información
en forma de una matriz A de 20 filas (una por cada almacén) y 12 columnas (una por
cada mes). Esto se logra si al momento de la lectura utilizamos el número del
almacén y el número del mes, como subíndices de la matriz A, para guardar en ella la
venta mensual de cada almacén. Una vez conformada la matriz A , realizamos el
procedimiento de suma de filas, y con los resultados se conforma un vector B de 20
elementos. A este vector le aplicamos el procedimiento para hallar el mayor y el
menor y en que posición se encuentran. Imprimiendo el mayor y su posición,
respondemos a la primera pregunta. Conociendo ya cual fue el almacén que menos
vendió, vamos a su correspondiente fila en la matriz A y allí buscamos cual fue el
mes en que más vendió, imprimiendo el número del almacén que menos vendió en el
año, el número del mes en que más vendió ese almacén, y cuanto vendió en ese mes,
respondemos a la segunda pregunta. Para la tercera pregunta, realizamos el proceso
de suma de columnas, y con los resultados conformamos un vector C de 12
elementos, luego hallamos el mayor de ese vector y en que posición se encuentra, y
los imprimimos.
Diagrama y programa
65
66
Ejercicio:
Una cadena internacional de almacenes tiene sucursales en 30 países y maneja cinco
clases de almacenes en todos los países. Los países se identifican con un número del
1 al 30, y los almacenes con un número del 1 al 5 así:
1 -Comestibles , 2.Ferretería , 3.Ropas , 4.Drogas , y 5.Artículos Deportivos.
La información del número de empleados de cada clase de almacén en cada país,
viene organizada como una matriz A de 30 filas, una por cada país, y cinco
columnas, una por cada clase de almacén; de modo tal que si el elemento A(15,2) es
igual a 44, significa que tienen 44 empleados en las ferreterías del país número 15.
El salario que se paga a los empleados, - en cada país es diferente. Esta información
viene organizada como un vector B de 30 elementos, de modo tal que si el elemento
B(17) es igual a 1250, significa que el salario de sus empleados en el país número 17,
es de $1250.00 dólares al mes.
Hacer el diagrama y el programa que lea la matriz A y el vector B, y calcule e
imprima : 1 .Cuál es el tipo de almacén que tiene la nómina más costosa, a cuánto
asciende, y cuantos empleados hay. 2. A cuánto asciende la nómina total de la
empresa, y cuántos empleados tiene.
Solución:
Para responder a la primera pregunta debemos recorrer la matriz A por columnas, al
hacerlo verticalmente el índice i del ciclo interno coincide con el Índice del vector B ,
que contiene los salarios, entonces hacemos el producto A(i,k) x B(i), y lo
acumulamos, y a la salida del ciclo interno lo almacenamos en un nuevo vector N
utilizando el índice k del ciclo externo, de modo tal que N será un vector de cinco
elementos, que corresponden a la nómina de cada clase de almacén. De igual forma
creamos un vector E de cinco elementos, que corresponden al total de empleados de
cada clase de almacén, el cual utilizaremos posteriormente, una vez conocido el
almacén con la nómina más costosa, para imprimir directamente cuantos empleados
tenía.
Para responder a la segunda pregunta usamos una variable nt en la cual, a la salida
del ciclo interno, vamos acumulando los elementos del vector N, de modo tal que al
final del proceso tendremos en nt el valor de la nómina total de la empresa. De la
misma forma manejamos la variable te , para que al final del proceso tengamos en te
el número total de empleados de la empresa. Finalmente, hallamos el mayor del
vector N y en qué posición (pl) se encuentra, entonces se imprime la posición (pl), el
mayor, y elemento pl del vector E. Posteriormente se imprime las variables nt y te
que corresponden a la segunda pregunta.
67
Diagrama y Programa:
68
Ejercicios propuestos:
1. Hacer el diagrama y el programa que lea una matriz A de m filas y n columnas,
que la ordene ascendentemente elemento a elemento, o sea que el elemento menor
quede en la posición A(l,l), es siguiente en tamaño en la posición A(l,2), el siguiente
en A(l,3), y así sucesivamente de modo tal que el mayor quedará en A(m,n).
2. Una Cía. aérea tiene 25 aviones, identificados cada uno con un número del 1 al 25,
y efectúa vuelos en 15 rutas, identificadas cada una con un número del 1 al 15.
Durante el año pasado, por cada vuelo realizado, se grabó un registro con cuatro
datos así: El número del avión (del 1 al 25), el número de la ruta (del 1 al 15), el
número del mes (de1 1 al 12), y el número de pasajeros transportados en ese vuelo.
Al final del año tenemos todos los registros grabados, sin ningún orden, y no
sabemos cuantos son, por lo tanto el último registro trae grabado ceros en el número
del avión. Hacer el diagrama y el programa que averigüe e imprima: a) Cuál fue el
avión que más pasajeros transportó en el año, y cuántos, b) Cuál fue la ruta de mayor
flujo de pasajeros en el año, y cuántos, c) Cuál fue el mes en que viajaron más
pasajeros, y cuántos.
3. Hacer el diagrama y el programa que lea dos matrices, A de m filas y n columnas,
y B de n filas y ñ columnas. Que realice el producto matricial en entre A y B ,
generando una nueva matriz C de m filas y ñ columnas.
Así: A(m,n) x B(n,ñ) = C(m,ñ).
Imprimir las tres matrices.
4. Hacer el diagrama y el programa que lea una matriz cuadrada A de m filas y m
columnas, imprimirla, y generar sobre ella misma su matriz transpuesta, e
imprimirla. La matriz transpuesta se obtiene intercambiando las filas y las columnas.
69
BIBLIOGRAFÍA
El presente texto es el resultado de más de cuatro años de experiencia en la
enseñanza de esta asignatura en la UIS.
La mayoría de los ejercicios aquí planteados, son fruto de la continua búsqueda de
casos reales, que se pudieran presentar en forma didáctica al estudiante, y que le
permitiera entender, cómo aplicar los conocimientos adquiridos a situaciones de la
vida real.
La importancia de este Problemario radica en que tiene una cobertura total sobre los
contenidos que se están dictando actualmente en el curso de Introducción a los
Computadores, pues los textos existentes sobre estos temas solo los cubren
parcialmente, y en una forma que no es la más adecuada, de acuerdo con la
metodología utilizada en el curso.
Sin embargo en forma complementaria podríamos citar los siguientes textos:
Programación el Pascal a través del seudocódigo, de la editorial McGraw Hill.
Programación libre y estructurada, de la colección Schaum.
Diagramación y Programación. L. Lozano. Publicaciones Universidad Central
de Bogotá.
70
Descargar