Certamen 2 Lenguaje de Programación
Jorge López R.


1. (2 puntos)
a) Escriba la definición de archivo y nombre las funciones que operan sobre ellos anivel binario.  b)¿ Cual es la diferencia entre archivo tipo texto y uno tipo binario?
c) Explique si es posible que el compilador acepte la estructura siguiente y porqué:
struct a{ 
int z;
struct b s;
struct a *p;
};
struct b{
int x;
char c[10];
struct a r;
struct b *siguiente;
};
d) Escriba sólo las líneas de programa C para que se obtenga dinámicamente la memoria para un nodo y se inserte a la derecha del nodo apuntado por run. Use un único puntero auxiliar aux.
struct n{
char m[256];
struct n *anterior;
struct n *siguiente;
};
run
__\__ __     __ __ __   __ __ __
|--->|  |  |  |--->|  | | |--->|  |  |  |- --|
| |--|__|__|__|<---|__|__|__|<---|__|__|__|<-| |
| |__________________________________________| |
|______________________________________________|


2. (1 punto)
a) ¿Qué imprime el siguiente programa? y ¿qué hace básicamente la función xx?:

void xx(int n);
main(){
xx(9);
printf("\n");
}
void xx(int n){
if(n<=0){printf("0");return;}
if(n==1){printf("1");return;}
xx(n/8);
printf("%d",n%8);
}

b) Complete los --- en la función yy de modo retorne la suma de lso elementos la columna cuyo índice se le pasa como argumento 1 de main. Complete la función zz para que imprima la matriz por columnas. Asegurese además que no habrá warnings o avisos por las declaraciones de las funciones.
int a[5][5]={200,200,300,40,6,
300,200,800,60,0,
100,200,200,40,5,
700,200,800,10,0,
200,200,300,40,6};

main(int argc, char * argv[]){
printf("%d\n",yy(a,atoi(argv[1])));
}

int yy(int mat[5][5], -----){
int i,s=0;
----------
return s;
}

--- zz(----){
------
}


3. (1 punto) 
a) Escribir la función recursiva que implemente la especificación formal del algoritmo siguiente:
           Entrada: puntero a lista, entero k
        Salida:  puntero a nodo que contiene entero igual a k
               /
               |   NULL si p == NULL
busca(p, k) <   p si p->k == k
             |   busca(p->prox) si p->k != k
               \

4. (2 puntos)
Hacer un programa copie desde un archivo a otro nuevo, sólo las estructuras que tienen un valor negativo en su saldo. Al final, debe imprimir
desde este nuevo archivo los nombres de los clientes con saldo negativo. Los nombres de los archivos se deben pasar como los argumentos 1 y 2  de main y se debe chequear que estén presentes al ejecutarse. La estructura usada en los archivos es la siguiente:
struct cliente {
int saldo;
char nombre[100];
};