Lenguaje de Programación

Agosto-Diciembre 2011

 

Proyecto 2 

Opción 2 Hasta 2.5 de calificación

Se trata de hacer las 9 funciones que se definen en el código C que aparece abajo, de tal forma que la función main (que tambien aparece abajo) se ejecute exactamente como yo la escribí. Una descripción de lo que hace cada función se indica en comentarios.

Basicamente debe ser capaz de recibir una matriz dada por el usuario desde consola. Y a dicha matriz debe poder calcular la traza, el determinante, la inversa y si el usuario lo solicita imprir cualquiera de dichos datos en un archivo txt.

Si se codifica para matrices de 2x2 y 3x3 de manera correcta el programa obtendra una calificacion de 1.5, si ademas se le pueden meter matrices de nxn para cualquier n, entonces podra obtener hasta 2.5 puntos. Para ello se debera poner atención en los apuntadores.

#include <stdio.h>
#define TIPO float 

//el tipo de una matriz 
typedef struct TMatrix{
    TIPO **datos;
    int rens,cols;
    TIPO traza;
    TIPO determinante;
} Matrix;

// a)si la matriz que recibe como parametro tiene datos (datos != NULL), 
// entonces le libera la memoria. 
// b) le da memoria (dinamicamente) a la matriz que se le manda como 
// parametro deacuerdo a los renglones y columnas y le actuliza sus propios 
// valores rens y cols. 
// C) si no puede obtener la memoria correctamente regresa por la izquierda 0 
// de lo contrario regresa 1 
int iniMatrix(Matrix *m,int ren,int col); 
// a) libera la memoria de la matriz 
// b) pone datos=NULL 
// c) pone los renglones y columnas igual a cero 
void destruyeMatrix(Matrix *m); 
//calcula la traza y el determinante de la matriz que se le manda y los 
// guarda en los campos respectivos 
void calculaTrazaYDeterminante(Matrix *m); 
// copia la matriz mOrigen en mDestino, si mDestino no tiene memoria o bien 
// tiene memoria para dimensiones diferentes, se debe de liberar e inicializar 
// correctamente 
void igualaMatrix(Matrix *mOrigen,Matrix *mDestino); 
// a)guarda el resultado de la multiplicacion de la matriz mA por la matriz 
// mB el la matriz mResultado, si mResultado no tiene memoria o bien 
// tiene memoria para dimensiones diferentes, se debe de liberar e inicializar 
// correctamente, recordar que el resultado de la multiplicación de dos matrices de 
// dimensiones (n,m) y (m,o) tiene dimensiones (n,o) 
// b) si las matrices no se pueden multiplicar por problemas de dimension o memoria 
// pedida regresa 0 de lo contrario regresa 1. 
int multiplicaMatrices(Matrix *mA,Matrix *mB,Matrix *mResultado); 
//llena la matriz que se le manda como parametro desde teclado 
void leeMatrixDesdeTeclado(Matrix *m); 
// imprime el contenido de la matriz que se le manda como parametro en la 
// pantalla 
void imprimeMatrixAPantalla(Matrix *m); 
// Calcula la transpuesta de la matriz que se le manda como parametro 
// y la guarda en si misma. 
void hazlaTranspuesta(Matrix *a); 
// a)escribe el contenido de la matriz que se le manda al archivo con el nombre 
// que hay en la variable char* nombreArchivo, si el archivo existe se sobre-escribe. 
// b) si no puede abrir el archivo regresa 0 de lo contrario regresa 1 
int escribeArchivo(Matrix *m,char* nombreArchivo); 
void main(void){ 
    Matrix a,b,c,d;
    a.datos = NULL;
    b.datos = NULL;
    c.datos = NULL;
    d.datos = NULL;
    if(iniMatrix(&a,3,4)==0){
        printf("Error: No alcanza la memoria");
        return;
    } 
    if(iniMatrix(&b,4,6)==0){
        printf("Error: No alcanza la memoria");
        destruyeMatrix(&a); 
        return;
    } 
    printf("introduzca Matriz A:\n"); 
    leeMatrixDesdeTeclado(&a); 
    printf("introduzca Matriz B:\n"); 
    leeMatrixDesdeTeclado(&b); 
    calculaTrazaYDeterminante(&a); 
    calculaTrazaYDeterminante(&b); 
    printf("Datos de A y B: %f %f %f %f\n",a.traza,a.determinante,b.traza,b.determinante); 
    if(multiplicaMatrices(&a,&b,&c) == 0){ 
        printf(“Error: no se pudo multiplicar”); 
        destruyeMatrix(&a); 
        destruyeMatrix(&b); 
        return; 
    } 
    calculaTrazaYDeterminante(&c); 
    printf("Datos de C %f %f\n",c.traza,c.determinante); 
    printf("El resultado de la multiplicacion es:\n"); 
    imprimeMatrixAPantalla(&c); 
    if(escribeArchivo(&c,"unaMat.txt") == 0) 
        printf("Error no pude escribir en archivo %s","unMatrix.txt"); 
        igualaMatrix(&b,&d); 
        hazlaTranspuesta(&d); 
        printf("La transpuesta de la matriz B es:\n"); 
        imprimeMatrixAPantalla(&d);

    //regresar la memoria pedida 

    destruyeMatrix(&a); 
    destruyeMatrix(&b); 
    destruyeMatrix(&c); 
    destruyeMatrix(&d); 
    return; 

} 
Referencias:
  1. Karel the robot
  2. The C++ Library reference
  3. Thinking in C++, B. Eckel.
  4. Los dilemas de Karel, Edgar A.D.G., Edgar S. H.S.. Marte A. R. O.
  5. Bjarne Stroustrup's home page.
  6. Programming Principles and Practice Using C++, Bjarne Stroustrup.
  7. Codeblocks Official web pages
  8. GLUT Official web page
  9. Tutorial GLUT
Valid XHTML 1.0 Strict

Last update on 04/11/2011

Nº de visitas desde el 03/11/2011: Contador