Untitled

mail@pastecode.io avatar
unknown
c_cpp
a year ago
2.6 kB
4
Indexable
Never
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <sys/time.h>

//Para calcular tiempo
double dwalltime(){
        double sec;
        struct timeval tv;
        gettimeofday(&tv,NULL);
        sec = tv.tv_sec + tv.tv_usec/1000000.0;
        return sec;
}

int main(int argc, char *argv[]){
    int *A,*B,*C;
    double *A2,*B2,*C2;
    double timeMult,timePow,timeVector,tick;
    int i,N,j;

    N = atoi(argv[1]);

    //Aloca memoria para la matriz
    A=(int*)malloc(sizeof(int)*N*N);
    A2=(double*)malloc(sizeof(double)*N*N);

    B=(int*)malloc(sizeof(int)*N*N);
    B2=(double*)malloc(sizeof(double)*N*N);

    C=(int*)malloc(sizeof(int)*N*N);
    C2=(double*)malloc(sizeof(double)*N*N);
    
    //Inicializar matrices
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            A[i*N+j] = rand() % 40 + 1;
            B[i*N+j] = rand() % 40 + 1;
            C[i*N+j] = rand() % 40 + 1;
        }
    }
/*     for(i=0;i<N*N;i++){
            A[i] = 4;
            B[i] = 4;
            C[i] = 4;
        }
      */

    //calcular la potencia multiplicando
    tick = dwalltime();
    for(i=0;i<N*N;i++){
        double valor= B[i];
        B2[i]= valor*valor;
    }
    
    timeMult = dwalltime() - tick;
    printf("Tiempo requerido para elevar multiplicando es: %f \n",timeMult);


    //obtiene la potencia 2 de la matriz usando pow
    tick = dwalltime();
    for(i=0;i<N*N;i++){
        A2[i] = pow(A[i],2);
    }
    timePow = dwalltime() - tick;
    printf("Tiempo requerido para elevar a la potencia a la matriz con pow: %f \n",timePow);

    //obtiene la potencia 2 con un vector con los valores precargados
    tick = dwalltime();
    int resultados[41];
    for(i=1;i<=40;i++){
        resultados[i]= i*i;
    }
    for(i=0;i<N*N;i++){
        int pos = C[i];
        C2[i] = resultados[pos];
    }
    timeVector = dwalltime() - tick;
    printf("Tiempo requerido para elevar a la potencia a la matriz con vector: %f \n",timeVector);


    //-----suma todo e imprime------
    double totalA = 0,totalB = 0, totalC= 0;
    for(i=0;i<N*N;i++){
        totalA+=A2[i];
        totalB+=B2[i];
        totalC+=C2[i];
    }
    printf("primer y ultimo A2 %.0f , %.0f \n",A2[0],A2[N*N-1]);
    printf("primer y ultimo B2 %.0f , %.0f \n",B2[0],B2[N*N-1]);
    printf("primer y ultimo C2 %.0f , %.0f \n",C2[0],C2[N*N-1]);
    printf("totales (deben ser parecidos): %.0f %.0f %.0f",totalA,totalB,totalC);
    free(A);
    free(B);
    free(C);
    free(A2);
    free(B2);
    free(C2);
    return 0;
};