FamiHug

TTCS Ver.0.2

Jun 5th, 2011
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.80 KB | None | 0 0
  1. //TTCS ver0.2
  2. //Khi viet chu y b nam o o thu n
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. /*enum
  7. {
  8.     MAX = 10,
  9. };*/
  10. #define MAX = 10
  11. typedef struct matrix
  12. {
  13.     float hang;
  14.     float cot;
  15.     float euclid;
  16. } type_chuan;
  17.  
  18.  
  19. float* getMatrix(float*, int*);
  20. float* enterMatrix(int);
  21. void printMatrix(float*, int*);
  22.  
  23. int isCheoTroi(float* a,int* n);
  24. float sumOfRemain(float* a, int* n, int);
  25. float absolute(float x);
  26. int isFloat(void);
  27.  
  28. type_chuan absMatrix(float* a,int* n);                 
  29. int main()
  30. {
  31.     float* a;
  32.     int n; 
  33.     int temp;
  34.     a = NULL;
  35.     type_chuan max;
  36.     //Nhap ma tran 
  37.     {
  38.         a = getMatrix(a,&n);
  39.     }
  40.  
  41.     temp = isCheoTroi(a,&n);
  42.     if(temp == 1)   printf("Ma tran da nhap co tinh cheo troi\n");
  43.     else printf("Ma tran khong co tinh cheo troi\n");
  44.    
  45.     max = absMatrix(a,&n);
  46.     printf("Chuan hang: %f\n",max.hang);
  47.     printf("Chuan cot: %f\n",max.cot);
  48.     //Kiem tra tinh cheo troi
  49.    
  50.     //Tinh chuan cua ma tran A va kiem tra su hoi tu cua PP lap don va Seidel
  51.     //Tinh nghiem gan dung voi so l*an lap k cho truoc va danh gia sai so
  52.     //TInh nghiem gan dung voi sai so e cho truoc
  53.     //Tinh nghiem gan dung Xk thoa man()....
  54.  
  55.     return 0;
  56. }
  57.  
  58. //Nhap ma tran
  59. float* getMatrix(float* a, int* n)
  60. {
  61.     //Nhap co ma tran
  62.     do
  63.     {
  64.         printf("Nhap vao co cua ma tran: ");
  65.         scanf("%d",n);
  66.         //Kiem tra gia tri cua n (phai la so nguyen duong)
  67.             if(*n < 2) printf("Gia tri nhap vao khong hop le. Nhap lai n.\n");
  68.             else break;
  69.     } while (1);
  70.     //Nhap cac phan tu
  71.     do
  72.     {
  73.         a = enterMatrix(*n);
  74.         if(a == 0) printf("Nhap lai ma tran co n ");
  75.     } while (!a);
  76.    
  77.     //In ra ma tran
  78.     printMatrix(a,n);
  79.     printf("Done!\n");
  80.     //Exit
  81.     return a;
  82. }
  83.  
  84. //Nhap ma tran.
  85. float* enterMatrix( int n)
  86. {
  87.     int i,j;
  88.     float* a;
  89.     a = (float*)malloc(sizeof(float)*(n)*(n+1));
  90.     for(i = 0; i < n; i ++)
  91.     {
  92.         for(j = 0; j < n + 1; j ++)
  93.         {
  94.             if(j == n)//a[n] chua gia tri b
  95.                 printf("b%d = ",i);
  96.             else
  97.                 printf("a[%d][%d] = ",i,j);
  98.                 scanf("%f",(a + i * (n + 1) + j));
  99.                 //#Ktra cac gia tri nhap vao co toan` la` so' ko?
  100.     //tra ve 1 neu thanh cong, neu trai tra ve 0
  101.         }
  102.     }
  103.     return a;
  104. }
  105.  
  106. //Print matrix
  107. void printMatrix(float* a,int* n)
  108. {
  109.     int i,j;
  110.     printf("Ma tran vua nhap: \n");
  111.     for(i = 0; i < *n; i ++)
  112.         {
  113.             for(j = 0; j < *n + 1; j ++)
  114.             {
  115.                 printf("%5f ",*((a+i*(*n+1)+j)));
  116.             }
  117.             printf("\n");
  118.         }
  119.     return;
  120. }
  121.  
  122. //Kiem tra tinh cheo troi
  123. //Tính chéo trội của một ma trận vuông: Ma trận A với các thành phần aij
  124. //được gọi là có tính chéo trội, nếu giá trị tuyệt đối của các phần tử nằm
  125. //trên đường chéo chính lớn hơn tổng các giá trị tuyệt đối của các phần còn lại nằm cùng hàng
  126. int isCheoTroi(float* a,int* n)
  127. {
  128.     printf("Kiem tra tinh cheo troi cua ma tran vua nhap: \n");
  129.     int i,j,t = 1;
  130.     for(i = 0; i < *n; i ++)
  131.     {
  132.         if(absolute(*(a + i * (*n + 1) + i)) <= sumOfRemain(a,n,i))//Khong co tinh cheo troi
  133.         {
  134.             printf("|a[%d][%d]| = %f <= ",i,i,absolute(*(a + i * (*n + 1) + i)));
  135.             for(j = 0; j < *n; j ++)
  136.             {
  137.                 if(j != i) printf("|a[%d][%d]| ",i,j);
  138.                 if( j > 0 && j < *n - 1) printf("+ ");
  139.             }
  140.             printf("\n");
  141.             t = t - 1; break;
  142.         }
  143.         //Co tinh cheo troi
  144.         else
  145.         {
  146.            
  147.             printf("|a[%d][%d]| = %f > ",i,i,absolute(*(a + i * (*n + 1) + i)));
  148.             for(j = 0; j < *n; j ++)
  149.             {
  150.                 if(j != i)
  151.                 {
  152.                     printf("|a[%d][%d]|",i,j);
  153.                     if(j < *n - 1)
  154.                     {
  155.                         if(i == *n - 1 && j == *n - 2) {}
  156.                         else printf(" + ");
  157.                     }
  158.                 }
  159.                 if(j == *n - 1) printf("\n");
  160.             }
  161.  
  162.         }              
  163.     }
  164.     return t;
  165. }
  166.  
  167. float sumOfRemain(float* a, int* n, int i)
  168. {
  169.     float sor = 0;
  170.     int j;
  171.     for(j = 0; j < *n; j ++)
  172.     {
  173.         sor += absolute(*(a + i * (*n + 1) +j));
  174.     }
  175.     sor = sor - *(a + i * (*n + 1) + i);//Tru di phan tu cua duong cheo
  176.     return sor;
  177. }
  178.  
  179.  
  180. float absolute(float x)
  181. {
  182.     if(x < 0) return -x;
  183.     else return x;
  184. }
  185.  
  186. //Create this function to check the input is a float. If not return 0. May be i'll use a buffer
  187. //use isdigit and ispunct in ctype.h
  188. //int isFloat(void)
  189.  
  190. //Tinh chuan cua ma tran A va kiem tra su hoi tu cua PP lap don va Seidel
  191. type_chuan absMatrix(float* a,int* n)
  192. {
  193.     int i,j;
  194.     type_chuan chuan;
  195.     float max = 0;
  196.     float temp = 0;
  197.     //Chuan tinh theo hang
  198.     for(i = 0; i < *n; i++)
  199.     {
  200.         temp = 0;
  201.         for(j = 0; j < *n;j++)
  202.         {
  203.             temp += absolute(*(a + i * (*n + 1) +j));
  204.         }
  205.         max = max>temp ? max : temp;
  206.     }
  207.     chuan.hang = max;
  208.     //Chuan tinh theo cot
  209.     max = 0;
  210.     for(j = 0; j < *n; j++)
  211.     {
  212.         temp = 0;
  213.         for(i = 0; i < *n; i++)
  214.         {
  215.             temp += absolute(*(a + i *(*n + 1) + j));
  216.         }
  217.         max = max>temp ? max : temp;
  218.     }
  219.     chuan.cot = max;
  220.     return chuan;
  221. }  
  222.  
  223. //Lap don
  224.  
  225. //
  226. //Seidel
  227. //Tinh nghiem gan dung voi so lan lap k cho truoc va danh gia sai so
  228.  
  229. //TInh nghiem gan dung voi sai so e cho truoc
  230.  
  231. //Tinh nghiem gan dung Xk thoa man()....
  232. //Max thap phan
Advertisement
Add Comment
Please, Sign In to add comment