Advertisement
daniel199410

Practica 1

May 22nd, 2015
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>       /* clock_t, clock, CLOCKS_PER_SEC */
  5. #include <math.h>       /* sqrt */
  6. #include <windows.h>
  7.  
  8. int *numeros;
  9.  
  10. void readi(int *vector, int n, char *nombre){
  11.     char temp[19];
  12.     char aux;
  13.     int cont = 0;
  14.     FILE *f;
  15.     f = fopen(nombre, "r");
  16.     if(f == NULL){
  17.         printf("No se ha podido abrir el fichero");
  18.         exit(1);
  19.     }
  20.     while(feof(f) == 0){
  21.         fgets(temp, 19, f);
  22.         *(vector + cont) = atoi(temp);
  23.         cont++;
  24.     }  
  25.     fclose(f); 
  26. }
  27.  
  28. void readf(float *fvector, int n, char *nombre){
  29.     char temp[19];
  30.     int cont = 0;
  31.     FILE *f;
  32.     f = fopen(nombre, "r");
  33.     if(f == NULL){
  34.         printf("No se ha podido abrir el fichero");
  35.         exit(1);
  36.     }
  37.     while(feof(f) == 0){       
  38.         fgets(temp, 30, f);
  39.         fvector[cont] = atof(temp);
  40.         cont++;
  41.     }
  42.     fclose(f); 
  43. }
  44.  
  45. void
  46. merge (int *A, int a, int *B, int b, int *C)
  47. {
  48.   int i,j,k;
  49.   i = 0;
  50.   j = 0;
  51.   k = 0;
  52.   while (i < a && j < b) {
  53.     if (A[i] <= B[j]) {
  54.       /* copy A[i] to C[k] and move the pointer i and k forward */
  55.       C[k] = A[i];
  56.       i++;
  57.       k++;
  58.     }
  59.     else {
  60.       /* copy B[j] to C[k] and move the pointer j and k forward */
  61.       C[k] = B[j];
  62.       j++;
  63.       k++;
  64.     }
  65.   }
  66.   /* move the remaining elements in A into C */
  67.   while (i < a){
  68.     C[k]= A[i];
  69.     i++;
  70.     k++;
  71.   }
  72.   /* move the remaining elements in B into C */
  73.   while (j < b){
  74.     C[k]= B[j];
  75.     j++;
  76.     k++;
  77.   }
  78. }  
  79.  
  80. /**
  81.  * merge_sort()
  82.  * Sort array A with n integers, using merge-sort algorithm.
  83.  **/
  84. void
  85. merge_sort(int *A, int n) {
  86.   int i;
  87.   int *A1, *A2;
  88.   int n1, n2;
  89.  
  90.   if (n < 2)
  91.     return;   /* the array is sorted when n=1.*/
  92.  
  93.   /* divide A into two array A1 and A2 */
  94.   n1 = n / 2;   /* the number of elements in A1 */
  95.   n2 = n - n1;  /* the number of elements in A2 */
  96.   A1 = (int*)malloc(sizeof(int) * n1);
  97.   A2 = (int*)malloc(sizeof(int) * n2);
  98.  
  99.   /* move the first n/2 elements to A1 */
  100.   for (i =0; i < n1; i++) {
  101.     A1[i] = A[i];
  102.   }
  103.   /* move the rest to A2 */
  104.   for (i = 0; i < n2; i++) {
  105.     A2[i] = A[i+n1];
  106.   }
  107.   /* recursive call */
  108.   merge_sort(A1, n1);
  109.   merge_sort(A2, n2);
  110.  
  111.   /* conquer */
  112.   merge(A1, n1, A2, n2, A);
  113.   free(A1);
  114.   free(A2);
  115. }
  116.  
  117. int main(){
  118.     int n = 1000;
  119.     int *vector;
  120.     int i;
  121.     vector = (int*)malloc(n * sizeof(int));
  122.     LARGE_INTEGER start1, start2, start3, start4, start5, start6, start7, start8, start9,
  123.                     end1, end2, end3, end4, end5, end6, end7, end8, end9;
  124.     LARGE_INTEGER perfFrequency;
  125.     double secs;
  126.     float var;
  127.  
  128.     if(vector == NULL){
  129.         printf("No se ha podido reservar memoria.");
  130.     }else{
  131.         readi(vector, n, "Ordenar.txt");
  132.         if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  133.             perror("Error in QueryPerformanceFrequency()");
  134.             exit(EXIT_FAILURE);
  135.         }
  136.         QueryPerformanceCounter(&start1);
  137.         merge_sort(vector, n);
  138.         QueryPerformanceCounter(&end1);
  139.         secs = end1.QuadPart - start1.QuadPart;
  140.         secs = 1000000000*secs/perfFrequency.QuadPart;
  141.         printf("La tarea de ordenamiento de mil enteros ha tardado %lf nanosegundos\n", secs);         
  142.     }
  143.    
  144.     n = 10000000;
  145.     int *vector10;
  146.     vector10 = (int*)malloc(n * sizeof(int));
  147.    
  148.     if(vector10 == NULL){
  149.         printf("No se ha podido reservar memoria.");
  150.     }else{
  151.         readi(vector10, n, "ordenar10m.txt");
  152.         if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  153.             perror("Error in QueryPerformanceFrequency()");
  154.             exit(EXIT_FAILURE);
  155.         }
  156.         QueryPerformanceCounter(&start2);
  157.         merge_sort(vector10, n);
  158.         QueryPerformanceCounter(&end2);
  159.         secs = end2.QuadPart - start2.QuadPart;
  160.         secs = 1000000000*secs/perfFrequency.QuadPart;
  161.         printf("La tarea de ordenamiento de diez mil enteros ha tardado %lf nanosegundos\n", secs);        
  162.     }
  163.    
  164.     long val;
  165.     int *vectorop;
  166.     vectorop = (int*)malloc(n*sizeof(int));
  167.     readi(vectorop, n, "op.txt");
  168.     if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  169.             perror("Error in QueryPerformanceFrequency()");
  170.             exit(EXIT_FAILURE);
  171.         }
  172.     QueryPerformanceCounter(&start3);
  173.     for(i = 0; i < n - 1; i++){
  174.         val = vectorop[i]+vector10[i + 1];
  175.     }
  176.     QueryPerformanceCounter(&end3);
  177.     secs = end3.QuadPart - start3.QuadPart;
  178.     secs = 1000000000*secs/perfFrequency.QuadPart;
  179.     printf("La tarea de suma de enteros ha tardado %lf nanosegundos\n", secs);
  180.    
  181.     if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  182.             perror("Error in QueryPerformanceFrequency()");
  183.             exit(EXIT_FAILURE);
  184.         }
  185.     QueryPerformanceCounter(&start4);
  186.     for(i = 0; i < n - 1; i++){
  187.         val = vectorop[i]-vector10[i + 1];
  188.     }
  189.     QueryPerformanceCounter(&end4);
  190.     secs = end4.QuadPart - start4.QuadPart;
  191.     secs = 1000000000*secs/perfFrequency.QuadPart;
  192.     printf("La tarea de resta de enteros ha tardado %lf nanosegundos\n", secs);  
  193.    
  194.     if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  195.             perror("Error in QueryPerformanceFrequency()");
  196.             exit(EXIT_FAILURE);
  197.         }
  198.     QueryPerformanceCounter(&start5);
  199.     for(i = 0; i < n - 1; i++){
  200.         val = vectorop[i]*vector10[i + 1];
  201.     }
  202.     QueryPerformanceCounter(&end5);
  203.     secs = end5.QuadPart - start5.QuadPart;
  204.     secs = 1000000000*secs/perfFrequency.QuadPart;
  205.     printf("La tarea de multiplicación de enteros ha tardado %lf nanosegundos\n", secs);  
  206.    
  207.     double vald;
  208.     if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  209.             perror("Error in QueryPerformanceFrequency()");
  210.             exit(EXIT_FAILURE);
  211.         }
  212.     QueryPerformanceCounter(&start6);
  213.     for(i = 0; i < n - 1; i++){
  214.         vald = vectorop[i]/vector10[i + 1];
  215.     }
  216.     QueryPerformanceCounter(&end6);
  217.     secs = end6.QuadPart - start6.QuadPart;
  218.     secs = 1000000000*secs/perfFrequency.QuadPart;
  219.     printf("La tarea de división de enteros ha tardado %lf nanosegundos\n", secs);  
  220.    
  221.     n = 10000000;
  222.     float *fvector;
  223.     fvector = (float*)malloc(n * sizeof(float));
  224.  
  225.     if(fvector == NULL){
  226.         printf("No se ha podido reservar memoria.");
  227.     }else{
  228.         readf(fvector, n, "fop.txt");
  229.         if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  230.             perror("Error in QueryPerformanceFrequency()");
  231.             exit(EXIT_FAILURE);
  232.         }  
  233.         QueryPerformanceCounter(&start7);
  234.         for(i = 0; i < n - 1; i++){
  235.             var = fvector[i]+fvector[i + 1];
  236.         }
  237.         QueryPerformanceCounter(&end7);
  238.         secs = end7.QuadPart - start7.QuadPart;
  239.         secs = 1000000000*secs/perfFrequency.QuadPart;
  240.         printf("La tarea de suma de reales ha tardado %lf nanosegundos\n", secs);
  241.            
  242.         if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  243.             perror("Error in QueryPerformanceFrequency()");
  244.             exit(EXIT_FAILURE);
  245.         }
  246.         QueryPerformanceCounter(&start8);
  247.         for(i = 0; i < n - 1; i++){
  248.             var = fvector[i]-fvector[i + 1];
  249.         }
  250.         QueryPerformanceCounter(&end8);
  251.         secs = end8.QuadPart - start8.QuadPart;
  252.         secs = 1000000000*secs/perfFrequency.QuadPart;
  253.         printf("La tarea de resta de reales ha tardado %lf nanosegundos\n", secs);  
  254.  
  255.         LARGE_INTEGER start10, end10;
  256.         LARGE_INTEGER perfFrequency1;
  257.         double secs1;
  258.         if (QueryPerformanceFrequency(&perfFrequency1) == 0 || perfFrequency1.QuadPart == 0L)
  259.         {
  260.         perror("Error in QueryPerformanceFrequency()");
  261.         exit(EXIT_FAILURE);
  262.         }
  263.         QueryPerformanceCounter(&start10);
  264.  
  265.         for(i = 0; i < n - 1; i++){
  266.             var = fvector[i]*fvector[i + 1];
  267.         }
  268.         QueryPerformanceCounter(&end10);
  269.         secs = end10.QuadPart - start10.QuadPart;
  270.         secs = 1000000000*secs/perfFrequency.QuadPart;
  271.         printf("La tarea de multiplicación de reales ha tardado %lf nanosegundos\n", secs);  
  272.        
  273.         if (QueryPerformanceFrequency(&perfFrequency) == 0 || perfFrequency.QuadPart == 0L){
  274.             perror("Error in QueryPerformanceFrequency()");
  275.             exit(EXIT_FAILURE);
  276.         }
  277.         QueryPerformanceCounter(&start1);
  278.         for(i = 0; i < n - 1; i++){
  279.             var = fvector[i]/fvector[i + 1];
  280.         }
  281.         QueryPerformanceCounter(&end1);
  282.         secs = end1.QuadPart - start1.QuadPart;
  283.         secs = 1000000000*secs/perfFrequency.QuadPart;
  284.         printf("La tarea de división de reales ha tardado %lf nanosegundos\n", secs);                 
  285.     }
  286.        
  287.     system("pause");
  288.     return 0;
  289. }
  290.  
  291. //http://www.cs.cityu.edu.hk/~lwang/ccs4335/mergesort.c
  292. //http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement