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 Arbol

Hola a tod@s les dejamos en esta oportunidad el enunciado y el mural de resoluciones de la actividad 1 del primer cuatrimestre del 2014.

Esta actividad fue desarrollada en equipos en forma colaborativa

A continuación encontrarán el enunciado y el mural. En el mural podrán observar las diferentes soluciones de cada grupo y una de las soluciones revisada en la teoría.

Enunciado

alumnosSe solicita crear una estructura eficiente para almacenar la información de los alumnos de un instituto de formación superior. De cada alumno se debe registrar número de alumno (es alfanumérico), DNI (8 números sin puntos), apellido, nombre y una lista de las becas que fueron otorgadas a ese alumno (código de beca (numérico, fecha de inicio, fecha de fin y nombre de la beca). Dicha estructura es un árbol y  se encuentra ordenada por DNI.
Se pide:
a. Realizar un módulo que genere la carga de los alumnos en la estructura eficiente.
b. Realizar un módulo que recorra la estructura de alumnos e informe el apellido y nombre de aquellos alumnos que tienen becas con código 723.

Mural de soluciones

mural1_2014

Mural de soluciones al problema de elegir personas para dos equipos

Les dejamos el enlace al mural donde encontrarán los ejercicios resueltos por los alumnos con sus correcciones.

mural1

 

Selección de jugadores para dos equipos

ronda

Imagen extraída de http://laura-laurarocket.blogspot.com.ar/2011/08/la-ronda-juego-musicalizado-que-se-hace.html

Se quiere crear un programa que simule el funcionamiento del  “Procedimiento de selección”. Supongamos un grupo de amigos se juntan para jugar un juego de mesa que se desarrolla en dos equipos. Para eso deben seleccionar que amigos estarán en cada equipo.
La selección la quieren realizar de la forma más azarosa posible y se les ocurre realizar el siguiente procedimiento de selección:
a.    Los alumnos se ponen en ronda.
b.    Se comienza por un compañero que es señalado como el primero de la ronda.
c.    Tira un dado (con valores entre 1 y 6)
d.    En el primer tiro se avanzan tantos lugares en el sentido de las agujas del reloj, como indique el dado.
e.    La persona seleccionada sale de la ronda y va a formar parte del equipo 1.
f.    El siguiente a la persona que fue elegida vuelve a tirar el dado.
g.    Pero esta vez se debe mover en el sentido antihorario, contando tantos lugares como el dado indique.
h.    La persona seleccionada sale de la ronda y va a parar al equipo 2.
i.    El procedimiento se sigue realizando hasta que quede una sola persona y esa persona va al equipo que le corresponde (puede ser el 1 o el 2)

Se pide desarrollar un programa que simule el procedimiento de selección que:
1.    Utilice las estructuras de datos adecuadas al problema. Tengan presente que puede ocurrir que tengan que construir una estructura nueva.
2.    No deben utilizar memoria de más (eficiencia con el uso de memoria).
3.    No deben hacer recorridos de mas (eficiencia con respecto al tiempo de ejecución)
4.    Deben crear y cargar la estructura inicial de personas a jugar.
5.    Deben MODULARIZAR la solución, sino está mal.
6.    Al finalizar la selección deben mostrar quienes quedaron en el equipo 1 y quienes quedaron en el equipo 2.
7.    El programa debe tener todos los mensajes necesarios para saber que cargar, que esta mostrado que se debe hacer, ejemplo: Ingrese un nombre y presione  Enter, etc.

__________________________________________________________________________

Los alumnos trabajaron en grupos y se acordo la siguiente solución durante el segundo cuatrimestre de 2013:

Solución acordada

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

Juego de la oración

listaCircularAlumnos les dejamos el enunciado e implementación del juego de la oración en Pascal.

Es mismo fue realizado utilizando una lista circular y fue acordado entre los alumnos del curso del primer cuatrimestre de 20131.

ENUNCIADO:

Se quiere crear un programa que simule el “Juego de la Oración”. Supongamos un grupo de amigos que se juntan a jugar al juego de la oración. Se disponen los participantes en una ronda. Cada persona debe ir agregando una palabra, a una oración que se va creando conjuntamente. Es decir, se inicia por un participante diciendo una palabra, el segundo debe decir la palabra que dijo el anterior más una nueva, el tercero las dos palabras anteriores más una nueva, etc. Así si algún participante olvida la oración o agrega más de una palabra queda eliminado.

El juego finaliza cuando queda un solo participante. El juego informa el nombre y apellido de la persona ganadora.

Notas:
• Tenga en cuenta en la solución que plantee que debe cargar la estructura de datos inicial para poder jugar.
• El juego debe funcionar bien y garantizar que se termine al producirse una frase errónea.
• Considere alguna situación que permita interrumpir el programa en el caso que nunca ningún participante se equivoque.
• Debe modularizar la solución.
• Debe simular todo el juego, teniendo en cuenta la pantalla, debe ir informando si el juego va ok o se produce un error, que se debe ingresar.
• Debe informar el nombre del jugador ganador.
• Debe informar el nombre de la persona que sale del juego cada vez que se comete un error.

Descargar desde el siguiente link el: Juego_De_La_oracion

 

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

 

Actividad de listas Año 2012

A continuación dejamos algunas de las actividades realizadas en el curso y las propuestas de solución que realizaron los alumnos.

En esta oportunidad vamos a trabajar con el concepto de lista circular doblemente enlazada:

En una lista circular doblemente enlazada, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan bien como en una lista doblemente enlazada.

 

 

PROBLEMA 1

1. Realizar un programa que:
a. Genere una lista doblemente enlazada circular donde cada nodo contiene un número entero.
b. Realizar un modulo que dada una lista doblemente enlazada circular y un valor n >0, debe recorrer la lista y obtener en cada pasada el cociente de la división del valor del nodo por el número n (el divisor). Por ejemplo si el nodo tiene el valor 35 y hay que dividir por 5, lo que queda en el nodo es 7.
El recorrido se termina cuando todos los nodos de la lista circular presentan en su contenido un valor donde el resto de la división es igual al valor del dividendo.

Descargar la solución: ListaCircularDobleG8 realizada en Septiembre de 2012 por los alumnos Ailan Julian,  Colazo Exequiel y Crudele Emilio.

 

PROBLEMA 2

Realizar un programa que:
a. Genere una lista doblemente enlazada circular. Cada nodo contiene un número entero.
b. Realizar un modulo que dada una lista doblemente enlazada circular y un valor n >0, debe recorrer la lista y modificar el valor de cada nodo con el valor actual del nodo elevado a la potencia n. En cada pasada el valor de n se decrementa en uno. El recorrido se detiene cuando n es menor o igual a 1.

Descargar la solución ListaCircularG13Potencias realizada en Septiembre de 2012 por los alumnos: : Alza Juan Mateo;  Basanta Sofia;   Blanco Regojo Mauricio; Evangelista y Mauro Ariel

Les dejamos también otra solución ListaCircularG11Potencias realizada por otro grupo al mismo problema en septiembre 2012. Los alumnos son: Bob Mauro David, Discoli Tomás, Garcia  Manuel, Garcia Morzone, Isidro Sergio, Santarcángelo, Zazzetta Marco