Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // THCD_Thi_thu.cpp : main project file.
- /*
- De lam trong 60'
- 1.Xay dung 1 struct {1 chuoi 5 ki tu,1 so nguyen 2chu so} phat sinh ngau nhien danh sach struct tren
- va in ra man hinh voi so luong phan tu nhap tu ban phim
- 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)
- 3.sap xep le truoc, chan o sau
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- typedef struct
- {
- char text[6];
- int number;
- } data;
- typedef data *pdata;
- void inputData(pdata &plist, int &n);
- void printDataList(pdata list, int n);
- void removeDup(pdata &list, int &n);
- void sortOddEven(pdata list, int n);
- int main(array<System::String ^> ^args)
- {
- pdata list = NULL;
- int n = 0;
- inputData(list, n);
- printDataList(list, n);
- removeDup(list, n);
- printf("\nSau khi don dep: \n");
- printDataList(list, n);
- sortOddEven(list, n);
- printf("\nSau khi sap xep: \n");
- printDataList(list, n);
- free(list);
- _getch();
- return 0;
- }
- void generateRandomData(pdata list, int n)
- {
- for (int i = 0; i < n; i++)
- {
- list[i].number = rand() % 99; // a random whole number up to 99
- for (int j = 0; j < 5; j++)
- list[i].text[j] = rand() % 93 + 33; // a printable character from 33 (!) to 126 (~). The rest are control characters.
- list[i].text[5] = '\0';
- }
- }
- void inputData(pdata &list, int &n)
- {
- printf("Nhap so luong phan tu: ");
- scanf_s("%d", &n);
- list = (pdata)calloc(n, sizeof(data));
- generateRandomData(list, n);
- }
- void printDataList(pdata list, int n)
- {
- printf("Co %d phan tu trong danh sach.\n", n);
- for (int i = 0; i < n; i++)
- {
- printf("P.tu %d: %s %d\n", i+1, list[i].text, list[i].number);
- }
- }
- int valueExist(pdata list, int value, int searchLimit)
- {
- for (int i = 0; i < searchLimit; i++)
- {
- if (list[i].number == value) return 1;
- }
- return 0;
- }
- void removeDup(pdata &list, int &n)
- {
- for (int i = 1; i < n;) //This should start at 1
- {
- if (valueExist(list, list[i].number, i))
- {
- //remove data using a memory operation for performance
- memmove(&list[i], &list[i+1], (n-i-1)*sizeof(data));
- n--;
- }
- else i++;
- }
- //reduce memory usage. Not compulsory
- list = (pdata)realloc(list, n*sizeof(data));
- }
- void swapData(pdata dest, pdata source)
- {
- data tmp;
- tmp.number = dest->number;
- strcpy_s(tmp.text, dest->text);
- dest->number = source->number;
- strcpy_s(dest->text, source->text);
- source->number = tmp.number;
- strcpy_s(source->text, tmp.text);
- }
- void sortOddEven(pdata list, int n)
- {
- int limiter = n; //Everything AFTER the limiter is even
- for (int i = 0; i < limiter; i++)
- {
- if (list[i].number % 2 == 0)
- {
- //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.
- int here = -1;
- for (;limiter > i;)
- {
- if (list[limiter].number % 2 == 1)
- {
- here = limiter;
- break;
- }
- else limiter--;
- }
- if (here != -1) swapData(&list[here], &list[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment