Puntajes Minimos 2024B CU
Puntajes Minimos 2024B CU
Puntajes Minimos 2024B CU
Tarea 1
Profesores: Andrés Navarro, Ricardo Salas, Juan-Pablo Castillo
[email protected], [email protected], [email protected]
Ayudantes:
Gabriel Escalona ([email protected])
Tomás Barros ([email protected])
Jaime Inostroza ([email protected])
Juan Alegría ([email protected])
Carlos Lagos ([email protected])
Fecha de entrega: 01 de Septiembre, 2024.
Plazo máximo de entrega: 1 día.
1. Reglas
La presente tarea debe hacerse en equipos de dos personas. Toda excepción a esta regla está sujeta a
autorización del ayudante coordinador Gabriel Escalona.
Debe usarse el lenguaje de programación C++. Al realizar la evaluación, las tareas serán compiladas
usando el compilador g++, usando la línea de comando g++ archivo.cpp -o output -Wall. No se
aceptarán variantes o implementaciones particulares de g++, como el usado por MinGW (normal-
mente ocupado en Dev C++). Se deben seguir los tutoriales disponibles en Aula USM.
No se permite usar la biblioteca STL, así como ninguno de los contenedores y algoritmos definidos en
ella (e.g. vector, list, etc.). Está permitido usar otras funciones de utilidad definidas en bibliotecas
estándar, como por ejemplo math.h, string, fstream, iostream, etc.
Recordar que una única tarea en el semestre puede tener nota menor a 30. El incumplimiento de esta
regla implica reprobación del curso.
2. Objetivos de aprendizaje
Comprender y familiarizarse con las estructuras y tipos de datos básicos que provee el Lenguaje de
Programación C++. Entre los conceptos mas importantes, se encuentran:
Paso de parámetros por valor.
Paso de parámetros por referencia.
1
Además se fomentará el uso de las buenas prácticas y el orden en la programación de los problemas corres-
pondientes.
3. Problema a resolver
En esta sección deben implementarse funciones y clases en C++, de acuerdo a las siguientes descripciones.
Su propuesta de solución debe ser entregada en un archivo(s) .cpp (y correspondientes .hpp de ser necesario).
Su función main debe ser capaz de leer un programa según lo especificado a continuación y recuerde que se
probarán múltiples ejemplos para verificar si su solución ejecuta bien los programas que recibe.
3.1. Instrucciones
En la siguiente tarea crearemos nuestra propia versión de un curioso lenguaje basado en punteros. Para
esto utilizarán lo que han aprendido sobre TDA y punteros.
3.2. El Lenguaje
Consiste de un puntero que apunta a un arreglo de largo n, de números enteros con valor inicial 0. Este
lenguaje solo posee 9 operadores:
Hints: Use un arreglo de char para almacenar las codificaciones de la tabla. Para convertir un número
que no está en la tabla debe utilizar el módulo (positivo) de 72.
2
3.3. La Tarea
Su tarea debe ser capaz de utilizar un intérprete para cargar y ejecutar distintos programas, estos progra-
mas se ingresarán mediante a la lectura de un archivo llamado Programas.txt y se almacenarán al principio
de la ejecución. Luego, mediante a entrada por consola, se ingresaran instrucciones para la ejecución de estos
programas. Las instrucciones son las siguientes:
La primera línea del archivo contiene el largo máximo que puede tener la salida.
La segunda línea contiene la cantidad de programas que desea guardar.
Desde la tercera línea se presentan cada uno de los programas.
3.4. Implementacion
Se usarán dos TDA’s para esta tarea
class Programa {
private :
int l a r g o _ o p e r a c i o n e s ;
char * p u n t e r o _ o p e r a c i o n e s ;
int * punter o_salida ;
char * operaciones ;
public :
void e je c u t a r _ o p e r a d o r () ;
void mover ( char dir ) ;
void asignar ( int valor , int * salida ) ;
char obtener () ;
void t er m i n a r _ p r o g r a m a () ;
Programa ( int l a r g o _ o p e r a c i o n e s ) ;
void ejecutar () ;
}
3
La primera clase es Programa, la cual consiste en un valor int el cual almacena el largo del arreglo de
operaciones, dos punteros los cuales señalan la posición actual en la que se está ejecutando y la posición que
se está escribiendo en la salida, además de un puntero a un arreglo que almacenará las operaciones.
También se deberán implementar los siguientes métodos:
Programa(int largo_operaciones): El constructor de la clase, en la cual se debe iniciar los arreglos
a utilizar.
ejecutar_operador(): Lee el operador que se encuentra en la posición del puntero_operaciones y la
ejecuta.
mover(char dir): mueve el puntero de salida en la dirección dir (>(derecha), <(izquierda))
asignar(int valor, int* salida): asigna valor numérico a posición actual de puntero_salida.
obtener(): Obtiene el caracter de la posición actual.
terminar_programa(): Libera la memoria de utilizada por la clase.
ejecutar(): comienza la ejecución del programa.
class Interprete {
private :
int cant_pro gramas ;
int largo_salida ;
int cargado ;
Programa * programas ;
int * salida ;
public :
Interprete ( int cant_programas , int largo_salidas ) ;
void c ar ga r_ p ro gr am a ( int n ) ;
void e je c u t a r _ p r o g r a m a () ;
void m o s t r a r _ p r o g r a m a _ c a r g a d o () ;
void t er m i n a r _ e j e c u c i o n () ;
}
4
3.5. Ejemplos de entrada y salida
Ejemplo 1:
A continuación se presenta un ejemplo de entrada y salida de los datos. Primero se muestra el contenido
del archivo "Programas.txt":
10
2
+ >. - -.++: - - -:!
. >++++++++.[ <+ > -] <. >.!
5
Ejemplo 2:
Archivo Programas.txt:
15
3
+++++[ >++++ < -] > -: <+++++: <++: -: > >:+: <++++: <: > > - - - - - -:!
. >++++++++.[ <+ > -] <. >.!
+++[ >+++ < -] >+:+++++: >++++++++: < -:!
Ejecución:
> m
sin instrucciones
> e
> c 1
> m
. > + + + + + + + + .[ < + > -] < . > .!
> c 0
> e
sebastian
> c 2
> e
john
> s
4. Entrega de la Tarea
Entregue la tarea enviando un archivo comprimido denominada tarea1-apellido1-apellido2.zip (re-
emplazando sus apellidos según corresponda), en cuyo interior debe estar la tarea dentro de una carpeta
también llamada tarea1-apellido1-apellido2, a la página aula.usm.cl del curso, el cual contenga:
Los archivos con los códigos fuentes necesarios para el funcionamiento de la tarea. ¡Los archivos deben
compilar!
El archivo nombres.txt que debe contener Nombre, ROL y Paralelo de cada miembro del equipo
detallando qué programó cada uno.
README.txt, Instrucciones de compilación en caso de ser necesarias, y la forma de compilación que
usó (debe ser alguna de las indicadas en los tutoriales entregados en Aula USM).
Considere además que:
El apellido1 es el primer apellido de uno de los integrantes y el apellido2 es el primer apellido del
otro integrante. Esto significa que el apellido1 y apellido2 no son los dos apellidos de alguno de los
integrantes.
Solo una persona del grupo debe subir la tarea al aula, no hacer esto, puede conllevar un descuento.
5. Entrega mínima
La entrega mínima permite obtener una nota 30 si cumple con los siguientes requisitos:
6
6. Restricciones y Consideraciones
Se permite un único día de atraso en la entrega de la tarea. La nota máxima que se puede obtener en
caso de entregar con un día de atraso es nota 50.
Las tareas que no compilen no serán revisadas y deberán ser re-corregidas por el ayudante coordinador.
Debe usar obligatoriamente alguna de las formas de compilación indicadas en los tutoriales entrega-
dos en Aula USM.
7. Directrices de programación
Las directrices corresponden a buenas prácticas de programación, las cuales serán tomadas en considera-
ción para la evaluación de la tarea. El código fuente del programa debe estar estructurado adecuadamente
en archivos (separados de ser necesario). Si el código fuente está desordenado, se pueden descontar hasta 20
puntos de la nota.
Cada función programada debe tener comentarios de la siguiente forma:
/* ****
* TipoFunci ó n NombreFunci ó n
******
* Resumen Funci ó n
******
* Input :
* tipoPar á metro NombrePar á metro : Descripci ó n Par á metro
* .......
******
* Returns :
* TipoRetorno , Descripci ó n retorno
**** */