Beruflich Dokumente
Kultur Dokumente
Antes de abordar la Unidad I de ste curso, se dar un breve repaso a la definicin y las operaciones bsicas de las Estructuras de Datos Homogneas (Arreglos) vistas en el curso de Computacin I.
10
Un arreglo (matriz o vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo (entero, real o carcter). Desde el punto de vista lgico un arreglo se puede ver como un conjunto de elementos ordenados en fila o filas y columnas si tuviera dos dimensiones. 2. Declaracin 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 carcter) 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 aaden entre corchetes el o los nmeros que indican las cantidades de celdas que contiene el arreglo y sus dimensiones, ver la tabla de ejemplo a continuacin. Tipo Identificador (Nombre) Entero Cedulas Real Temperaturas Caracter Nombre Entero Puestos Real Promedio_Mes Caracter Lista_Alumnos Entero Coordenadas_3D 3. ndices. Todo arreglo se compone de un determinado nmero de elementos. Cada elemento es referenciado o identificado por la posicin que ocupa dentro del vector. Dichas posiciones son llamadas ndice y siempre son correlativos. El trmino indexar o indexacin, en este caso, es sinnimo de numerar, y dicha numeracin se puede llevar a cabo de tres formas distintas: [Dimensin1, Dimensin2, , DimensinN]
[40] [12] [10] [5, 6] [12, 31] [40, 10] [10, 10, 10]
Indexacin 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 tpico de lenguaje que utiliza este modo de indexacin. ndice A[10] 0 1 2 3 4 5 6 7 8 9
Indexacin Base-Uno (1). En esta forma de indexacin, 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 Pseudocdigo se utiliza ste tipo de indexacin. ndice A[10] 1 2 3 4 5 6 7 8 9 10
Indexacin Base-N (n). Este es un modo verstil de indexacin en la que el ndice del primer elemento puede ser elegido libremente, en algunos lenguajes de programacin se permite que los ndices puedan ser negativos e incluso de cualquier tipo escalar (tambin cadenas de caracteres). ndice A[10] 15 16 17 18 19 20 21 22 23 24
4. Tipos de Arreglos segn sus Dimensiones. En el tem de declaracin se vio cmo los arreglos pueden tener hasta N dimensiones, y segn sta cantidad se puede clasificar como: Unidimensional. ste tipo de arreglo tambin llamado vector, se puede visualizar como una columna o una fila de celdas apiladas. Al ser declarado, los corchetes que acompaan al identificador llevan un solo nmero asociado, el nmero de celdas. Si se visualiza como un vector fila:
ndice
Edades[10]
10
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 matemtico. Al declarar ste tipo de arreglo, los corchetes que acompaan al identificador contendrn dos nmeros separados por comas, el primero de ellos indica el nmero de filas de la matriz y el segundo indica el nmero de columnas.
Columnas
ndices 1 2 3 4 1 2 3 4 5
Multidimensional. Cuando un arreglo tiene tres o ms dimensiones, se clasifica como multidimensional, stos son utilizados en ciertos casos.
Filas
1 2 3 4 5
3 2 1 1 2 3 4 5 6
5. Operaciones con Arreglos. Asignacin. Elemento del Arreglo Unidimensional Elemento del Arreglo Multidimensional Arreglo Unidimensional A[8]=6 Ventas[2,1] =50 Entero A[100] Repetir_Desde i=1 hasta i<=100 A[i] =0 Fin_Repetir_Desde Entero A[5,10] Repetir_Desde i=1 hasta i<=5 Repetir_Desde j=1 hasta j<=10 A[i,j] =0 Fin_Repetir_Desde Fin_Repetir_Desde
Arreglo Multidimensional
Lectura. Elemento del Arreglo Unidimensional Leer (A[8]) Algoritmo Lectura_Vector_P Entero P[10], i Repetir_Desde i=1 hasta i<=10 Mostrar(Introduzca el elemento) Leer (P[i]) Fin_Repetir_Desde Fin
Arreglo Unidimensional
Recorrido. Ejemplo 1. Procesar las cuotas anuales de un prstamo realizando la lectura del arreglo, suma y promedio.
ndice
Cuotas[12]
10
11
12
Repetir_Desde i=1 hasta i<=12 Leer( Cuotas [12]) Suma=suma+cuotas[i] Fin_Repetir_Desde Promedio=suma/12 Mostrar (Total=, suma) Mostrar (Promedio=, promedio) Fin Ejemplo 2.
Inicio del ciclo para la lectura y sumatoria de los valores de las 12 cuotas del arreglo Fin del Ciclo Clculo del Promedio de las cuotas Mostrar los valores calculados
Del algoritmo anterior, disee un cdigo que muestre las cuotas mayores al promedio. Algoritmo Cuotas Mayores al Promedio Repetir_Desde i=1 hasta i<=12 Si Cuotas [i] > promedio Mostrar (Cuotas [i]) Fin_Si Fin_Repetir_Desde Ejemplo 3. Disear un algoritmo que realice la suma de dos matrices bidimensionales. Algoritmo Suma_Matrices Inicio Real A[5,4], B[5,4], C[5,4] Entero i, j Repetir_Desde i=1 hasta i<=5 Repetir_Desde j=1 hasta j<=4 Leer(A[i,j]) Fin_Repetir_Desde Fin_Repetir_Desde Repetir_Desde i=1 hasta i<=5 Repetir_Desde j=1 hasta j<=4 Leer(B[i,j]) Fin_Repetir_Desde Fin_Repetir_Desde Repetir_Desde i=1 hasta i<=5 Repetir_Desde j=1 hasta j<=4 C[i,j] =0 Fin_Repetir_Desde Fin_Repetir_Desde
Del Algoritmo anterior Inicio del Ciclo Condicin de que si el valor de la cuota es mayor al del promedio, ser mostrado en pantalla Fin del Ciclo
Nombre del Algoritmo Declaracin de Variables Inicio de los Ciclos para introducir los valores del arreglo A Fin de los Ciclos Inicio de los Ciclos para introducir los valores del arreglo B Fin de los Ciclos Inicio de los Ciclos para inicializar el arreglo C Fin de los Ciclos
Repetir_Desde i=1 hasta i<=5 Repetir_Desde j=1 hasta j<=4 C[i,j]=A[i,j]+B[i,j] Fin_Repetir_Desde Fin_Repetir_Desde Fin Bsqueda.
Inicio de los ciclos para recorrer los arreglos y realizar la suma de los mismos Fin de los ciclos
Operacin para encontrar la posicin de un elemento entre un conjunto de datos dados. Si existe: Mostrar (Elemento Existe) Mostrar (Posicin, i) Si no existe: Mostrar (El elemento no existe) Ejemplo 1. Disee un algoritmo que en un arreglo de cien elementos enteros permita buscar un nmero en particular. Algoritmo de Bsqueda Secuencial. Inicio Entero Lista[100], i, Buscado, Bandera Repetir_Desde i=1 hasta i<=100 Leer (Lista[i]) Fin_Repetir_Desde Leer (Buscado) Bandera=0 Repetir_Desde i=1 hasta i<=100 Si (Lista[i]=Buscado) Entonces Mostrar(Elemento Existe) Mostrar(Posicin,i) Bandera=1 Fin_Si Fin_Repetir_Desde Si (Bandera=0) Entonces Mostrar(Elemento No existe) Fin_Si Fin
Nombre del algoritmo Declaracin de Variables Ciclo para cargar los valores del arreglo Lista Lectura del parmetro que buscamos Inicializacin de una bandera para saber el estado de la bsqueda Inicio del ciclo para realizar la bsqueda Si se encuentra el elemento, se muestra el mensaje que se encontr y la posicin, la bandera de la bsqueda cambia a 1 para indicar que fue exitosa Si se termin el ciclo de bsqueda y la bandera est en cero (0), quiere decir que el elemento no fue hallado
Ordenamiento. Los algoritmos de ordenamiento consisten en organizar un conjunto de datos segn un criterio especfico (decreciente o creciente). Existen tres mtodos bsicos para realizar esta operacin, Mtodo del Intercambio o Burbuja, Mtodo de Insercin o de la Baraja y Ordenamiento por Seleccin. (1) Mtodo del Intercambio o Burbuja. Este mtodo de ordenamiento consiste en comparar los elementos adyacentes (de 2 en 2) si A[n]>A[n+1] intercambiamos posiciones. La evaluacin e intercambio de todos los elementos se deben hacer en (n-1)*(n-1) comparaciones, siendo n el nmero de elementos del arreglo. Supongamos que tenemos el siguiente arreglo, y queremos ordenando mediante el mtodo de la Burbuja. A [1] 5 A[2] 6 A[3] 3 A[4] 2 A[5] 1
1 1 1
2 2 2
3 3 3
5 5 5
6 6 6
Algoritmo Genrico Ordenamiento Burbuja. Inicio Entero A[5], I, J, AUX Repetir_Desde I=1 hasta I<=5 Leer (A[I]) Fin_Repetir_Desde Repetir_Desde I=1 hasta I<=4 Repetir_Desde J=1 hasta J<=4 Si ( A[J]>A[J+1]) Entonces AUX = A[J] A[J] = A[J+1] A[J+1] = AUX Fin_Si Fin_Repetir_Desde Fin_Repetir_Desde Repetir_Desde I=1 hasta I<=5 Mostrar (A[I]) Fin_Repetir_Desde Fin (2) Mtodo de Insercin o Baraja.
Nombre del algoritmo Declaracin de Variables Ciclo para cargar los cinco valores del arreglo A Ciclo anidado para recorer (n-1)*(n-1) veces el arreglo y hacer las comparaciones, en este ejemplo n=5, por lo que I y J llegan hasta 4. Si el elemento de la izquierda es mayor al de la derecha, entonces se intercambian utilizando una variable auxiliar. Si no, conservan sus posiciones.
En este mtodo 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 continuacin, A [1] 5 A[2] 6 A[3] 3 A[4] 2 A[5] 1
En el primer ciclo de comparaciones: 5 5 3 3 3 6 3 5 5 5 3 6 6 6 2 2 2 2 2 6 1 1 1 1 1 Primer Ciclo Segundo Ciclo Tercer Ciclo n=2 n=3 n=4
2 2 2 2 1
3 3 3 1 2
5 5 1 3 3
6 1 5 5 5
1 6 6 6 6
n=5
Algoritmo Genrico Ordenamiento por Insercin. Inicio Entero A[5], I, J, AUX Repetir_Desde I=1 hasta <I=5 Leer (A[I]) Fin_Repetir_Desde Repetir_Desde J=2 hasta J<=5 AUX = A[J] I= J-1 Repetir Mientras (I>0 && A[I]>AUX) A[I+1] = A[I] A[I] = AUX I = I-1 Fin_Repetir_Mientras Fin_Repetir_Desde Repetir_Desde I=1 hasta I<=5 Mostrar (A[I]) Fin_Repetir_Desde Fin (3) Mtodo de Ordenamiento por Seleccin.
Nombre del algoritmo Declaracin de Variables Ciclo para cargar los cinco valores del arreglo A Ciclo para realizar el recorrido del arreglo Se deposita el valor a comparar en auxiliar, y a travs de la variable I se compara con el valor a su izquierda
Este mtodo 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 continuacin, haremos un ejemplo de ste mtodo de ordenamiento. A [1] 5 5 A[2] 6 6 A[3] 3 3 A[4] 2 2 A[5] 1 1
1 1 1 1
6 2 2 2
3 3 3 3
2 6 6 5
5 5 5 6
Algoritmo Ordenamiento por Seleccin. Inicio Entero A[5], I, J, K, MENOR Repetir_Desde I = 1 hasta I<=5 Leer (A[I]) Fin_Repetir_Desde Repetir_Desde I=1 hasta I<=4 // I=N-1 MENOR = A[I] K=I Repetir_Desde J=I+1 hasta J<=5 // J=N Si ( A[J]<MENOR) Entonces MENOR = A[J] K=J Fin_Si Fin_Repetir_Desde A[K] = A[I] A[I] = MENOR Fin_Repetir_Desde Repetir_Desde I=1 hasta I<=5 Mostrar (A[I]) Fin_Repetir_Desde Fin
Nombre del algoritmo Declaracin de Variables Ciclo para cargar los cinco valores del arreglo A Ciclo para realizar el recorrido del arreglo con finalizacin en el penltimo elemento Se deposita el primer valor del arreglo en MENOR, y a travs de la variable K que sirve para indicar el ndice del elemento que se va ordenando Se repite N veces el ciclo para conseguir el menor de los elementos del arreglo, que se deposita en MENOR y a travs de K se indica en cual posicin estaba Finalmente se intercambia el valor del contador I con el menor de los valores encontrado
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 Inicio Real Venta[100], iva[100], monto[100] Real Suma_total, Suma_iva Repetir_Desde i=1 hasta i<=100 Leer (Venta[i]) Fin_Repetir_Desde Suma_total=0 Suma_iva=0 Repetir_Desde i=1 hasta i<=100 iva[i] = Venta[i]*0,12 monto[i] = Venta[i]+iva[i] Mostrar (monto[i]) Suma_total=Suma_total+monto[i] Suma_iva=Suma_iva+iva[i] Fin_Repetir_Desde Mostrar(Suma_total, Suma_iva) Fin
Nombre del Algoritmo Declaracin de Variables Ciclo para introducir los valores del arreglo Ventas Inicializacin del acumulador Suma_total y Suma_iva Ciclo para calcular el iva y sumar el monto del iva mas la venta del los arreglos
Fin del Ciclo Mostrar los valores de sumas de totales e iva calculados
2) Dado un conjunto de 36 nmeros enteros llene una matriz de orden 6 con dichos nmeros y calcule: (a) La sumatoria de los nmeros ubicados en la primera y la ltima fila. (i=1 e i=6, suma[1]). (b) La sumatoria de los nmeros ubicados en la primera y la ltima columna. (j=1 y j=6, suma[2]). (c) La sumatoria de los nmeros por arriba de la diagonal principal y los nmeros por debajo de la diagonal principal. (i<j, suma[3] e i>j,suma[4]). A11 A21 A31 A41 A51 A61 Algoritmo Suma Matriz Inicio Entero A[6,6], j, i, suma[4] A12 A22 A32 A42 A52 A62 A13 A23 A33 A43 A53 A63 A14 A24 A34 A44 A54 A64 A15 A25 A35 A45 A55 A65 A16 A26 A36 A46 A56 A66
Repetir_Desde i=1 hasta i<=6 Repetir_Desde j=1 hasta j<=6 Leer (A[i,j]) Fin_Repetir_Desde Fin_Repetir_Desde Repetir_Desde i=1 hasta <i=6 suma[i] =0 Fin_Repetir_Desde Repetir_Desde i=1 hasta i<=6 Repetir_Desde j=1 hasta j<=6 Si (i=1 || i=6) Entonces suma[1] =suma[1]+A[i,j] Fin_Si Si (j=1 || j=6) Entonces suma[2] = suma[2]+A[i,j] Fin_Si Si (i<j) Entonces suma[3] = suma[3]+A[i,j] Fin_Si Si (j>i) Entonces suma[4] = suma[4]+A[i,j] Fin_Si Fin_Repetir_Desde Fin_Repetir_Desde Mostrar(Suma Mostrar(Suma Mostrar(Suma Mostrar(Suma Fin de de de de Filas, suma[1]) Columnas, suma[2]) la diagonal superior, suma[3]) la diagonal inferior, suma[4])
Lectura de la matriz A
Inicializacin Suma
del
Vector
Ejemplo: un registro de los pasajeros de un avin puede contener los siguientes datos:
Tipo de Dato Nombre de la Variable Caracter Nombre Entero Entero Entero Real Carcter Caracter Origen Destino
Los campos se caracterizan por su tamao y su tipo. Un subcampo es un campo perteneciente a otro campo.
Ejemplo: el campo fecha est compuesto por los subcampos da, mes y ao:
Fecha Dia Mes Ao 2. Definicin de un Registro. Un registro es un tipo de dato definido por el usuario, ste se debe definir antes de que se pueda utilizar. Formato de la Definicin. Registro Nombre_Registro tipo nombre_campo_1 tipo nombre_campo_2 tipo nombre_campo_n 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 declarar despus de la definicin del registro, ya que la definicin especifica simplemente el nombre y el formato del registro, pero no reserva el espacio en memoria. Ejemplo. Registro Trabajador caracter nombre[10] real sueldo entero edad Fin Registro
3.1. Declaracin de Variables Tipo Registro. Cada declaracin 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 Declaracin Nombre_Registro Nombre_Variable Ejemplo Trabajador Admnistrativo, Obrero
En el ejemplo anterior se declaran 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 Nombre_Variable_Tipo_Registro.Nombre_Campo Ejemplo Asignacin Obrero.nombre = Juan Lectura Leer (Obrero.nombre)
3.3. Tipos de Campos. Campos Simples. En este caso los campos del registro estn formados por variables de tipo simple, por ejemplo, un registro de la nota de un curso podra definirse de la manera siguiente. Registro Tabla_Alumno caracter nombre[20] entero cedula 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] entero cedula real notas[4] Fin_Registro
La estructura del Registro sera como se muestra a continuacin. Tabla_Alumno nota[1] nota[2] 14 19
cedula 17892475
nota[3] 13
nota[4] 16
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 //Definicin de la Variable Tipo Registro Alumno.nota[1]14 Alumno.nota[2]19 EJERCICIOS RESUELTOS. 1. Se requiere disear un algoritmo que almacene en una estructura de datos los nombres, las cdulas y las notas de un grupo de 40 alumnos. El clculo 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 caractersticas: Ingreso de los datos, las notas de los alumnos, y realizar el clculo de la nota final. Visualizacin de la tabla con los datos cargados. Clculo de Estadsticas: Cantidad de Alumnos aprobados y Cantidad de alumnos Reprobados. Estas opciones se deben ejecutar mediante un men: [1] Ingreso de Datos. [2] Visualizacin de los Alumnos. [3] Estadsticas del Curso. [4] Buscar Alumno por su C.I. [5] Salir del Programa.
Alumnos [40] Tabla_Alumnos Nombre 1 2 . . . 40 Cedula Notas [5] Notas [1] Notas [2] Notas [3] Notas [4] Notas [5]
Algoritmo Notas de Alumnos Inicio // Declaracin de la Estructura del Registro Registro Tabla_Alumnos Carcter nombre[15] Entero cedula Real notas[5] Fin_Registro // Definicin de la Variable de la Estructura del Registro Tabla_Alumnos Alumnos[40] // Declaracin de otras variables Entero opcion, i, j, aprobados, reprobados, cedulab, bandera opcion = 1 Repetir mientras (opcin>=1 && opcion <5) Mostrar (Menu de Opciones) Mostrar ([1] Ingreso de Datos) Mostrar ([2] Visualizacin de los Alumnos) Mostrar ([3] Estadsticas del Curso) Mostrar ([4] Salir del Programa) Leer (opcion) Repetir Mientras (opc<1 || opc>5) Mostrar (Opcin Invlida, reintroduzcala) Leer (opc) Fin_Repetir_Mientras 1: En caso de (opcion) Repetir desde i=1 hasta i<=40 Mostrar (Alumno , i) Mostrar (Ingrese el nombre del alumno) Leer (Alumnos[i].nombre) Mostrar (Ingrese la cdula del alumno) Leer (Alumnos[i].cedula) Alumnos[i].notas[5] = 0 //Inicializacin del Acumulador para la nota Repetir desde j=1 hasta j<=4 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)
2: Mostrar(Nombre Cedula Nota 1 Nota 2 Nota 3 Nota 4 Nota F) Repetir desde i=1 hasta i<=40 Mostrar (Alumnos[i].nombre) Mostrar (Alumnos[i].cedula) Repetir desde j=1 hasta j<=5 Mostrar (Alumnos[i].notas[j]) Fin_Repetir_Desde Fin_Repetir_Desde 3: aprobados = 0 reprobados = 0 Repetir desde i=1 hasta i<=40 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: //Bsqueda de alumno busqueda = 0 Mostrar ("Introduzca la Cdula del Alumno: ") Leer (cedulab) Repetir_Desde i=1 hasta i<=40 Si (cedulab = Seccion_N1[i].cedula) Entonces busqueda=1 Mostrar ("Las Notas del Alumno son: ") Repetir_Desde (j=1 hasta j<=5) Mostrar ("Nota ", j, ": ", Seccion_N1[i].Notas[j]) Fin_Repetir_Desde Fin_Si Fin_Repetir_Desde Si ( busqueda=0) Entonces Mostrar ("Cdula no existente") Fin_Si
5: Mostrar(Fin del Programa) Fin_En_Caso_de Fin_Repetir_Mientras Fin 2. Una videotienda posee 100 tipos de pelculas que son alquiladas a clientes. Las pelculas estn codificadas, por lo que por cada una de ellas se tiene: cdigo, ttulo, gnero y cantidad existente. Adems, existe un registro de los 100 usuarios con los siguientes datos: nmero de carnet, nombre, estado (A: activo y S: suspendido). Cada uno de los 100 usuarios puede alquilar una pelcula slo si no est suspendido y para ello se debe registrar en el momento del alquiler: nmero de carnet, cdigo de la pelcula y fecha de entrega programada. Si al entregar la pelcula, la fecha de entrega es posterior a la fecha programada el da del alquiler, se coloca el estado como suspendido. Se pide elaborar un algoritmo que permita ejecutar los siguientes procesos: Disear las estructuras de datos apropiadas para guardar los datos. Registrar a los usuarios y a las pelculas. Alquilar una pelcula a un cliente determinado. Entregar una pelcula por parte del cliente, considerando el caso de suspensin si la entrega es posterior a la fecha programada.
La ejecucin de cada uno de los procesos debe ser seleccionada a travs de un men de opciones, como se muestra a continuacin: [1] [2] [3] [4] Ingresar Pelculas. Ver listado de Pelculas. Registrar Cliente. Ver listado de Clientes. [5] [6] [7] [8] Alquilar Pelcula. Devolver Pelcula. Activar Cliente. Salir del Sistema.
Peliculas [100]
k
1 2 . . . 100
Clientes [100]
j
1 2 . . . 100
Alquiler [100]
m
Carnet 1 2 . . . 100
Algoritmo Alquiler de Pelculas Inicio //Declaracin de los Registros Registro Tabla_Peliculas Entero codigo, cantidad Carcter titulo[15], genero[10] Fin_Registro Registro Tabla_Usuarios Entero carnet Carcter nombre[10], estado Fin_Registro Registro Fecha Entero dia, mes, ao Fin_Registro Registro Tabla_Alquiler Entero carnet, cdigo Fecha entrega Fin_Registro //Definicin de las Variables Tipo Registro Tabla_Peliculas Peliculas [100] Tabla_Usuarios Clientes [100] Tabla_Alquiler Alquiler [100] // Declaracin de otras variables Entero da, mes, ao, carnet, bsqueda1, cdigo, bsqueda2, opcion =1, Suspendido Entero i, n, j =1, k =1, m =1, l Carcter respuesta Repetir mientras (opcin>1 && opcion < 8) Mostrar (Men de Opciones) Mostrar ([1] Incluir una Pelcula) Mostrar ([2] Ver Listado de Pelculas) Mostrar ([3] Registrar Cliente) Mostrar ([4] Ver Listado de Clientes) Mostrar ([5] Alquilar Pelcula) Mostrar ([6] Devolver Pelcula) Mostrar ([7] Reactivar Usuario) Mostrar ([8] Salir) Leer (opcion) Repetir Mientras (opc<1 || opc>8)
Mostrar (Opcin Invlida, 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 Pelcula) Mostrar (Cdigo) Leer (Peliculas[k].codigo) Mostrar (Cantidad) Leer (Peliculas[k].cantidad) Mostrar (Ttulo) Leer (Peliculas[k].titulo) Mostrar (Gnero) Leer (Peliculas[k].genero) k=k+1 Mostrar (Desea Ingresar otra Pelcula?? S/N) Leer (respuesta) Fin_Repetir_Mientras 2: Mostrar (Listado de Pelculas) Mostrar (Cdigo Ttulo Gnero Repetir desde i =1 hasta i<k 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 Cantidad)
4: Mostrar (Codigo Nombre Repetir desde i =1 hasta i<j Mostrar (Clientes[i].carnet) Mostrar (Clientes[i].nombre) Mostrar (Clientes[i].estado) Fin_Repetir_Desde 5: Mostrar (Alquiler de Pelcula) Mostrar (Introduzca el Nmero de Carnet del Cliente) Leer (carnet) busqueda1 = 0 Repetir desde i = 1 hasta i < j Si (Clientes[i].carnet == carnet) Entonces bsqueda1 = 1 Si (Clientes[i].estado == A o Clientes[i].estado == a) Entonces Mostrar (Introduzca el Cdigo de la Pelcula) Leer (cdigo) bsqueda2 = 0 Repetir desde n = 1 hasta n < k Si (Peliculas[n].codigo == codigo) Entonces bsqueda2 = 1 Si (Peliculas[n].cantidad >1) Entonces 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 (Ao:) Leer(Alquiler [m].entrega.ao) m=m+1 Si no Mostrar (No hay en Existencia) Fin_Si Fin_Si Fin_Repetir_Desde Si (busqueda2 == 0) Estado)
Entonces Mostrar (No se encontr el cdigo de la Pelcula) Fin_Si Si no Fin_Si Fin_Si Fin_Repetir_Desde Si (busqueda1 == 0) Entonces Mostrar (No se consigui el cdigo del cliente) Fin_Si 6: Mostrar (Devolver Pelcula) Mostrar (Introduzca el Nmero de Carnet del Cliente) Leer (carnet) bsqueda1 = 0 Repetir desde i = 1 hasta i < m Si (Alquiler[i].carnet == carnet) Entonces bsqueda1 = 1 Mostrar (Introduzca la fecha actual) Leer (dia, mes, ao) Si (ao > Alquiler [i].entrega.ao) Entoces Suspendido = 1 Si no Si (mes >= Alquiler [i].entrega.mes && dia > Alquiler [i].entrega.dia) Suspendido = 1 Fin_Si Fin_Si Si (Suspendido = 1) Entonces Repetir desde n = 1 hasta n < j Si (Clientes[n].carnet == carnet) Entonces Clientes [n].estado = S Fin_Si Fin_Repetir_Desde Fin_Si Repetir desde n=1 hasta n<k Si (Alquiler[i].cdigo == Pelculas[n].cdigo) Entonces Pelculas[n].cantidad = Pelculas[n].cantidad + 1 Fin_Si Mostrar (El cliente est Suspendido)
Fin_Repetir_Desde Repetir desde l =i hasta l<m Alquiler[l].carnet = Alquiler[l+1].carnet Alquiler[l].cdigo = Alquiler[l+1].cdigo Alquiler[l].entrega.dia =Alquiler[l+1].entrega.dia Alquiler[l].entrega.mes = Alquiler[l+1].entrega.mes Alquiler[l].entrega.ao = Alquiler[l+1].entrega.ao Fin_Repetir_Desde m = m-1 Fin_Repetir_Desde Si (bsqueda1 == 0) Entonces Mostrar (No se consigui el cdigo del cliente) Fin_Si 7: Mostrar (Activar Usuario) Mostrar (Introduzca el Numero de Carnet:) Leer (carnet) busqueda1 = 0 Repetir Desde i = 1 hasta i<j Si (carnet == Clientes[i].carnet) Entonces busqueda1=1; Clientes[i].estado='A'; Mostrar (Cliente Reactivado Exitosamente...) Fin_Si Fin_Repetir_Desde Si (busqueda1==0) Entonces Mostrar (Numero de Carnet incorrecto) Fin_Si 8: Mostrar (Fin del Programa)