Está en la página 1de 4

Universidad Técnica Federico Santa María

Departamento de Informática

ESTRUCTURA DE DATOS
EXPERIENCIA DE LABORATORIO N°2
(del 14 al 28 de Abril de 2011)

Profesor: Mauricio Solar msolar@inf.utfsm.cl


Profesora: Lorna Figueroa lorna.figueroa@usach.cl

Implementación de Listas en C según métodos de Python

1. OBJETIVOS

Implementar en C algunos de los métodos que Python tiene para el manejo de Listas.
Programar una pequeña aplicación utilizando los métodos implementados.

2. MÉTODOS PARA LISTAS EN PYTHON

Las Listas son parte esencial de Python, un lenguaje de alto nivel, por lo cual se disponen de ciertos métodos
que facilitan el trabajo con ellas. En tanto en C, el trabajo con estructuras de datos dinámicas puede ser un
tanto más complejo. Algunos de los métodos de Python para el trabajo con Listas son:

“len(L)”:
Retorna la cantidad de elementos de la lista L.
“append(L, x)”:
Agrega un nodo al final de la lista con valor x.
“extend(L1, L2)”:
Extiende la lista L1 uniéndole todos los elementos de la lista L2 dada.
“insert(L, i, x)”:
Inserta un nodo de valor x en la posición i de la lista L.
“remove(L, x)”:
Remueve el primer nodo de la lista cuyo valor sea x
“pop(L)”:
Remueve el último nodo de la Lista L y lo retorna.
“index(L, x)”:
Retorna la posición en la lista L del primer nodo con valor x. retorna -1 si no encuentra ninguno.
“count(L, x)”:
Retorna la cantidad de nodos que tienen el valor x en la Lista L.
“reverse(L)”:
Invierte de posición los elementos de la lista L.
Universidad Técnica Federico Santa María
Departamento de Informática

3. TAREAS A REALIZAR

Se deben implementar en C estándar (en Linux) todos los métodos descritos en el punto 2 (como funciones) y
luego se deben aplicar en el desarrollo del siguiente juego.

El juego consiste en un PseudoTetris que contará inicialmente con n pilas adyacentes que almacenan cubos,
las cuales comenzarán inicialmente vacías. La única pieza del juego (cubo) puede ser de cualquiera de los
siguientes 4 colores:

Rojo Azul Verde Amarillo

La cantidad n de pilas con las que se desea jugar debe ser solicitada por pantalla al usuario, siendo el mínimo
n=3.

El juego se realizará por turnos (automáticos), en los cuales se agregará a una de las pilas un cubo de algún
color (tanto el color como la pila en la que se agregan son al azar). Cada vez que se agregue un cubo a alguna
pila se deben comprobar las siguientes reglas del juego:

REGLA 1:
Si se reúnen 3 cubos consecutivos del mismo color en la
misma pila, entonces los 3 cubos deben desaparecer.
(Para referencias, ver ejemplo con n=5).

REGLA 2:
Si se reúnen 3 cubos del mismo color en distintas pilas,
pero a la misma altura/posición (las pilas deben de estar
adyacentes) entonces, todo lo que haya sobre cada uno
de estos 3 cubos de igual color, además de ellos mismos,
deben desaparecer.
(Para referencias, ver ejemplo con n=5).
Universidad Técnica Federico Santa María
Departamento de Informática

El juego terminará cuando alguna pila llegue a tener 10 cubos.

El programa deberá generar un archivo de Salida, llamado Jugadas.txt, el cual incluirá cada jugada del
PseudoTetris, el color del cubo seleccionado y la pila en donde se colocará dicho cubo además de indicar
cuando se cumpla alguna de las 2 reglas del juego.
Una vez terminado el juego (cuando una de las pilas tenga 10 cubos) se debe mostrar el contenido en el
mismo orden de inserción y la cantidad de cubos de todas las pilas.
El siguiente es un ejemplo de archivo de Jugadas con n=5:

Jugadas.txt

Jugada 1: Cubo Amarillo – Pila 1


Jugada 2: Cubo Azul – Pila 2
Jugada 3: Cubo Amarillo – Pila 1
Jugada 4: Cubo Rojo – Pila 4
Jugada 5: Cubo Verde – Pila 5
Jugada 6: Cubo Amarillo – Pila 1
--REGLA 1 EN PILA 1--
Jugada 7: Cubo Verde – Pila 2
Jugada 8: Cubo Verde – Pila 3
Jugada 9: Cubo Azul – Pila 3
Jugada 10: Cubo Rojo – Pila 3
Jugada 11: Cubo Azul – Pila 4
Jugada 12: Cubo Amarillo – Pila 4
Jugada 13: Cubo Azul – Pila 5
--REGLA 2 EN PILAS 3,4,5--
Jugada 14: Cubo Amarillo – Pila 3

Jugada 99: Cubo Verde – Pila 1


--JUEGO TERMINADO--
Pila 1 [10]: Azul Amarillo Verde Rojo Amarillo Verde Rojo Rojo Amarillo Verde
Pila 2 [8]: Amarillo Verde Azul Azul Verde Verde Rojo Rojo
Pila 3 [5]: Azul Amarillo Verde Rojo Rojo
Pila 4 [4]: Rojo Rojo Verde Azul
Pila 5 [8]: Amarillo Amarillo Verde Amarillo Verde Rojo Rojo Azul

El programa debe ser realizado en Linux, compilado con la función –gcc y –Wall. Se recomiendan las
funciones malloc, realloc o calloc, para el uso de memoria dinámica.
Universidad Técnica Federico Santa María
Departamento de Informática

4. RESTRICCIONES Y CONSIDERACIONES

La implementación de Listas debe hacerse de manera dinámica, cualquier implementación estática (usando
arreglos) será evaluada con nota cero. Solo se permite el uso de 1 arreglo, que será el arreglo de n pilas
descrito en el juego.

Se permite la creación de otras funciones además de los métodos.

El acceso a la información de los nodos debe hacerse usando los métodos, se considerará grave la violación
del TAD Lista.

La estructura nodo a utilizar contiene una variable string que solo acepta los valores “Amarillo”, “Azul”,
“Rojo” y “Verde”. Se recomienda el uso de la librería “string.h”.

5. ENTREGA

La entrega de esta experiencia puede hacerse vía Moodle http://moodle.inf.utfsm.cl (Estructura de Datos –
Campus Santiago) o también vía e-mail a alex.arenasf@alumnos.usm.cl

La tarea deberá estar comprimida en un archivo Grupo.XX.tar.gz (Ejemplo Grupo.01.tar.gz). Este contendrá
el archivo tarea2.c, un archivo nombres.txt con nombres y rol de los alumnos indicando que hizo cada
integrante y un archivo README.txt con instrucciones generales y de compilación de ser necesario.

Debe ser enviada a más tardar a las 23:59:59 del día 28 de Abril de 2011.

La entrega vía e-mail debe enviarse desde un correo electrónico institucional (alumnos.usm.cl o
alumnos.inf.utfsm.cl) con el Asunto: [EDD] Tarea 2 GrupoXX. Entregas con otro asunto o desde otras
casillas de correo serán ignoradas.

Los retrasos serán penalizados con descuentos de 30 puntos por día.

Las tareas deben cumplir con la siguiente condición para ser evaluadas:
1.- No deben tener errores de compilación y por cada Warning en la compilación descontarán 5 puntos.

Grupos

A partir de esta experiencia los grupos serán asignados aleatoriamente. La lista con los grupos será publicada
en Moodle y en la página de Ramos del curso. En caso de que alguno de los integrantes del grupo realice
Rebaja Académica Voluntaria, contactarse a la brevedad con el ayudante de Laboratorio
(alex.arenasf@alumnos.usm.cl) para una posible solución.

También podría gustarte