====== 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á.