Final ICom-2003

Nota: Respete los prototipos de las funciones y las estructuras.

  1. Implemente una función que calcule y retorne el gradiente de otra función cuyo dominio pertenece a R^n. Prototipo:
    double * gradiente( double (*pf) (double *r, int n ), double *r, int n, double eps);
    Donde pf es un puntero a la función de la cual se quiere calcular el gradiente, r es un arreglo de n doubles (el punto donde se quiere calcular el gradiente), n es la dimensión del dominio de la función, y eps es un valor muy pequeño que permite calcular la derivada por diferencias (por ejemplo dg(x)/dx = (g(x+eps)-g(x-eps)/(2*eps))). En el código contenido en el archivo f1ej1.c enccontrará un main que gracias a esta función calcula e imprime el gradiente de una función (también definida en el archivo) llamada parab.
  2. Implemente un programa que reciba por linea de argumentos el nombre de un archivo que contiene texto. El programa debe leer el texto y modificarlo de la siguiente manera: para cada palabra, la primera y la última letra quedan como están, y el resto de las letras de esa palabra se mezclan al azar. El texto modificado debe ser escrito en un archivo cuyo nombre se pide al usuario.
  3. En el juego de los Fijos y Regulares un jugador elige un número de n cifras todas distintas (el número de cifras se pacta antes de empezar el juego) y el otro jugador trata de adivinarlo diciendole números con las mismas características (n cifras todas distintas...). A cada intento el jugador con el número secreto responde con el número de cifras que coinciden con su número secreto discriminadas como Fijos si estan en la misma posición o Regulares si estan en otra posición. Por ejemplo, si el número secreto es el 84753 y el intento de adivinarlo fuera 38954 entonces obtendría 1F y 3R. El programa que contiene el archivo f1ej3.c pide el número de cifras al usuario y genera un número secreto al azar, y le pide al usuario que lo adivine. Para que este programa funcione, ud. deberá implementar las siguientes funciones:
    1. char * GenSecret (int ncifras);
      /* Genera un número secreto válido al azar y lo retorna */
    2. char * GetLine ();
      /* Lee una línea del teclado, elimina el \n del final y la retorna */
    3. int IsBadNnumber(char *s);
      /* retorna 1 si el número contenido en s contiene cifras repetidas o caracteres que no sean cifras o tiene menos de 1 cifra, y 0 en otro caso*/
    4. int FyR(char *secret, struct fyr * result);
      /* Esta función debe verificar que el intento guess es un número válido y compatible con el número a adivinar (secret), calcular el número de Fijos y de Regulares, poniendolos en result (la definición de la estructura fyr están en el archivo). Debe retornar 1 en caso de error y 0 si todo está correcto.*/