====== Examen Final - 75.42. Taller de programación I ====== **Cátedra:** Veiga\\ **Fecha:** 2do Cuatrimestre 2007\\ **Día:** 05/02/2008\\ **Tema:** 1 ===== Enunciado ===== - **Diagrame mediante un grafo** una máquina de estados que implemente un robusto cliente de comunicaciones **TCP/IP**; completando timeouts, cierres de conexiones, error de datos, y toda otra condición necesaria. - De un caso concreto de **declaraciones en C++** donde se producirá un **error de ambigüedad** durante la compilación. - Desarrolle alguna de las dos siguientes preguntas teóricas: - ¿Qué es **OpenGL? Ejemplifique.**\\ - ¿Cuál es la estructura de un archivo **XML? Ejemplifique.** - Asumiendo que la clase PARRAFO contiene un operador para escribirse en formato XML, **escriba un operador<<** que vuelque a **formato XML** el contenido de **std::array.** - Escriba un **programa ANSI C** que reciba por línea de comandos un número (en base decimal) y una base (entre 2 y 16) e **imprima el número recibido en la base pedida**. - Suponiendo que su programa ejecutará en un ambiente de **1 procesador,** ¿En qué casos usaría **Multithreading?.** - Escriba una **macro DONDE** que imprima por salida standard el **nombre del archivo fuente y la línea** donde fue utilizada. - Escriba un **programa ANSI C** que lea el **archivo binario** a.bin y genere el archivo b.bin. El archivo de salida deberá contener los bytes del archivo de entrada, excepto los 0x03 y reemplazando los 0x04 por los 15 bytes precedentes en el archivo de entrada. - ¿Qué propósito tiene la **herencia** de clases?. **Justifique** mediante un ejemplo. - Dados los siguientes strings **definidos dentro del main:** char* x1 = "Mi cadena"; char x2[30] = "Mi cadena"; char* x3 = new char[50]; strcpy(x3, "Mi cadena"); |Completar: ^ x1 ^ x2 ^ x3 ^ x1[0] ^ x2[0] ^ x3[0] ^ ^Área de memoria | | | | | | | ^Modificable (Si/No) | | | | | | | ^sizeof() | | | | | | | ^Debe liberarse | | | | --- | --- | --- | ===== Resolución ===== ==== Punto II ==== class X{ private: int x; public: X(){ x=0} X(int y=3){ x=y} float getX(); int getX(); void setX(int y=2) { x=y;} void setX(){ x=0;} bool operator() const { if (x=0) return true; else return false; } short int operator short() const { return x%256; } }; int main(int argc, char *argv[]){ X x1; // Que constructor llama?, X() o X(3)? float f; int entero; f = x1.getX(); // A quien llama y luego castea a float?. Castea de int a float o de long a float? x1.setX(); // Setea en 0 o en 2?. entero = x1; // Hace el casteo a bool a a short int? return 0; } ==== Punto V ==== #include #include char toChar(int num){ if ((num>=0) && (num<=9)) return ('0'+num); else if ((num>9) && (num < 16)) return ('a'+num-10); return ' '; } void convertir (int num,int base){ if (num ==== Punto VI ==== Usaría Multithreading cuando llame a funciones que puedan tener tiempos muertos (como algunas de sockets, las entrada y salida estándar o con archivos); y pueda, mientras tanto, hacer otra cosa como interactuar con el usuario. ==== Punto VII ==== #define DONDE printf("Archivo: %s Línea: %5u\n", __FILE__, __LINE__); ==== Punto IX ==== La herencia de clases tiene el propósito de que una clase pueda usar los métodos y atributos de otras sin tener que definirlos. Otro propósito es que la clase que hereda las características sea una especialización del padre o los padres. Por ejemplo, si se define la clase Animal a la cual se le definen los atributos edad y peso. Luego se puede definir la clase Perro la cual puede heredar de Animal, y además puede definirse el atributo raza, de esta forma la clase perro tendrá los atributos peso, edad y raza. ==== Punto X ==== | ^ x1 ^ x2 ^ x3 ^ x1[0] ^ x2[0] ^ x3[0] ^ ^Área de memoria | Code Segment | Stack Segment | Heap | Code Segment | Stack Segment | Heap | ^Modificable (Si/No) | No | Si | Si | No | Si | Si | ^sizeof() | 4 bytes | 30 bytes | 4 bytes | 1 byte | 1 byte | 1 byte | ^Debe liberarse | No | No | Si | --- | --- | --- |