Actividad UNIT Tren

Les presentamos en esta oportunidad el enunciado de un problema que se resolvió en forma colaborativa entre alumnos de la Universidad Nacional de La Plata de la cátedra Programación 2 y alumnos de la Universidad Nacional de Tierra del Fuego de la cátedra de Algoritmos y Programación II.

Al final encontrarán una de las soluciones realizadas por uno de los grupos, el trabajo fue realizado a distancia y supervisado por tutores de ambas universidades.

Enunciado:

Se desea realizar un programa que simule el funcionamiento de asignar pasajeros para que puedan realizar un viaje a la ciudad del  Fin del Mundo en tren. La empresa dispone de P locomotoras (identificadas con los números 1 a P) y N vagones, identificados con los números 1 a N (idVagon).

Todos los vagones tienen la misma capacidad. Los asientos están  distribuidos en 20 filas. Cada fila tiene 4 asientos, identificados con las letras A, B, C, y D.

tren

Una formación está conformada por una locomotora y M vagones (M <= N). La locomotora se pone delante del primer vagón. Los vagones se ubican en la formación ordenados por su número de identificación (idVagon). Los asientos se van asignando por los pedidos que se reciben de los usuarios. Los usuarios, al hacer un pedido, indican la cantidad de asientos requeridos y, si lo desea, el número de vagón (idVagon) en el que quiere viajar.

 Para posibilitarlo el sistema debe informar  los vagones habilitados para ese viaje, la posición de ese vagón en la formación y la cantidad de lugares disponibles en cada vagón. La selección de asientos dentro del vagón la hace el sistema, asignando la cantidad de asientos solicitados a partir del primer asiento libre, de adelante hacia atrás, y de izquierda a derecha. En caso de que el usuario no haya indicado el número de vagón el sistema puede asignar asientos en vagones diferentes.

Se pide crear una unidad (UNIT) tren que permita:

  1. Crear una formación con M    Para generar el número de vagón (idVagon) que se engancha al tren se usa una función randómica que generaM números no repetidos entre 1 y N.
  2. Agregar vagones si la demanda de pasajes supera la capacidad prevista de los M vagones originales. Se pueden agregar vagones mientras no se supere el número de N vagones existentes. En ese caso la reserva se mantiene en una lista de espera.
  3. Dar de baja un vagón que tenga menos del 50% de ocupación, sólo si los usuarios asignados a ese vagón no han solicitado explícitamente viajar en él al hacer la reserva y los asignados pueden distribuirse en otros vagones. En cualquier caso deben emitirse los avisos correspondientes.
  4. Dar de baja una reserva y subir una reserva de lista de espera. Se subirá la primera reserva de la lista de espera que puede ser satisfecha en su totalidad. Se informará la reserva que pudo ser
  5. Informar la cantidad de vagones con pasaje completo.

Descargar:

Solución posible supervisada por los tutores

Actividad de UNIT Ciudad

Se plantea definir el siguiente TAD y luego implementar como UNIT de Pascal:

TipoCiudad con a lo sumo 10 lugares turísticos. Implemente las siguientes operaciones:

·         Crear una ciudad: crea una ciudad con un  nombre, con cantidad en cero de lugares turísticos.

·         Cambiar nombre a una ciudad: dada una ciudad cambiar su nombre.

·         Cantidad de lugares turísticos disponibles: devuelve la cantidad de lugares turísticos para una ciudad.

·         Agregar un lugar turístico: dada una ciudad y un nombre del lugar turístico lo agrega a  la ciudad.

·         Iniciar recorrido turístico: dada una ciudad inicia el recorrido por los lugares turísticos.

·         Devolver lugar turístico: dada una ciudad retorna el nombre del lugar turístico actual.

·         Siguiente lugar turístico: dada una ciudad se desplaza al siguiente lugar turístico.

·         Asignar una ciudad a otra ciudad.

·         Ver nombre de la ciudad, dada una ciudad devuelve el nombre de la misma.

 

(b)   Utilizando la UNIT definida en el punto (a) realice un programa que permita administrar las consultas de la agencia de viajes “Mucho recorrido”. Dicha agencia necesita:

i)                    Crear un árbol binario ordenado de nombres de ciudades. Para ello realice el procedimiento de carga de datos y creación del árbol.

ii)                  Con el árbol cargado en el punto i) resuelva la siguiente situación: un cliente quiere conocer los nombres de los destinos turísticos para una ciudad determinada. Dichos destinos deben ser mostrados por pantalla.

 Les dejamos las soluciones hechas por los alumnos en el siguiente mural:

act2

 

 

 

 

Uses de la UNIT Micro

dentro-autobus-de-dos-pisosLes dejamos el enunciado y un programa que utiliza el TAD- Micro presentado en el post anterior.

ENUNCIADO

Utilizando la UNIT MICRO realice un programa que permita administrar la venta de asientos de la compañía de micros llamada: “En Punto”. Dicha compañía dispone de varios micros.
Se pide un programa la venta de asientos.
i) Deben generarse todos los micros vacíos.
ii) Un cliente requiere comprar una determinada cantidad de asientos para un destino y una fecha determinada. Para esta operación el sistema informa los asientos disponibles por pantalla para ese destino y fecha o no hay disponibilidad en caso contrario. Luego el cliente indica que números de asientos desea comprar y se le informa por cada uno si la operación fue exitosa. Y muestra en pantalla el importe final que debe abonar por los asientos que ocupó.

Descargar el programa que utiliza la UNIT Micro desde el siguiente link: Uso_de_Unit_Micro

 

UNIT MICRO

auto-coche-omnibusLes dejamos el enunciado y  la implementación de la UNIT Micro realizada en la actividad 2.

Esta implementación fue realizada por los alumnos: Arcuri Antonio, Ríos Mauricio, Santos José.

ENUNCIADO

Defina e implemente la UNIT micro de 30 asientos (numerados de 1 a 30). Implemente las siguientes operaciones:
Crear un micro: crea un micro vacío para un destino, una fecha dada y con un importe de valor de asiento.
Ocupar un asiento específico: dado un número de asiento el mismo se ocupa.
Cantidad de asientos libres: retorna la cantidad de asientos no ocupados.
Liberar un asiento específico: dado un número de asiento el mismo se libera.
Asiento ocupado: dado un número de asiento, retorna Verdadero en caso que el mismo esté ocupado, Falso en caso contrario.
Ver asiento libre: retorna un número de asiento libre.
Asiento válido: dado un número de asiento retorna verdadero si el mismo pertenece al micro, falso en caso contrario.
Hay asiento libre: retorna verdadero en caso que exista al menos un asiento libre, falso en caso contrario.
Asignar un micro a otro micro.

Descarga la solución de la UNIT Micro desde el siguiente link: UNIT micro

TAD Lista de enteros

listaIntegerHola  les dejamos el siguiente link con el desarrollo del TAD Lista de enteros , está escrito en un pseudocódigo para Pascal. Recuerden que si lo quieren compilar deben transformar el TAD en una UNIT de pascal siguiendo las indicaciones vistas en la teoría.

Descargar TAD_Lista_De_enteros

Código de la UNIT “Cola de enteros”

colaHola  les dejamos el código completo de una cola de enteros en Pascal, esta preparado para ser compilado como una UNIT.

UNIT Cola de Enteros

 

TAD CUADARADO

Les dejo algunas ideas para que generen el Type para el TAD CUADRADO

cua1Opción 1.
Con la posición de los cuatro vértices en las coordenadas de un plano.
Type
 punto = record
x: real;
y: real;
 end;

 

 

{Definen luego dos puntos, el inferior y el superior}
cuadrado = record
infIzq, infDer, supIzq, supDer: punto
end;

 

cua2Opción 2
Con la posición de un punto y el tamaño del lado.

Type

punto = record
x: real;
y: real;
end;

 

cuadrado = record
origen: punto
lado: real;
end;


Ejemplo hacer una función que calcule el área del cuadrado:
Utilizando la opción 2 podría resolverse:

Function Area(c: cuadrado): real;
Area := c.lado * c.lado
End;

Usando la Opción 1:
Function Area(c: cuadrado): real;
Var
lado: real;
begin
{lado es la distancia entre dos puntos}
lado := (c.infIzq.x – infDer.x);
Area: = (lado*lado);
End;

Apunte sobre UNITS

Les acercamos un apunte realizado por la cátedra sobre UNITS en Pascal.

Lo pueden descargar desde el siguiente enlace:

Apunte_UNITS_EN_PASCAL

También les dejamos un link  a una página que presenta los conceptos básicos de UNITS en pascal:

Enlace a Síntesis de UNITS

TAD

Minientrada

Les dejo un link desde el cual podrán repasar la construcción de las UNITS en Free Pascal:

 http://www.freepascal.es/tutorials/cupas12.php