dreamer2908

THDC CSC01.D31 Thi Thu - Lop Thay

Aug 21st, 2013
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.05 KB | None | 0 0
  1. // THCD_Thi_thu.cpp : main project file.
  2. /*
  3. De lam trong 60'
  4. 1.Xay dung 1 struct {1 chuoi 5 ki tu,1 so nguyen 2chu so} phat sinh ngau nhien danh sach struct tren
  5. va in ra man hinh voi so luong phan tu nhap tu ban phim
  6. 2.thuc hien xoa cac phan tu tren struct sao cho danh sach chi giu lai phan tu phan biet duy nhat(theo so nguyen)
  7. 3.sap xep le truoc, chan o sau
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <conio.h>
  13. #include <string.h>
  14.  
  15. typedef struct  
  16. {
  17.     char text[6];
  18.     int number;
  19. } data;
  20.  
  21. typedef data *pdata;
  22.  
  23. void inputData(pdata &plist, int &n);
  24. void printDataList(pdata list, int n);
  25. void removeDup(pdata &list, int &n);
  26. void sortOddEven(pdata list, int n);
  27.  
  28. int main(array<System::String ^> ^args)
  29. {
  30.     pdata list = NULL;
  31.     int n = 0;
  32.  
  33.     inputData(list, n);
  34.     printDataList(list, n);
  35.  
  36.     removeDup(list, n);
  37.     printf("\nSau khi don dep: \n");
  38.     printDataList(list, n);
  39.  
  40.     sortOddEven(list, n);
  41.     printf("\nSau khi sap xep: \n");
  42.     printDataList(list, n);
  43.  
  44.     free(list);
  45.  
  46.     _getch();
  47.     return 0;
  48. }
  49.  
  50. void generateRandomData(pdata list, int n)
  51. {
  52.     for (int i = 0; i < n; i++)
  53.     {
  54.         list[i].number = rand() % 99; // a random whole number up to 99
  55.         for (int j = 0; j < 5; j++)
  56.             list[i].text[j] = rand() % 93 + 33; // a printable character from 33 (!) to 126 (~). The rest are control characters.
  57.         list[i].text[5] = '\0';
  58.     }
  59. }
  60.  
  61. void inputData(pdata &list, int &n)
  62. {
  63.     printf("Nhap so luong phan tu: ");
  64.     scanf_s("%d", &n);
  65.     list = (pdata)calloc(n, sizeof(data));
  66.     generateRandomData(list, n);
  67. }
  68.  
  69. void printDataList(pdata list, int n)
  70. {
  71.     printf("Co %d phan tu trong danh sach.\n", n);
  72.     for (int i = 0; i < n; i++)
  73.     {
  74.         printf("P.tu %d: %s %d\n", i+1, list[i].text, list[i].number);
  75.     }
  76. }
  77.  
  78. int valueExist(pdata list, int value, int searchLimit)
  79. {
  80.     for (int i = 0; i < searchLimit; i++)
  81.     {
  82.         if (list[i].number == value) return 1;
  83.     }
  84.     return 0;
  85. }
  86.  
  87. void removeDup(pdata &list, int &n)
  88. {
  89.     for (int i = 1; i < n;) //This should start at 1
  90.     {
  91.         if (valueExist(list, list[i].number, i))
  92.         {
  93.             //remove data using a memory operation for performance
  94.             memmove(&list[i], &list[i+1], (n-i-1)*sizeof(data));
  95.             n--;
  96.         }
  97.         else i++;
  98.     }
  99.     //reduce memory usage. Not compulsory
  100.     list = (pdata)realloc(list, n*sizeof(data));
  101. }
  102.  
  103. void swapData(pdata dest, pdata source)
  104. {
  105.     data tmp;
  106.     tmp.number = dest->number;
  107.     strcpy_s(tmp.text, dest->text);
  108.     dest->number = source->number;
  109.     strcpy_s(dest->text, source->text);
  110.     source->number = tmp.number;
  111.     strcpy_s(source->text, tmp.text);
  112. }
  113.  
  114. void sortOddEven(pdata list, int n)
  115. {
  116.     int limiter = n; //Everything AFTER the limiter is even
  117.     for (int i = 0; i < limiter; i++)
  118.     {
  119.         if (list[i].number % 2 == 0)
  120.         {
  121.             //It's an even number. Needs to find an odd number somewhere between here and the end (limiter) to swap. If there's none, our job is done.
  122.             int here = -1;
  123.             for (;limiter > i;)
  124.             {
  125.                 if (list[limiter].number % 2 == 1)
  126.                 {
  127.                     here = limiter;
  128.                     break;
  129.                 }
  130.                 else limiter--;
  131.             }
  132.             if (here != -1) swapData(&list[here], &list[i]);
  133.         }
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment