====== Examen Final - 75.42. Taller de programación I ====== **Cátedra:** Veiga\\ **Fecha:** 1er Cuatrimestre 2008\\ **Día:** 22/07/2008\\ **Tema:** 3 Esta página está incompleta; podés ayudar completando el material. ===== Enunciado ===== - Describa el proceso de transformación Fuente-Ejecutable. - Describa la función utilizada para lanzar un nuevo **thread**. Incluya la descripción del **uso y significado de sus parámetros.** - Escribir **un programa ANSI C** que admita una cadena de **3 caracteres por linea de comandos** e imprima **los resultantes de todas las permutaciones posibles**. Ej. MiPrograma ABC debe imprimir ABC, ACB, BAC, BCA, CAB, CBA. - Escriba el **.H** correspondiente a una biblioteca que exporta: -Una **variable de tipo entero largo con signo** llamada **CodError** -Una **función F que toma un puntero a un arreglo de 3 enteros y retorna un caracter** -Una **función G que toma un puntero a un puntero a caracter** y no devuelve nada - Escriba un programa que envie un **datagrama** de 20 bytes 'A' al **puerto 202** del equipo **200.49.224.251**. - **Defina** el **operador>>** de forma que cargue, desde consola, el contenido de una **lista de STL**. El proceso debe terminar cuando el ingreso es nulo. - ¿Que propósito tiene la función **htons**? - Utilizando **templates defina las clases** necesarias para que el siguiente código sea válido: Matriz M; M[1][2]='a'; M[1][1]=M[2][1]; - Explique el motivo por el cual se utiliza la palabra **const** después de la declaración del **operador >**. De un breve **ejemplo** que demuestre que es imprescindible. - **Escriba una rutina** (para el ambiente gráfico Windows o Linux) que pinte un rectángulo rojo de la 1/3 parte del alto y ancho de la ventana. ===== Resolución ===== ==== Punto IV ==== #ifndef __BIBLIOTECA_H__ #define __BIBLIOTECA_H__ extern long int CodError; extern char F(int(*arreglo)[3]); extern void G(char**); #endif ==== Punto VI ==== template istream& operator>>(istream& is, list& lst) { T obj; is>>obj; while(obj) { lst.push_back(obj); is>>obj; } return is; } ==== Punto VIII ==== template class Matriz { T* matriz; int _file, _row; public: Matriz(int i=3, int j=3) { _file = i; _row = j; matriz = new T[_file*_row]; } ~Matriz() { delete[] matriz; } T* operator[](int i) { return &matriz[i*_row]; } Matriz& operator=(const Matriz& m) { if(this==&m) return *this; assert(_row==m._row && _file==m._file); for(int i=0;i<_file*_row;i++) matriz[i]=m.matriz[i]; return *this; } }; ===== Discusión ===== Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.