t1nman

omp_magic

May 25th, 2012
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.67 KB | None | 0 0
  1. /*  determines if a numerical square magic (sum of elems in each column
  2.  *  equally sum of elems in each row and equally sum of elems
  3.  *  in main diagonal) or not magic
  4.  *              OpenMP Version              */
  5.  
  6. #include <stdio.h>
  7. #include <omp.h>
  8. int isMagic(void);
  9.  
  10. main()
  11. {
  12.     FILE *ofp;
  13.     double start, stop;
  14.  
  15.     start = omp_get_wtime();
  16.  
  17.     omp_set_num_threads(4);
  18.  
  19.     ofp = fopen("output.txt", "w");
  20.    
  21.     if (isMagic() == 0)
  22.         fprintf(ofp, "%s\n", "NO");
  23.     else
  24.         fprintf(ofp, "%s\n", "YES");
  25.  
  26.     fclose(ofp);
  27.  
  28.     stop = omp_get_wtime();
  29.     printf("time is: %lf\n", stop - start);
  30.    
  31.     return 0;
  32. }
  33.  
  34. int isMagic(void)
  35. {
  36.     int i, j;
  37.     FILE *ifp;
  38.     int size, sum = 0, diag = 0, line = 0;
  39.     int square[10][10];
  40.     int col[10];
  41.  
  42.     ifp = fopen("input.txt", "r");
  43.     fscanf(ifp, "%d\n", &size);
  44.  
  45. #pragma omp parallel
  46. {
  47.  
  48. #pragma omp sections
  49. {
  50. #pragma omp section
  51. {
  52.     for (i = 0; i < size; i++) {
  53.         for (j = 0; j < size; j++)
  54.             fscanf(ifp, "%d", &square[i][j]);
  55.     }
  56. }
  57.  
  58. #pragma omp section
  59. {
  60.        
  61.     for (j = 0; j < size; j++) {
  62.         sum += square[0][j];
  63.         col[j] = 0;
  64.     }
  65.  
  66. }
  67. }
  68. }
  69.  
  70.     for (i = 0; i < size; i++) {
  71.         for (j = 0; j < size; j++) {
  72.             line += square[i][j];
  73.             col[j] += square[i][j];
  74.             if (i == j)
  75.                 diag += square[i][j];
  76.         }
  77.         if (line != sum)
  78.             return 0;
  79.         else
  80.             line = 0;
  81.     }
  82.  
  83.  
  84.    for (j = 0; j < size; j++) {
  85.         if (col[j] != sum)
  86.             return 0;
  87.     }
  88.  
  89.  
  90.     if (diag != sum)
  91.         return 0;
  92.    
  93.     fclose(ifp);
  94.  
  95.     return 1;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment