Primer parcial ICom-2002

Nota: Respete los prototipos de las funciones.

  1. Una matriz M es ortonormal si multiplicada por su traspuesta da la identidad (M x M^t = I). Implemente una función

    /* como ejemplo se define N como 3, pero el algoritmo debe ser genérico para cualquier N */

    #define N 3

    int es_ortonormal(double M[N][N], double eps);

    que retorne 1 si la matriz M de N filas y N columnas que se le pasa como argumento es ortonormal y 0 en caso contrario. El valor de eps es la tolerancia. La función no debe modificar de ninguna manera la matriz que se le pasa, ni crear nuevas matrices. Nota: recuerde que en el producto de matrices C = A x B, el elemento C[i,j] = Sum(k) A[i,k]*B[k,j], y que en la traspuesta C^t [i,j] = C[j,i].

  2. Escriba una función que reciba un entero entre 1 y 3999 y lo imprima por pantalla pero en números romanos. En caso de que la entrada esté fuera del rango que imprima simplemente un mensaje "Error: entrada fuera de rango\n".

    Prototipo: void imprime_en_romanos( int n );

    Recuerde que los primeros 10 números son: I, II, III, IV, V, VI, VII, VIII, IX, X

    Símbolo I V X L C D M
    Valor 1 5 10 50 100 500 1000

    Nota: nunca se tiene mas de 3 veces seguidas el mismo símbolo ( IIII no es 4 ).

  3. Haga un programa que simule la tirada de una moneda un gran número de veces y que construya un histograma de cuántas veces aparecen secuencias de n valores repetidos (2, 3, 4, ... , 20) sin importar si se trata de caras o cecas. Notar que en una secuencia de 10 caras seguidas hay 2 secuencias de 9 caras, 3 de 8, 4 de 7 y así siguiendo hasta 9 de 2. Quizás eso le ayude a implementar un algoritmo sencillo. Al finalizar la estadística, el programa debe imprimir una representación del histograma usando asteriscos (*) como en el ejercicio de la entrega 6. (Previamente normalice el histograma con el número de veces que se arrojó la moneda).