CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 Fecha de presentación. Semana del 12 de noviembre. Objetivos.
Identificar y aplicar llamadas a funciones por valor y por referencia.
Aplicar POO en la resolución de problemas.
Identificar, comprender y aplicar características del Lenguaje C++, tales como POO, sobrecarga de funciones, etc.
Consignas. 1. Este trabajo debe realizarse en forma individual, y consiste en dos etapas, la primera etapa es domiciliaria y se llevará a cabo con una duración de una semana, la segunda etapa es presencial y consistirá en una evaluación en pc con una duración máxima de dos horas. 2. La primera etapa comienza en la semana del 22 de octubre y concluye con la segunda etapa en el día de la clase práctica de la semana de presentación. Antes de rendir la segunda etapa el alumno deberá cumplir con la primera etapa y su presentación. 3. La presentación de la primera etapa consistirá en el material abrochado contando con los siguientes ítems: 3.1. Carátula. Identificación completa del trabajo evaluativo con el nombre del alumno que realizó el trabajo. 3.2. El diagrama estructurado de cada uno de los programas. 3.3. El código impreso de cada uno de los programas. El código de cada programa deberá cumplir con las siguientes condiciones: 3.3.1. Deberá contar con un encabezado identificatorio con el nombre del alumno que lo desarrolló. 3.3.2. Deberá utilizarse sangría. 3.3.3. Deberán indicarse todos los comentarios y notas que se consideren precisas para la mejor comprensión del código desarrollado. 4. El alumno deberá presentar la carpeta descripta en el punto previo para poder acceder a rendir la segunda etapa. 5. El día de la presentación de la primera etapa el alumno deberá resolver planteamientos en computadora usando el Lenguaje C y el Lenguaje C++. Para tal fin contará con 2 (dos) horas reloj para completar la segunda etapa de este taller. 6. Finalizada la segunda etapa el alumno deberá entregar el código desarrollado en la primera etapa y el código desarrollado en la etapa presencial. Los códigos fuentes deberán estar identificados con el apellido o con parte del apellido del alumno. 7. Los códigos fuentes entregados deberán contar con nombre apropiado, según punto previo, y con la extensión correspondiente a un programa en Lenguaje C (.c) o al C++ (.cpp) según corresponda. Criterios de evaluación y aprobación. Para aprobar el Taller se debe cumplir con los siguientes ítems: 1. Los códigos de los programas, tanto de la primera como de la segunda etapa, deben estar totalmente desarrollados. 2. Los programas deben ejecutarse sin que se generen errores en tiempo de ejecución, y con las correspondientes verificaciones de entrada de datos. 3. Los programas deberán funcionar adecuadamente a la solicitud propuesta, tanto en la primera etapa como en la segunda etapa del Taller. 4. La carpeta descripta en el punto 3 de Consignas, deberá presentarse en tiempo y forma. 5. La/s resolución/es del/los problema/s deberán realizarse aplicando las indicaciones, métodos y consideraciones propuestas por la cátedra.
1
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 Enunciados Lenguaje C: 1.
Un entero primo es cualquier entero divisible sólo por sí mismo y por el número 1. El método del cedazo de Eratóstenes se utiliza para localizar números primos. Funciona de la siguiente manera: a.
Crea un arreglo con todos los elementos inicializados en 1 (verdadero). Los elementos del arreglo con subíndices primos permanecerán como 1. Los demás elementos, en algún momento se establecerán en cero.
b. Comienza con el subíndice 2, cada vez que se encuentra un elemento del arreglo cuyo valor es 1, repite a lo largo del arreglo y establece en cero cada elemento cuyo subíndice sea múltiplo del subíndice del elemento con valor de 1 que se está considerando. Por ejemplo, para un subíndice 2 del arreglo, todos los elementos con subíndices superiores a 2 y que sean múltiplos de 2, se establecerán en 0 (subíndices 4, 6, 8, etc.), para un subíndice de 3, todos los elementos con subíndices superiores a 3 y que sean múltiplos de 3, se establecerán en 0 (subíndices 6, 9, 12, etc.). Cuando este proceso termina, los elementos del arreglo que aún permanecen en 1, indican que el subíndice es un número primo. Estos subíndices pueden entonces desplegarse. Desarrolle un programa que use un arreglo de 1000 elementos para determinar y desplegar los números primos entre el 2 y el 999. No se considera el elemento 0 del arreglo. Para resolver este planteamiento identifique los datos y las estructuras de datos necesarios, utilice funciones por valor y por referencia, por ejemplo para determinar si un número es múltiplo de otro, recorrer el arreglo e inicializarlo, recorrer el arreglo e identificar los primos, recorrer el arreglo y mostrar el resultado, etc. 2.
Considere el código pila.c que se encuentra en el Anexo de este Taller. Analícelo y ejecútelo. Modifique el código y genere un nuevo programa para cumplir con la siguiente tarea: Convertir una expresión aritmética ordinaria en notación infijo con enteros de un solo digito en una expresión postfijo. Por ejemplo, suponiendo que se introduce una expresión válida (6 + 2) * 5 – 8 / 4, la salida será 6 2 + 5 * 8 4 / -. El programa debe leer la expresión en un arreglo de caracteres llamado Infijo y generar la expresión postfijo en un arreglo de caracteres llamado Postfijo. El algoritmo para crear una expresión postfijo es el siguiente: a.
Meter en la pila un paréntesis izquierdo (.
b. Agregar un paréntesis derecho ) al final de Infijo. c.
Mientras la pila no esté vacía, leer Infijo de izquierda a derecha y hacer lo siguiente: Si el carácter actual en Infijo es…
Un dígito, copiarlo al siguiente elemento de Postfijo.
Un paréntesis izquierdo ( meterlo en la pila.
Un operador, Sacar los operadores del tope de la pila si los hubiera, mientras tengan mayor precedencia o igual a la del operador actual, insertar en Postfijo los operadores sacados. Meter el carácter actual de Infijo en la pila.
Un paréntesis derecho ) , Sacar los operadores del tope de la pila e insertar en Postfijo, hasta que haya un paréntesis izquierdo en el tope. Sacar y descartar el paréntesis izquierdo de la pila.
El programa debe incluir las siguientes funciones: 2
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 void conviertePostfijo(char infijo[], char postfijo[]); Convierte la expresión infijo en notación postfijo. int esOperador(char c); Determina si c es un operador. int precedencia(char ope1, char ope2); Determina si la precedencia del ope1 es menor, igual o mayor que la precedencia del ope2. Devuelve -1, 0, o 1 respectivamente. char topePila(); Devuelve el valor del tope de la pila sin sacarlo. int pilaLlena(); Indica si la pila está llena. int pilaVacia(); Indica si la pila está vacía. void apila(char); Mete un carácter en el tope de la pila. char desapila(); Saca el tope de la pila.
Lenguaje C++: 3.
De entrada a los códigos de los archivos perro.h y perro.cpp incluidos en el Anexo. Analice y ejecute el código. Cree un nuevo programa otroPerro.cpp que implemente la clase Perro y mediante un menú permita aplicar todas sus funciones miembro.
4.
Genere una clase EnteroMuyLargo que use un arreglo de 20 elementos para almacenar enteros de hasta 20 digitos de longitud. Proporcione las funciones miembro entrada, salida, suma y resta. Para comparar objetos de tipo EnteroMuyLargo porporcione las funciones esIgualQue, esDiferenteQue, esMayorQue, esMenorQue, esMayorIgualQue, esMenorIgualQue. Cada una de estas funciones devuelve verdadero si se cumple la relación de los enteros muy largos, y falso si la relación no se cumple. Desarrolle un programa para probar la clase desarrollada.
3
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 ANEXO. Códigos.
Código Pila.c: #include #define MAX 10
/* maxima cantidad de valores en la pila */
#define Verdadero 1 #define Falso
0
int pila[MAX]; int Tope = -1; /* Top == -1 --> pila vacia */
int pilaLlena(); int pilaVacia(); void apila(int); int desapila();
int main(void) { int val = 0; printf("Probando el funcionamiento de la pila. . . \n"); apila(4); printf("Apila:4\n"); apila(5); printf("Apila:5\n"); apila(6); printf("Apila:6\n"); val = desapila(); printf("Desapila:%d\n", val); val = desapila(); printf("Desapila:%d\n", val); getch(); }
/* apila: coloca un nuevo valor en el tope de la pila */ void apila(int x) { if (!pilaLlena()) 4
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 pila[++Tope] = x; else { /* ya no hay espacio */ printf("ERROR: pila llena, no se puede agregar %d\n", x); } }
/* desapila: extrae de la pila, devuelve el valor de tope */ int desapila() { if(!pilaVacia()) {/* si la pila no esta vacia */ Tope--; return pila[Tope+1]; } else { printf("ERROR: pila vacia, no se puede extraer\n"); return 0; } }
/* pilaLlena: identifica si la pila esta llena */ int pilaLlena() { if(Tope < MAX-1) return Falso; else return Verdadero; }
/* pilaVacia: identifica si la pila esta vacia */ int pilaVacia() { if(Tope >= 0) return Falso; else return Verdadero; } 5
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3
Codigo Perro.h /** * Definicion de la Clase Perro * */ using namespace std; #include
class Perro { public: Perro (int initialAge); Perro (const Perro &); ~Perro();
int GetAge() { return itsAge; } void SetAge (int age) { itsAge = age; } int * GetPeso() { return peso; } void SetPeso (int * peso) { this->peso = peso; } char * GetRaza() { return raza; } void SetRaza (char * raza) { this->raza = raza; } char * GetColor() { return color; } 6
CÁTEDRA: LABORATORIO II
Año 2012
Taller 3 void SetColor (char *color) { this->color = color; } void Ladra() { cout