Untitled
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; };