Sei sulla pagina 1di 24

Unidad 1. Computación 2. Lapso: 2017-I.

Antes de abordar la Unidad I de éste curso, se dará un breve repaso a la definición y


las operaciones básicas de las Estructuras de Datos Homogéneas (Arreglos) vistas en el curso
de Computación I.

DISEÑO DE ALGORITMOS USANDO ESTRUCTURAS DE DATOS HOMOGÉNEAS.

ARREGLOS.

1. Definición.

1 2 3 4 5 6 7 8 9 10
A[10]

Figura 1. Arreglo unidimensional con 10 elementos.

Un arreglo (matriz o vector) es una zona de almacenamiento contiguo, que contiene


una serie de elementos del mismo tipo (entero, real o carácter). Desde el punto de vista
lógico un arreglo se puede ver como un conjunto de elementos ordenados en fila o filas y
columnas si tuviera dos dimensiones.

2. Declaración de una Estructura de Datos Tipo Arreglo.

Para declarar una E.D. tipo arreglo se necesita especificar tres (03) datos, el primero
es el tipo de dato (entero, real o carácter) que se va a almacenar en el arreglo, lo segundo es
el identificador o nombre del arreglo, y por último a dicho identificador se le añaden entre
corchetes el o los números que indican las cantidades de celdas que contiene el arreglo y sus
dimensiones, ver la tabla de ejemplo a continuación.

Tipo Identificador (Nombre) [Dimensión1, Dimensión2, …, DimensiónN]


Entero Cedulas [40]
Real Temperaturas [12]
Caracter Nombre [10]
Entero Puestos [5, 6]
Real Promedio_Mes [12, 31]
Caracter Lista_Alumnos [40, 10]
Entero Coordenadas_3D [10, 10, 10]

3. Índices.

Todo arreglo se compone de un determinado número de elementos. Cada elemento es


referenciado o identificado por la posición que ocupa dentro del vector. Dichas posiciones son
llamadas índice y siempre son correlativos. El término indexar o indexación, en este caso, es
sinónimo de numerar, y dicha numeración se puede llevar a cabo de tres formas distintas:
Unidad 1. Computación 2. Lapso: 2017-I.

 Indexación Base-Cero (0).

En este modo el primer elemento del vector será la componente cero ('0') del mismo,
es decir, tendrá el índice '0'. En consecuencia, si el vector tiene 'n' componentes la última
tendrá como índice el valor 'n-1'. El C++ es un ejemplo típico de lenguaje que utiliza este
modo de indexación.

Índice 0 1 2 3 4 5 6 7 8 9
A[10]

 Indexación Base-Uno (1).

En esta forma de indexación, el primer elemento del arreglo tiene el índice '1' y el
último tiene el índice 'n' (para un arreglo de 'n' componentes). Usualmente cuando se trabaja
en Pseudocódigo se utiliza éste tipo de indexación.

Índice 1 2 3 4 5 6 7 8 9 10
A[10]

 Indexación Base-N (n).

Este es un modo versátil de indexación en la que el índice del primer elemento puede ser
elegido libremente, en algunos lenguajes de programación se permite que los índices puedan
ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

Índice 15 16 17 18 19 20 21 22 23 24
A[10]

4. Tipos de Arreglos según sus Dimensiones.

En el ítem de declaración se vio cómo los arreglos pueden tener hasta N dimensiones,
y según ésta cantidad se puede clasificar como:

 Unidimensional.

Éste tipo de arreglo también llamado vector, se puede visualizar como una columna o una
fila de celdas apiladas. Al ser declarado, los corchetes que acompañan al identificador llevan
un solo número asociado, el número de celdas.

Si se visualiza como un vector fila:

Índice 1 2 3 4 5 6 7 8 9 10
Edades[10]
Unidad 1. Computación 2. Lapso: 2017-I.

Si se visualiza como un vector columna:

Edades [10] Índice


1
2
3
4
5
6
7
8
9
10

 Bidimensional.

Los arreglos bidimensionales se suelen llamar matrices por su semejanza con éste
elemento matemático. Al declarar éste tipo de arreglo, los corchetes que acompañan al
identificador contendrán dos números separados por comas, el primero de ellos indica el
número de filas de la matriz y el segundo indica el número de columnas.

Columnas
Índices 1 2 3 4 5
1
2
Filas

3
4

 Multidimensional.

Cuando un arreglo tiene tres o más dimensiones, se clasifica como multidimensional,


éstos son utilizados en ciertos casos.

3
3
4 2
5 1
1 2 3 4 5 6
Unidad 1. Computación 2. Lapso: 2017-I.

5. Operaciones con Arreglos.

 Asignación.

Elemento del Arreglo Unidimensional A[8]=6


Elemento del Arreglo Multidimensional Ventas[2,1] =50
Entero A[100]
Repetir_Desde(i=1;i<=100;i=i+1)
Arreglo Unidimensional
A[i] =0
Fin_Repetir_Desde
Entero A[5,10]
Repetir_Desde (i=1;i<=5;i=i+1)
Repetir_Desde (j=1;j<=5;j=j+1)
Arreglo Multidimensional
A[i,j] =0
Fin_Repetir_Desde
Fin_Repetir_Desde

 Lectura.

Elemento del Arreglo Unidimensional Leer (A[8])


Algoritmo Lectura_Vector_P
Entero P[10], i
Repetir_Desde (i=1;i<=10;i=i+1)
Arreglo Unidimensional Mostrar(“Introduzca el elemento”)
Leer (P[i])
Fin_Repetir_Desde
Fin

 Recorrido.

Ejemplo 1.

Procesar las cuotas anuales de un préstamo realizando la lectura del arreglo, suma y
promedio.

Índice 1 2 3 4 5 6 7 8 9 10 11 12
Cuotas[12]

Algoritmo Cuotas Nombre del Algoritmo


Inicio
Real cuotas[12], suma, promedio Declaración de Variables
Entero i
Suma=0 Inicialización del acumulador “suma”
Unidad 1. Computación 2. Lapso: 2017-I.

Inicio del ciclo para la lectura y sumatoria de


Repetir_Desde(i=1;i<=12;i=i+1) los valores de las 12 cuotas del arreglo
Leer( cuotas [i])
Suma=suma+cuotas[i] Fin del Ciclo
Fin_Repetir_Desde Cálculo del Promedio de las cuotas
Promedio=suma/12 Mostrar los valores calculados
Mostrar (“Total=”, suma)
Mostrar (“Promedio=”, promedio)
Fin

Ejemplo 2.

Del algoritmo anterior, diseñe un código que muestre las cuotas mayores al promedio.

Algoritmo Cuotas Mayores al Promedio Del Algoritmo anterior…


Repetir_Desde (i=1;i<=112;i=i+1) Inicio del Ciclo
Si (cuotas [i] > promedio) Condición de que si el valor de la cuota es
Mostrar (cuotas [i]) mayor al del promedio, será mostrado en
Fin_Si pantalla
Fin_Repetir_Desde Fin del Ciclo

Ejemplo 3.

Diseñar un algoritmo que realice la suma de dos matrices bidimensionales.

Algoritmo Suma_Matrices Nombre del Algoritmo


Inicio
Real A[5,4], B[5,4], C[5,4] Declaración de Variables
Entero i, j
Repetir_Desde (i=1;i<=5;i=i+1) Inicio de los Ciclos para introducir los valores
Repetir_Desde(j=1;i<=4;j=j+1) del arreglo A
Leer(A[i,j])
Fin_Repetir_Desde
Fin_Repetir_Desde Fin de los Ciclos
Repetir_Desde (i=1;i<=5;i=i+1)
Repetir_Desde(j=1;i<=4;j=j+1) Inicio de los Ciclos para introducir los valores
Leer(B[i,j]) del arreglo B
Fin_Repetir_Desde
Fin_Repetir_Desde
Fin de los Ciclos
Repetir_Desde (i=1;i<=5;i=i+1)
Repetir_Desde(j=1;i<=4;j=j+1) Inicio de los Ciclos para inicializar el arreglo C
C[i,j]=0
Fin_Repetir_Desde
Fin_Repetir_Desde Fin de los Ciclos
Unidad 1. Computación 2. Lapso: 2017-I.

Repetir_Desde (i=1;i<=5;i=i+1) Inicio de los ciclos para recorrer los arreglos


Repetir_Desde(j=1;i<=4;j=j+1) y realizar la suma de los mismos
C[i,j]=A[i,j]+B[i,j]
Fin_Repetir_Desde
Fin_Repetir_Desde Fin de los ciclos
Fin

 Búsqueda.

Operación para encontrar la posición de un elemento entre un conjunto de datos dados.

Si existe:
Mostrar (“Elemento Existe”)
Mostrar (“Posición”, i)

Si no existe:
Mostrar (“El elemento no existe”)

Ejemplo 1.

Diseñe un algoritmo que en un arreglo de cien elementos enteros permita buscar un


número en particular.

Algoritmo de Búsqueda Secuencial. Nombre del algoritmo


Inicio
Entero Lista[100], i, Buscado, Bandera Declaración de Variables
Repetir_Desde (i=1;i<=100;i=i+1) Ciclo para cargar los valores del
Leer (Lista[i]) arreglo “Lista”
Fin_Repetir_Desde
Leer (Buscado) Lectura del parámetro que buscamos
Bandera=0 Inicialización de una bandera para
Repetir_Desde (i=1;i<=100;i=i+1) saber el estado de la búsqueda
Si (Lista[i]=Buscado) Inicio del ciclo para realizar la
Mostrar(“Elemento Existe”) búsqueda
Mostrar(“Posición”,i) Si se encuentra el elemento, se
Bandera=1 muestra el mensaje que se encontró y
Fin_Si la posición, la bandera de la búsqueda
Fin_Repetir_Desde cambia a 1 para indicar que fue
Si (Bandera==0) exitosa
Mostrar(“Elemento No existe”)
Fin_Si
Fin Si se terminó el ciclo de búsqueda y la
bandera esta en cero (0), quiere decir
que el elemento no fue hallado
Unidad 1. Computación 2. Lapso: 2017-I.

 Ordenamiento.

Los algoritmos de ordenamiento consisten en organizar un conjunto de datos según un


criterio específico (decreciente o creciente).

Existen tres métodos básicos para realizar esta operación, Método del Intercambio o
Burbuja, Método de Inserción o de la Baraja y Ordenamiento por Selección.

(1) Método del Intercambio o Burbuja.

Este método de ordenamiento consiste en comparar los elementos adyacentes (de 2


en 2) si A[n]>A[n+1] intercambiamos posiciones.

La evaluación e intercambio de todos los elementos se deben hacer en (n-1)*(n-1)


comparaciones, siendo n el número de elementos del arreglo.

Supongamos que tenemos el siguiente arreglo, y queremos ordenando mediante el


método de la Burbuja.

A [1] A[2] A[3] A[4] A[5]


5 6 3 2 1

En el primer ciclo de comparaciones:

5 6 3 2 1
5 3 6 2 1
5 3 2 6 1
5 3 2 1 6

En el segundo ciclo de comparaciones:

3 5 2 1 6
3 2 5 1 6
3 2 1 5 6
3 2 1 5 6

En el tercer ciclo de comparaciones:

2 3 1 5 6
2 1 3 5 6
2 1 3 5 6
2 1 3 5 6

En el cuarto ciclo de comparaciones:


Unidad 1. Computación 2. Lapso: 2017-I.

1 2 3 5 6
1 2 3 5 6
1 2 3 5 6
1 2 3 5 6

Algoritmo Genérico Ordenamiento Burbuja. Nombre del algoritmo


Inicio
Entero A[5], I,J, AUX Declaración de Variables
Repetir_Desde (I=1;I<=5;I=I+1) Ciclo para cargar los cinco valores del
Leer (A[I]) arreglo “A”
Fin_Repetir_Desde

Repetir_Desde (I=1;I<=5;I=I+1) Ciclo anidado para recorer (n-1)*(n-1)


Repetir_Desde (J=1;J<=4;J=J+1) veces el arreglo y hacer las
comparaciones, en este ejemplo n=5,
Si ( A[J]>A[J+1]) por lo que I y J llegan hasta 4.
AUX = A[J]
A[J] = A[J+1] Si el elemento de la izquierda es
A[J+1] = AUX mayor al de la derecha, entonces se
Fin_Si intercambian utilizando una variable
Fin_Repetir_Desde auxiliar. Si no, conservan sus
Fin_Repetir_Desde posiciones.

Repetir_Desde (I=1;I<=5;I=I+1)
Mostrar (A[I])
Fin_Repetir_Desde

Fin

(2) Método de Inserción o Baraja.

En este método de ordenamiento, se comienza con el segundo elemento, el cual se


compara con el elemento a la izquierda.

Teniendo como ejemplo el arreglo mostrado a continuación,

A [1] A[2] A[3] A[4] A[5]


5 6 3 2 1

En el primer ciclo de comparaciones:

5 6 3 2 1 Primer Ciclo n=2


5 3 6 2 1 Segundo Ciclo n=3
3 5 6 2 1
3 5 6 2 1 Tercer Ciclo n=4
3 5 2 6 1
Unidad 1. Computación 2. Lapso: 2017-I.

2 3 5 6 1
2 3 5 1 6 Cuarto Ciclo n=5
2 3 1 5 6
2 1 3 5 6
1 2 3 5 6 Fin

Algoritmo Genérico Ordenamiento por Inserción. Nombre del algoritmo


Inicio
Entero A[5], I, J, AUX Declaración de Variables

Repetir_Desde (I=1;I<=5;I=I+1) Ciclo para cargar los cinco valores del


Leer (A[I]) arreglo “A”
Fin_Repetir_Desde

Repetir_Desde (J=2;J<=5;J=J+1) Ciclo para realizar el recorrido del


arreglo

AUX = A[J] Se deposita el valor a comparar en


I= J-1 auxiliar, y a través de la variable I se
Repetir Mientras (I>0 && A[I]>AUX) compara con el valor a su izquierda

A[I+1] = A[I]
A[I] = AUX
I = I-1
Fin_Repetir_Mientras
Fin_Repetir_Desde

Repetir_Desde (I=1;I<=5;I=I+1)
Mostrar (A[I])
Fin_Repetir_Desde

Fin

(3) Método de Ordenamiento por Selección.

Este método consiste en hacer un recorrido del arreglo para seleccionar el menor de los
elementos y posicionarlo en el primer lugar, luego se busca el segundo menor y se ubica de
segundo y así sucesivamente.

Tomando en cuenta el arreglo que se muestra a continuación, haremos un ejemplo de


éste método de ordenamiento.

A [1] A[2] A[3] A[4] A[5]


5 6 3 2 1

5 6 3 2 1
Unidad 1. Computación 2. Lapso: 2017-I.

1 6 3 2 5
1 2 3 6 5
1 2 3 6 5
1 2 3 5 6

Algoritmo Ordenamiento por Selección. Nombre del algoritmo


Inicio
Entero A[5], I, J, K, MENOR Declaración de Variables

Repetir_Desde (I=1;I<=5;I=I+1) Ciclo para cargar los cinco valores del


Leer (A[I]) arreglo “A”
Fin_Repetir_Desde

Repetir_Desde (I=1;I<=5;I=N-1) Ciclo para realizar el recorrido del


MENOR = A[I] arreglo con finalización en el
K=I penúltimo elemento
Repetir_Desde (J=I+1;J<=5;J=J+1)
Si ( A[J]<MENOR) Se deposita el primer valor del arreglo
MENOR = A[J] en “MENOR”, y a través de la variable
K=J K que sirve para indicar el índice del
Fin_Si elemento que se va ordenando
Fin_Repetir_Desde
A[K] = A[I] Se repite N veces el ciclo para
A[I] = MENOR conseguir el menor de los elementos
Fin_Repetir_Desde del arreglo, que se deposita en
“MENOR” y a través de K se indica en
Repetir_Desde (I=1;I<=5;I=I+1) cual posición estaba
Mostrar (A[I])
Fin_Repetir_Desde Finalmente se intercambia el valor del
contador I con el menor de los valores
Fin encontrado
Unidad 1. Computación 2. Lapso: 2017-I.

6. Problemas Resueltos.

1) Se tiene el monto de cada una de 100 ventas. Por cada venta calcule el IVA (12%) y
muestre el monto a pagar. Calcule y muestre el monto total en ventas y monto total en
impuesto por todas las 100 ventas.

Algoritmo Ventas Nombre del Algoritmo


Inicio
Real Venta[100], iva[100], monto[100] Declaración de Variables
Real Suma_total, Suma_iva
Repetir_Desde i1 hasta i=100 Ciclo para introducir los valores del arreglo
Leer (Venta[i]) “Ventas”
Fin_Repetir_Desde
Suma_total0 Inicialización del acumulador “Suma_total” y
Suma_iva0 “Suma_iva”
Repetir_Desde i=1 hasta i=100 Ciclo para calcular el iva y sumar el monto
iva[i] Venta[i]*0,12 del iva mas la venta del los arreglos
monto[i] Venta[i]+iva[i]
Mostrar (monto[i])

Suma_totalSuma_total+monto[i]
Suma_ivaSuma_iva+iva[i] Fin del Ciclo
Fin_Repetir_Desde Mostrar los valores de sumas de totales e iva
Mostrar(Suma_total, Suma_iva) calculados
Fin

2) Dado un conjunto de 36 números enteros llene una matriz de orden 6 con dichos números
y calcule:

(a) La sumatoria de los números ubicados en la primera y la última fila. (i=1 e i=6,
suma[1]).
(b) La sumatoria de los números ubicados en la primera y la última columna. (j=1 y
j=6, suma[2]).
(c) La sumatoria de los números por arriba de la diagonal principal y los números por
debajo de la diagonal principal. (i<j, suma[3] e i>j,suma[4]).

A11 A12 A13 A14 A15 A16


A21 A22 A23 A24 A25 A26
A31 A32 A33 A34 A35 A36
A41 A42 A43 A44 A45 A46
A51 A52 A53 A54 A55 A56
A61 A62 A63 A64 A65 A66
Unidad 1. Computación 2. Lapso: 2017-I.

Algoritmo Suma Matriz Inicio del Algoritmo


Inicio
Entero A[6,6], j, i, suma[4] Declaración de Variables

Repetir_Desde i1 hasta i=6 Lectura de la matriz “A”


Repetir_Desde j1 hasta j=6
Leer (A[i,j])
Fin_Repetir_Desde
Fin_Repetir_Desde

Repetir_Desde i1 hasta i=6 Inicialización del Vector


suma[i] 0 “Suma”
Fin_Repetir_Desde

Repetir_Desde i1 hasta i=6


Repetir_Desde j1 hasta j=6 Ciclo para recorrer la matriz
Si (i=1 o i=6) “A”
Entonces
suma[1] suma[1]+A[i,j]
Fin_Si
Acumulador para las filas 1 y 6
Si (j=1 o j=6)
Entonces
suma[2] suma[2]+A[i,j]
Fin_Si
Acumulador para las columnas
Si (i<j) 1y6
Entonces
suma[3] suma[3]+A[i,j]
Fin_Si

Si (j>i) Acumulador para la diagonal


Entonces superior
suma[4] suma[4]+A[i,j]
Fin_Si

Fin_Repetir_Desde
Fin_Repetir_Desde Acumulador para la diagonal
inferior
Mostrar(“Suma de Filas”, suma[1])
Mostrar(“Suma de Columnas”, suma[2])
Mostrar(“Suma de la diagonal superior”, suma[3])
Mostrar(“Suma de la diagonal inferior”, suma[4])

Fin
Unidad 1. Computación 2. Lapso: 2017-I.

DISEÑO DE ALGORITMOS USANDO ESTRUCTURAS DE DATOS HETEROGÉNEOS.

REGISTROS.

1. Definición.

Es un conjunto de datos elementales de diferentes tipos, lógicamente relacionados,


los cuales se agrupan bajo un nombre en común. Cada elemento del registro recibe el
nombre de miembro o campo de registro.

Ejemplo: un registro de los pasajeros de un avión puede contener los siguientes datos:

Tipo de
Caracter Entero Entero Entero Real Carácter Caracter
Dato
Nombre
de la Nombre N_Vuelo Fecha N_Asiento Costo_Pasaje Origen Destino
Variable

Los campos se caracterizan por su tamaño y su tipo. Un subcampo es un campo


perteneciente a otro campo.

Ejemplo: el campo fecha está compuesto por los subcampos día, mes y año:

Fecha
Día Mes Año

2. Declaración de un Registro.

Un registro es un tipo de dato definido por el usuario, éste se debe declarar antes
de que se pueda utilizar.

Formato de la Declaración. Ejemplo.


Registro Nombre_Registro Registro Trabajador
tipo nombre_campo_1 caracter nombre[10]
tipo nombre_campo_2 real sueldo
… enteroedad
tipo nombre_campo_n Fin Registro
Fin Registro

3. Variables Tipo Registro.

Al igual que a otro tipo de datos, a un registro se accede utilizando una variable o
variables, que se deben definir después de la declaración del registro, ya que la
declaración especifica simplemente el nombre y el formato del registro, pero no reserva el
espacio en memoria.
Unidad 1. Computación 2. Lapso: 2017-I.

3.1. Definición de Variables Tipo Registro.

Cada definición de variable para un registro dado, crea un área en memoria donde
los datos se almacenan de acuerdo al formato estructurado, declarado previamente.

Formato de la Definición Ejemplo


Nombre_Registro Nombre_Variable Trabajador Admnistrativo, Obrero

En el ejemplo anterior se definen las variables Administrativo y Obrero del tipo de


registro Empleado, por lo que cada una de las variables consta de los campos: nombre,
sueldo y edad.

3.2. Acceso a los Campos de un Registro.

Se puede acceder a los campos de un registro utilizando el operador punto (.).

Formato de Acceso Ejemplo


Asignación
Obrero.nombre = Juan
Nombre_Variable_Tipo_Registro.Nombre_Campo
Lectura
Leer (Obrero.nombre)

3.3. Tipos de Campos.

 Campos Simples.

En este caso los campos del registro están formados por variables de tipo simple,
por ejemplo, un registro de la nota de un curso podría definirse de la manera siguiente.

Registro Tabla_Alumno
caracter nombre[20]
enterocedula
real nota1, nota2, nota3, nota4
Fin_Registro

 Campos Constituidos por Arreglos.

Los campos del registro pueden ser arreglos, por ejemplo, en el caso anterior si se
desea guardar cuatro notas por alumno se puede declarar el registro de la siguiente
manera.

Registro Tabla_Alumno
caracter nombre[20]
enterocedula
Unidad 1. Computación 2. Lapso: 2017-I.

real notas[4]
Fin_Registro

La estructura del Registro sería como se muestra a continuación.

Tabla_Alumno
nombre [20] cedula nota[1] nota[2] nota[3] nota[4]
Ana
17892475 14 19 13 16
Gonzalez

De esta manera el registro permite almacenar cuatro notas de un mismo alumno.


Si se define una variable llamada Alumno usando este tipo de registro y se desea accesar
a alguno de sus campos, se debe escribir:

Tabla_Alumno Alumno //Definición de la Variable Tipo Registro

Alumno.nota[1]=14
Alumno.nota[2]=19
EJERCICIOS RESUELTOS.

1. Se requiere diseñar un algoritmo que almacene en una estructura de datos los


nombres, las cédulas y las notas de un grupo de 40 alumnos. El cálculo de la nota final,
está basado en la sumatoria de las primeras 4 notas introducidas por el profesor en la
estructura de datos. El programa debe incluir las siguientes características:

 Ingreso de los datos, las notas de los alumnos, y realizar el cálculo de la nota final.
 Visualización de la tabla con los datos cargados.
 Cálculo de Estadísticas: Cantidad de Alumnos aprobados y Cantidad de alumnos
Reprobados.
 Estas opciones se deben ejecutar mediante un menú:
[1] Ingreso de Datos.
[2] Visualización de los Alumnos.
[3] Estadísticas del Curso.
[4] Buscar Alumno por su C.I.
[5] Salir del Programa.

Alumnos [40]
Tabla_Alumnos
Notas [5]
Nombre Cedula
Notas [1] Notas [2] Notas [3] Notas [4] Notas [5]
1
2
.
.
.
40
Unidad 1. Computación 2. Lapso: 2017-I.

Algoritmo Notas de Alumnos


Inicio
// Declaración de la Estructura del Registro
Registro Tabla_Alumnos
Carácter nombre[15]
Entero cedula
Real notas[5]
Fin_Registro

// Definición de la Variable de la Estructura del Registro


Tabla_Alumnos Alumnos[40]

// Declaración de otras variables


Entero opcion, i, j, aprobados, reprobados, cedulab, bandera

opcion ← 1
Repetir mientras (opción>=1 Y opcion <5)

Mostrar (“Menu de Opciones”)


Mostrar (“[1] Ingreso de Datos”)
Mostrar (“[2] Visualización de los Alumnos”)
Mostrar (“[3] Estadísticas del Curso”)
Mostrar (“[4] Salir del Programa”)
Leer (opcion)

Repetir Mientras (opc<1 O opc>5)


Mostrar (“Opción Inválida, reintroduzcala”)
Leer (opc)
Fin_Repetir_Mientras

En caso de (opcion)
1:
Repetir desde( i=1;i<=40;i=i+1)
Mostrar (“Alumno ”, i)
Mostrar (“Ingrese el nombre del alumno”)
Leer (Alumnos[i].nombre)
Mostrar (“Ingrese la cédula del alumno”)
Leer (Alumnos[i].cedula)
Alumnos[i].notas[5] = 0 //Inicialización del Acumulador para la nota
Repetir desde (j=1; j<=4;j=j+1)
Mostrar (“Ingrese la nota”, j)
Leer (Alumnos[i].notas[j])
Alumnos[i].notas[5]= Alumnos[i].notas[5]+Alumnos[i].notas[j]
Fin_Repetir_Desde
Fin_Repetir_Desde
Mostrar(“Fin de Carga de notas”)
Unidad 1. Computación 2. Lapso: 2017-I.

2:
Mostrar(“Nombre Cedula Nota 1 Nota 2 Nota 3 Nota 4 Nota F”)
Repetir desde ( i=1;i<=40;i=i+1)
Mostrar (Alumnos[i].nombre)
Mostrar (Alumnos[i].cedula)
Repetir desde (j=1; j<=5;j=j+1)
Mostrar (Alumnos[i].notas[j])
Fin_Repetir_Desde
Fin_Repetir_Desde

3:
aprobados =0
reprobados = 0
Repetir desde ( i=1;i<=40;i=i+1)
Si (Alumnos[i].notas[5]>=50)
aprobados = aprobados +1
Si no
reprobados = reprobados + 1
Fin_Si
Fin_Repetir_Desde

Mostrar(“La cantidad de Alumnos aprobados fue de ”, aprobados)


Mostrar(“La cantidad de Alumnos reprobados fue de ”, reprobados)

4: //Búsqueda de alumno

busqueda = 0
Mostrar ("Introduzca la Cédula del Alumno: ")
Leer (cedulab)

Repetir_Desde ( i=1;i<=40;i=i+1)
Si (cedulab == Seccion_N1[i].cedula)
busqueda=1
Mostrar ("Las Notas del Alumno son: ")
Repetir_Desde (j=1;j<=5;j=j+1)
Mostrar ("Nota ", j, ": ", Seccion_N1[i].Notas[j])
Fin_Repetir_Desde
Fin_Si
Fin_Repetir_Desde

Si ( busqueda==0)
Mostrar ("Cédula no existente")
Fin_Si
Unidad 1. Computación 2. Lapso: 2017-I.

5:
Mostrar(“Fin del Programa”)

Fin_En_Caso_de
Fin_Repetir_Mientras
Fin

2. Una videotienda posee 100 tipos de películas que son alquiladas a clientes. Las
películas están codificadas, por lo que por cada una de ellas se tiene: código, título,
género y cantidad existente. Además, existe un registro de los 100 usuarios con los
siguientes datos: número de carnet, nombre, estado (A: activo y S: suspendido).

Cada uno de los 100 usuarios puede alquilar una película sólo si no está suspendido
y para ello se debe registrar en el momento del alquiler: número de carnet, código de la
película y fecha de entrega programada. Si al entregar la película, la fecha de entrega es
posterior a la fecha programada el día del alquiler, se coloca el estado como suspendido.
Se pide elaborar un algoritmo que permita ejecutar los siguientes procesos:

 Diseñar las estructuras de datos apropiadas para guardar los datos.


 Registrar a los usuarios y a las películas.
 Alquilar una película a un cliente determinado.
 Entregar una película por parte del cliente, considerando el caso de suspensión si la
entrega es posterior a la fecha programada.

La ejecución de cada uno de los procesos debe ser seleccionada a través de un menú de
opciones, como se muestra a continuación:

[1] Ingresar Películas. [5] Alquilar Película.


[2] Ver listado de Películas. [6] Devolver Película.
[3] Registrar Cliente. [7] Activar Cliente.
[4] Ver listado de Clientes. [8] Salir del Sistema.

Peliculas [100]
Tabla_Peliculas
k Código Título Genero Cantidad
1
2
.
.
.
100
Unidad 1. Computación 2. Lapso: 2017-I.

Clientes [100]
Tabla_Usuarios
j Carnet Nombre Estado
1
2
.
.
.
100

Fecha
Dia Mes Año

Alquiler [100]
Tabla_Alquiler
m Entrega
Carnet Codigo
Dia Mes Año
1
2
.
.
.
100

Algoritmo Alquiler de Películas


Inicio

//Declaración de los Registros


Registro Tabla_Peliculas
Entero codigo, cantidad
Carácter titulo[15], genero[10]
Fin_Registro

Registro Tabla_Usuarios
Entero carnet
Carácter nombre[10], estado
Fin_Registro

Registro Fecha
Entero dia, mes, año
Fin_Registro
Unidad 1. Computación 2. Lapso: 2017-I.

Registro Tabla_Alquiler
Entero carnet, código
Fecha entrega
Fin_Registro

//Definición de las Variables Tipo Registro


Tabla_Peliculas Peliculas [100]
Tabla_Usuarios Clientes [100]
Tabla_Alquiler Alquiler [100]

// Declaración de otras variables


Entero día, mes, año, carnet, búsqueda1, código, búsqueda2, opcion =1, Suspendido
Entero i, n, j =1, k =1, m =1, l
Carácter respuesta

Repetir mientras (opción>1 && opcion < 8)


Mostrar (“Menú de Opciones”)
Mostrar (“[1] Incluir una Película”)
Mostrar (“[2] Ver Listado de Películas”)
Mostrar (“[3] Registrar Cliente”)
Mostrar (“[4] Ver Listado de Clientes”)
Mostrar (“[5] Alquilar Película”)
Mostrar (“[6] Devolver Película”)
Mostrar (“[7] Reactivar Usuario”)
Mostrar (“[8] Salir”)
Leer (opcion)

Repetir Mientras (opc<1 || opc>8)


Mostrar (“Opción Inválida, reintroduzcala”)
Leer (opc)
Fin_Repetir_Mientras

En caso de (opcion)
1:
respuesta =‟s‟
Repetir Mientras (respuesta==‟s‟ || respuesta==‟S‟)
Mostrar (“Ingrese los Datos de la Película”)
Mostrar (“Código”)
Leer (Peliculas[k].codigo)
Mostrar (“Cantidad”)
Leer (Peliculas[k].cantidad)
Mostrar (“Título”)
Leer (Peliculas[k].titulo)
Mostrar (“Género”)
Leer (Peliculas[k].genero)
Unidad 1. Computación 2. Lapso: 2017-I.

k=k+1
Mostrar (“Desea Ingresar otra Película?? S/N”)
Leer (respuesta)
Fin_Repetir_Mientras

2:
Mostrar (“Listado de Películas”)
Mostrar (“Código Título Género Cantidad”)
Repetir desde i =1;i<=k;i=i+1)
Mostrar (Peliculas[i].codigo)
Mostrar (Peliculas[i].titulo)
Mostrar (Peliculas[i].genero)
Mostrar (Peliculas[i].cantidad)
Fin_Repetir_desde

3:
respuesta =‟s‟
Repetir Mientras (respuesta==‟s‟ || respuesta==‟S‟)
Mostrar (“Ingrese los Datos del Nuevo Usuario”)
Mostrar (“Numero de Carnet”)
Leer (Clientes[j].carnet)
Mostrar (“Nombre”)
Leer (Clientes[j].nombre)
Clientes[j].estado =‟A‟
j=j+1
Mostrar (“Desea Ingresar otro usuario?? S/N”)
Leer (respuesta)
Fin_Repetir_Mientras

4:
Mostrar (“Codigo Nombre Estado”)
Repetir desde (i =1;i<=j;i=i+1)
Mostrar (Clientes[i].carnet)
Mostrar (Clientes[i].nombre)
Mostrar (Clientes[i].estado)
Fin_Repetir_Desde

5:
Mostrar (“Alquiler de Película”)
Mostrar (“Introduzca el Número de Carnet del Cliente”)
Leer (carnet)
búsqueda1 = 0
Repetir desde (i =1;i<=j;i=i+1)
Si (Clientes[i].carnet == carnet)
búsqueda1 = 1
Si (Clientes[i].estado == „A‟ || Clientes[i].estado == „a‟)
Unidad 1. Computación 2. Lapso: 2017-I.

Mostrar (“Introduzca el Código de la Película”)


Leer (código)
búsqueda2 = 0
Repetir desde n=1;n <= k;n=n+1)
Si (Peliculas[n].codigo == codigo)
búsqueda2 = 1
Si (Peliculas[n].cantidad >1)
Peliculas[n].cantidad = Peliculas[n].cantidad -1
Alquiler [m].carnet = Clientes[i].carnet
Alquiler [m].codigo= Peliculas[n].codigo
Mostrar (“Introduzca la Fecha de Entrega”)
Mostrar (“Dia:”)
Leer(Alquiler [m].entrega.dia)
Mostrar (“Mes:”)
Leer(Alquiler [m].entrega.mes)
Mostrar (“Año:”)
Leer(Alquiler [m].entrega.año)
m=m+1
Si no
Mostrar (“No hay en Existencia”)
Fin_Si
Fin_Si
Fin_Repetir_Desde
Si (búsqueda2 == 0)
Mostrar (“No se encontró el código de la Película”)
Fin_Si
Si no
Mostrar (“El cliente está Suspendido”)
Fin_Si
Fin_Si
Fin_Repetir_Desde
Si (búsqueda1 == 0)
Mostrar (“No se consiguió el código del cliente”)
Fin_Si

6:
Mostrar (“Devolver Película”)
Mostrar (“Introduzca el Número de Carnet del Cliente”)
Leer (carnet)
búsqueda1 = 0
Repetir desde (i = 1 ; i < m; i=i+1)
Si (Alquiler[i].carnet == carnet)
búsqueda1 = 1
Mostrar (“Introduzca la fecha actual”)
Leer (dia, mes, año)
Si (año > Alquiler [i].entrega.año)
Unidad 1. Computación 2. Lapso: 2017-I.

Suspendido = 1
Si no
Si (mes>=Alquiler[i].entrega.mes &&
dia>Alquiler[i].entrega.dia)
Suspendido = 1
Fin_Si
Fin_Si
Si (Suspendido == 1)
Repetir desde (n=1;n<= j;n=n+1)
Si (Clientes[n].carnet == carnet)
Clientes [n].estado = „S‟
Fin_Si
Fin_Repetir_Desde
Fin_Si
Fin_Si
Repetir desde (n=1;n<= k;n=n+1)
Si (Alquiler[i].código == Películas[n].código)
Películas[n].cantidad = Películas[n].cantidad + 1
Fin_Si
Fin_Repetir_Desde

Repetir desde (l=i;l<m;l=l+1)


Alquiler[l].carnet = Alquiler[l+1].carnet
Alquiler[l].código = Alquiler[l+1].código
Alquiler[l].entrega.dia = Alquiler[l+1].entrega.dia
Alquiler[l].entrega.mes = Alquiler[l+1].entrega.mes
Alquiler[l].entrega.año = Alquiler[l+1].entrega.año
Fin_Repetir_Desde
m = m-1
Fin_Repetir_Desde
Si (búsqueda1 == 0)
Mostrar (“No se consiguió el código del cliente”)
Fin_Si

7:
Mostrar (“Activar Usuario”)
Mostrar (“Introduzca el Numero de Carnet:”)
Leer (carnet)
busqueda1 = 0
Repetir Desde (i=1;i<j;i=i+1)
Si (carnet == Clientes[i].carnet)
busqueda1=1;
Clientes[i].estado='A';
Mostrar (“Cliente Reactivado Exitosamente...”)
Fin_Si
Fin_Repetir_Desde
Unidad 1. Computación 2. Lapso: 2017-I.

Si (busqueda1==0)
Entonces
Mostrar (“Numero de Carnet incorrecto”)
Fin_Si

8:
Mostrar (“Fin del Programa”)

Fin_En_Caso_de
Fin_Repetir_Mientras
Fin

Potrebbero piacerti anche