[ create a new paste ] login | about

Link: http://codepad.org/xWBCm3fv    [ raw code | output | fork ]

C, pasted on May 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
/*							  CẤU TRÚC DỮ LIỆU
						  BÀI TẬP THỰC HÀNH CUỐI KỲ
		|---------------------------------------------------------------------|
		|		Số Lượng Các Thành Viên Của Nhóm : 3 Người					  |
		| Họ Tên Sinh Viên 1 : Nguyễn Việt Nam Sơn                            |
		| Mã Số Sinh Viên  1 : 1261031										  |
		| Họ Tên Sinh Viên 2 : Chu Anh Anh									  |
		| Mã Số Sinh Viên  2 : 1261001										  |
		| Họ Tên Sinh Viên 3 : Trần Văn Nghĩa								  |
		| Mã Số Sinh Viên  3 : 1261026										  |
		|---------------------------------------------------------------------|
*/
/* 

Tác giả: Nguyễn Việt Nam Sơn
Trung tâm đào tạo tin học - Thiết kế phần mềm - Sơn Đẹp Trai: www.SonDepTrai.com

Nguồn source code này Tôi viết vào năm 2012 lúc mới bắt đầu học lập trình C/C++ nên một số cách sẽ không được tối ưu - Bạn chỉ nên dùng trên tinh thần tham khảo thôi nhé.
Mong giúp đỡ được Bạn trên con đường Học Lập Trình.
TẤT CẢ VÌ SỰ THÀNH CÔNG CỦA BẠN

*/
/* ==================================================== BÀI LÀM ========================================================= */

/* Yêu cấu để chạy được chương trình : Cô phải tạo ra 1 File chứa thông tin dữ liệu các phân số (theo như yêu cầu đề bài) và đặt nó nằm trong ổ đĩa C . */

/* Xin Cô khi chạy chương trình hãy nhập vào lựa chọn số 6 trong bảng MeNu - Đó là món quà mà chúng em làm gửi tặng chia tay Cô . */

/* ====================================== Các Thư Viện Sử Dụng Trong Chương Trình ======================================= */
#include "stdio.h"
#include "conio.h"
#include "time.h"
#include "Windows.h"
/* ====================================================================================================================== */

/* ================================================ Các Hàm Hỗ Trợ Đồ Họa =============================================== */
// Hàm tăng kích cỡ của khung CMD .
void resizeConsole(int width, int height)
{
	HWND console = GetConsoleWindow();
	RECT r;
	GetWindowRect(console, &r);
	MoveWindow(console, r.left, r.top, width, height, TRUE);
}

// Hàm lấy tọa độ vị trí con trỏ .
void gotoxy(int x,int y)
{
	HANDLE hstdout=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD position = {x,y};
	SetConsoleCursorPosition(hstdout,position);
}

// Hàm tô màu chữ .
void textcolor(int x)
{
	HANDLE mau;
	mau=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(mau,x);
}

// Hàm đồ họa cho tên tác giả .
void TacGia()
{
	textcolor(14); // Tô chữ màu vàng .
	printf("\n--------------------------------------------------------------------------------\n");
	printf("\n\t\t\t\tDesigned By : \n");
	printf("\n\t\t\tNguyen Viet Nam Son - 1261031\n");
	printf("\n\t\t\tChu Anh Anh         - 1261001\n");
	printf("\n\t\t\tTran Van Nghia      - 1261026\n");
	printf("\n--------------------------------------------------------------------------------\n");
}
/* ====================================================================================================================== */

/* ====================================== In Lời Chào Khi Kết Thúc Chương Trình ========================================= */
void ThanksYouForUsingTheProgram()
{
	system("cls"); // Xóa đi mọi dữ liệu đã làm trước đó .
	srand(time(NULL)); // Khởi tạo chạy ngẫu nhiên .
	for(int j=1;j<=20;j++)
	{
		int color=rand()%15+1; // Khởi tạo màu chạy ngẫu nhiên trong đoạn thang màu [1,15].
		Sleep(300);
		gotoxy(j-1,40);
		printf("			");
		gotoxy(j,40);
		textcolor(color);
		printf("\nThanks You For Using The Program ! Goodbye And See You Later !\n"); // Khi người dùng thoát chương trình sẽ hiển thị ra lời chào !
	}
	textcolor(15);
	gotoxy(3,42);
}
/* ====================================================================================================================== */

/* ====================================== In Lời Chúc Tốt Đẹp Nhất Gửi Đến Cô =========================================== */
void ThanksTeacherHoThiThanhTuyen()
{
	int i,j;
	for(i=1;i<=100;i++)
	{
		system("cls"); // Xóa đi mọi dữ liệu đã làm trước đó .
		textcolor(10); // Tô chữ màu xanh đậm .
		printf("\n\t\t\t Connecting From Thank Teacher... ");
		printf("\n\n\t\t\tSend ......... To Teacher:Ho Thi Thanh Tuyen  ");
		printf("\n\n\t\t\t\tLoading...%d %c", i, '%');
		printf("\n\n\t\t\t------------------------------------------");
		textcolor(7); // Trả về màu chữ bình thường .
		if(i==11)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\t\t Thoi gian troi qua that nhanh chong ! ");
			Sleep(4000);
		}
		if(i==22)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\tMoi hom nao chung em con bo*~ ngo*~ voi mon hoc Cau Truc Du Lieu !");
			Sleep(5000);
		}
		if(i==33)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\t\tMoi hom nao con hoc tiet thuc hanh Cau Truc Du Lieu dau tien !");
			Sleep(5000);
		}
		if(i==44)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\t\tMoi hom nao con ngoi nghe Co dung tren buc giang bai !");
			Sleep(5000);
		}
		if(i==55)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\tMa hom nay da la bai tap thuc hanh cuoi cung chung em nop cho Co ! ");
			printf("\n\n\tThoi gian troi qua that nhanh chong,moi do ma da 10 thang troi qua ! ");
			Sleep(4000);
		}
		if(i==66)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\nChung em rat cam on Co da tan tinh chi day chung em trong suot 10 thang qua ! ");
			Sleep(4000);
		}
		if(i==77)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\nChung em cung khong biet noi gi hon ngoai viec gui den Co loi chuc suc khoe tot dep nhat ! ");
			Sleep(4000);
		}
		if(i==88)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\nChuc cho Co luon gap nhieu dieu may man,gat hai duoc nhieu thanh cong trong cong viec & trong cuoc song ! ");
			Sleep(4000);
		}
		if(i==99)
		{
			for(j=1;j<=23;j++)
			{
				system("cls");
				if(j==1)
				{
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j== 2)
				{
					printf("\t\t * . \n");
					Sleep(500);
				}
				if(j== 3)
				{
					printf("\t\t * . \n");
					printf("\t\t . \n");
					Sleep(500);
				}
				if(j== 4)
				{
					printf("\t\t * . . \n");
					printf("\t\t . \n");
					Sleep(500);
				}
				if(j== 5)
				{
					printf("\t\t * . . * \n");
					printf("\t\t . \n");
					Sleep(500);
				}
				if(j== 6)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . \n");
					Sleep(500);
				}
				if(j== 7)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					Sleep(500);
				}
				if(j== 8)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j== 9)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j== 10)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j== 11)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==12)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					printf("\t\t * \n");
					printf("\t\t * * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==13)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==14)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t . * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==15)
				{
					printf("\t\t * . . *. \n");
					printf("\t\t * . * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==16)
				{
					printf("\t\t .* . . *. \n");
					printf("\t\t * . * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * * \n");
					printf("\t\t * \n");
					Sleep(500);
				}
				if(j==17)
				{
					printf("\t\t .* . . *. .* . . *. \n");
					printf("\t\t * . * * . * \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t * I Wish You ​Success In Work And In Life * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * \n");
					Sleep(500);
				}
				if(j==18)
				{
					printf("\t\t \n");
					printf("\t\t \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t I Wish You ​Success In Work And In Life \n");
					printf("\t\t \n");
					printf("\t\t \n");
					printf("\t\t \n");
					Sleep(500);
				}
				if(j==19)
				{
					printf("\t\t .* . . *. .* . . *. \n");
					printf("\t\t * . * * . * \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t * I Wish You ​Success In Work And In Life * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * \n");
					Sleep(500);
				}
				if(j==20)
				{
					printf("\t\t \n");
					printf("\t\t \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t I Wish You ​Success In Work And In Life \n");
					printf("\t\t \n");
					printf("\t\t \n");
					printf("\t\t \n");
					Sleep(500);
				}
				if(j==21)
				{
					printf("\t\t .* . . *. .* . . *. \n");
					printf("\t\t * . * * . * \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t * I Wish You ​Success In Work And In Life * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * \n");
					Sleep(500);
				}
				if(j==22)
				{
					printf("\t\t \n");
					printf("\t\t \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t I Wish You ​Success In Work And In Life \n");
					printf("\t\t \n");
					printf("\t\t \n");
					printf("\t\t \n");
					Sleep(500);
				}
				if(j==23)
				{
					printf("\t\t .* . . *. .* . . *. \n");
					printf("\t\t * . * * . * \n");
					textcolor(13); // Tô chữ màu hồng !
					printf("\t\t * I Wish You ​Success In Work And In Life * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * * * \n");
					printf("\t\t * * \n");
					Sleep(500);
				}
			}
			Sleep(5000);
		}
		if(i==100)
		{
			textcolor(13); // Tô chữ màu hồng !
			printf("\n\n\t\t\t\t100 %c THE END ! ", '%');
			printf("\n\n\t\t\tGood Luck To You ");
			Sleep(5000);
		}
		Sleep(100);
	}
}
/* ====================================================================================================================== */

/* ======================================== Khai Báo Cấu Trúc Dữ Liệu Phân Số =========================================== */
struct phanso
{
	int tuso; // Khai báo theo đúng như yêu cầu đề bài .
	int mauso; // Khai báo theo đúng như yêu cầu đề bài .
};
typedef struct phanso PHANSO;
/* ====================================================================================================================== */

/* ====================================== Hàm Đọc File InPut.txt Vào Chương Trình ======================================= */
void DocFileInPut(PHANSO a[],int &n)
{
	FILE * pFile;
	pFile = fopen("C:\\InPut.txt", "r+t"); // Tìm kiếm và mở File InPut.txt ở trong ổ đĩa C để đọc dữ liệu trong File vào chương trình .
	if(pFile==NULL) // Nếu File rỗng (không tìm thấy File) .
	{
		textcolor(13); // Tô màu hồng . 
		printf("\nKhong Doc Duoc File InPut.txt Trong O C \n"); // Báo lỗi không đọc được file InPut.txt trong ổ đĩa C .
		printf("\nMoi Ban Tao Ra C:\\InPut.txt De Nhap Du Lieu Cho Chuong Trinh "); // Nhắc nhở người dùng tạo ra File InPut.txt để nhập dữ liệu cho chương trình .
	}
	else // Nếu đã tìm được File thì đọc dữ liệu trong File vào chương trình .
	{
		textcolor(13); // Tô màu hồng . 
		printf("\nDu Lieu Tu C:\\InPut.txt Da Duoc Doc Vao Chuong Trinh !\n"); // Thông báo đã đọc thành công dữ liệu từ File InPut.txt vào chương trình .
		textcolor(7); // Trả về màu chữ bình thường .
		fscanf(pFile,"%d\n",&n); // Đọc dữ liệu số lượng các phân số trong File vào chương trình .
		if(n<0)
		{
			printf("\nSo luong phan so khong hop le!Xin hay kiem tra lai trong File !"); // Báo lỗi số lượng các phân số trong File không hợp lệ .
		}
		else if(n>=0)
		{
			for(int i=0;i<n;i++)
			{
				fscanf(pFile,"%d %d\n",&a[i].tuso,&a[i].mauso); // Đọc dữ liệu tử số và mẫu số trong File vào chương trình .
				if(a[i].mauso==0) // Trường hợp phân số không hợp lệ (mẫu số bằng 0) .
				{
					printf("\nMau so cua phan so thu %d khong hop le!Xin vui kiem tra lai trong File !\n",i+1); // Báo lỗi phân số không hợp lệ (mẫu số bằng 0) .
				}
				else if(a[i].mauso!=0) // Trường hợp phân số hợp lệ (mẫu số khác 0) .
				{
					// Nếu người dùng nhập vào mẫu số âm thì ta sẽ chuyển dấu trừ (-) lên tử số và mẫu số lúc đó sẽ không còn âm nữa . Để làm được điều đó thì ta phải đặt điều kiện nếu người dùng nhập vào giá trị mẫu số âm thì đồng thời nhân tử số & mẫu số cho -1 .
					if(a[i].mauso < 0)
					{
						a[i].tuso=a[i].tuso *-1; // Nhân tử số cho -1 .
						a[i].mauso=a[i].mauso *-1; // Nhân mẫu số cho -1 .
					}
				}
			}
		}
	}
	fclose(pFile); // Đóng File lại .
}
/* ====================================================================================================================== */

/* ======================================== Hàm Xuất Ra Dữ Liệu Các Phân Số ============================================= */
void XuatDuLieu(PHANSO a[],int n)
{
	int dem=0; // Khởi tạo biến đếm = 0 .
	for(int i=0;i<n;i++)
	{
		if(a[i].mauso!=0)
		{
			dem++; // Đếm số lượng các phân số hợp lệ (mẫu số khác 0) .
		}
	}
	printf("\nTong cong co tat ca %d phan so !\n",n); // In ra tổng số lượng các phân số .
	printf("\nCo %d phan so hop le !\n",dem); // In ra số lượng các phân số hợp lệ .
	for(int i=0;i<n;i++)
	{
		if(a[i].mauso!=0)
		{
			printf("\nPhan so thu %d la:%d/%d",i+1,a[i].tuso,a[i].mauso); // In ra các phân số hợp lệ (mẫu số khác 0) .
		}
	}
	printf("\n");
}
/* ====================================================================================================================== */

/* ======================================== Hàm Rút Gọn Các Phân Số ===================================================== */
void RutGonPhanSo(PHANSO a[],int n)
{
	/* Ý Tưởng để rút gọn các phân số là ta đi tìm ra ước chung lớn nhất (UCLN) của tử số & mẫu số . Lần lượt lấy tử số & mẫu số đem chia cho UCLN vừa tìm được => tạo thành phân số rút gọn . */
	
	// Áp dụng ý tưởng trên vào trong bài này thì để cho đơn giản nhất thì ta sẽ đi so sánh giữa tử số & mẫu số của phân số cần rút gọn tìm ra min trong 2 cái đó. Ta khởi tạo min là tử số và thực hiện phép so sánh,nếu mẫu số mà < min => cập nhật lại min = mẫu số.Tiếp đó Khởi tạo vòng lặp giảm dần từ min -> 1 . Nếu giá trị đầu tiên nào thỏa tử số & mẫu số của phân số cần rút gọn đồng thời chia hết cho nó => đó là giá trị cần tìm và ta lần lượt đem tử số & mẫu số chia cho giá trị vừa tìm được .
	
	// Tuy nhiên khi áp dụng vào thì sẽ phát sinh ra 4 trường hợp đó là : 1/ tử số & mẫu số của phân số cần rút gọn đều là số dương . 2/ tử số là số âm,mẫu số là số dương . 3/ tử số & mẫu số đều là số âm . 4/ tử số là số dương,mẫu số là số âm . Ta phải thêm vào 1 số điều kiện ràng buộc .
	printf("\n");
	for(int i=0;i<n;i++)
	{
		// Trường hợp rút gọn cả tử số & mẫu số đều là số dương .
		if(a[i].tuso>=0&&a[i].mauso>0)
		{
			int min; // Khởi tạo 1 biến min .
			min=a[i].tuso; // Gán min = giá trị của tử số .
			if(min>a[i].mauso) // Nếu giá trị mẫu số mà nhỏ hơn min thì cập nhật lại min .
			{
				min=a[i].mauso; // cập nhật lại min .
			}
			for(int j=min;j>=1;j--) // Khởi tạo vòng lặp giảm dần từ min -> 1 .
			{
				if(a[i].tuso%j==0&&a[i].mauso%j==0) // Nếu giá trị đầu tiên thỏa đồng thời tử số & mẫu số cùng chia hết => giá trị cần tìm .
				{
					a[i].tuso=a[i].tuso/j; // lấy tử số chia cho giá trị đó .
					a[i].mauso=a[i].mauso/j; // lấy mẫu số chia cho giá trị đó .
				}
			}
		}
		// Trường hợp rút gọn tử số là số âm & mẫu số là số dương .
		if(a[i].tuso<0&&a[i].mauso>0)
		{
			a[i].tuso=a[i].tuso*-1; // Đầu tiên ta phải nhân tử số cho -1 để biến tử số về dạng số dương để tiện cho việc rút gọn,sau khi xong rồi ta sẽ nhân thêm -1 vào để trả lại giá trị ban đầu của tử số .
			int min; // Khởi tạo 1 biến min .
			min=a[i].tuso; // Gán min = giá trị của tử số .
			if(min>a[i].mauso) // Nếu giá trị mẫu số mà nhỏ hơn min thì cập nhật lại min .
			{
				min=a[i].mauso; // cập nhật lại min .
			}
			a[i].tuso=a[i].tuso*-1; // Trả lại giá trị lúc đầu của tử số bằng cách tiếp tục nhân thêm cho -1 .
			for(int j=min;j>=1;j--) // Khởi tạo vòng lặp giảm dần từ min -> 1 .
			{
				if(a[i].tuso%j==0&&a[i].mauso%j==0) // Nếu giá trị đầu tiên thỏa đồng thời tử số & mẫu số cùng chia hết => giá trị cần tìm .
				{
					a[i].tuso=a[i].tuso/j; // lấy tử số chia cho giá trị đó .
					a[i].mauso=a[i].mauso/j; // lấy mẫu số chia cho giá trị đó .
				}
			}
		}
		// Còn lại 2 trường hợp là cả tử số và mẫu số đều là số âm & trường hợp tử số là số dương,mẫu số là số âm thì không cần làm do khi nhập phân số ta đã đặt điều kiện để xuất ra là nếu mẫu số < 0 thì đồng thời nhân -1 cho cả tử số & mẫu số . Và khi đã nhân xong rồi thì lập tức lại trở về 1 trong 2 trường hợp rút gọn mà ta đã làm ở trên .		
	}
}
/* ====================================================================================================================== */

/* ================================================= Hàm Hoán Vị ======================================================== */
void Swap(PHANSO &x,PHANSO &y)
{
	PHANSO temp;
	temp=x;
	x=y;
	y=temp;
}
/* ====================================================================================================================== */

/* ======================================================= Hàm Shift ==================================================== */
void Shift(PHANSO a[],int n, int i)
{
	int left = 2*i+1; 
	int right = 2*i+2;
	int max;
	if(left<n&&(((a[left].tuso*1.0)/a[left].mauso)>((a[i].tuso*1.0)/a[i].mauso)))
	{
		max = left;
	}
	else
	{
		max = i;
	}
	if(right<n&&(((a[right].tuso*1.0)/a[right].mauso)>((a[max].tuso*1.0)/a[max].mauso)))
	{
		max = right;
	}
	if(i!=max) 
	{
		Swap(a[i],a[max]);
		Shift(a,n,max);
	}
}
/* ====================================================================================================================== */

/* ============================================ Hàm CreateHeap ========================================================== */
// Sử dụng hàm Shift bên trên với left hiện hành là phần tử ở giữa dãy ((N-1)/2). Lặp lại quá trình trên với left giảm dần về đầu dãy. */
void CreateHeap(PHANSO a[],int n)
{
	for(int left=(n-1)/2;left>=0;left--) 
	{
		Shift(a,n,left);
	}
}
/* ====================================================================================================================== */

/* ============================================ Hàm HeapSort ============================================================ */
/* 
Giai đoạn 1: Hiệu chỉnh dãy ban đầu thành heap.

Giai đoạn 2: Sắp xếp các phân số dựa trên heap:
- Xét dãy hiện hành là dãy nhập.
- Hoán vị phân số lớn nhất (a0) về vị trí cuối.
- Xét dãy hiện hành loại đã trừ phần tử cuối.
- Hiệu chỉnh lại dãy hiện hành thành heap. 
- Lặp lại quá trình trên tới hết dãy ban đầu . */
void HeapSort(PHANSO a[], int n) 
{
	CreateHeap(a,n); 
	for(int right=n-1;right>0;right--) 
	{
		Swap(a[0],a[right]); 
		Shift(a,right,0);
	}
}
/* ====================================================================================================================== */

/* ============================================== Hàm Ghi File OutPut.txt =============================================== */
void GhiFileOutPut(PHANSO a[],int n)
{
	FILE * pFile;
	pFile = fopen ("C:\\OutPut.txt","wt"); // Mở tập tin OutPut.txt trong ổ đĩa C để ghi dữ liệu.Tập tin sẽ được tạo mới nếu chưa có,ngược lại nếu tập tin có sẵn thì dữ liệu trước đó sẽ bị xóa hết .
	fprintf(pFile,"%d\n",n); // Ghi số lượng các phân số vào đầu File OutPut.txt trong ổ đĩa C .
	for(int i=0;i<n;i++)
	{
		fprintf(pFile,"%d %d\n",a[i].tuso,a[i].mauso); // Ghi giá trị của các phân số sau khi rút gọn và được sắp xếp tăng dần vào File OutPut.txt trong ổ C .
	}
	textcolor(14); // Tô chữ màu vàng .
	printf("\nCac Phan So Sau Khi Sap Xep Tang Dan Duoc Ghi Vao Trong C:\\OutPut.txt ! ");
	printf("\n");
	printf("\nMoi Ban Vao C:\\OutPut.txt De Xem Ket Qua ! ");
	printf("\n");
	fclose (pFile); // Đóng file lại .
}
/* ====================================================================================================================== */

/* ================================================= Hàm MeNu =========================================================== */
void MeNu()
{
	resizeConsole(1000,800); // Tăng kích cỡ của khung CMD lên thành chiều rộng 1000,chiều cao 800 .
	PHANSO a[200]; // Khai báo cấu trúc phân số .
	int n;
	int luachon; // Lựa chọn .
	quaylai1:textcolor(10); // Tô màu xanh đậm cho MeNu
	printf("\n---------------------------------- MeNu ----------------------------------------");
	printf("\n1. Doc Du Lieu Cac Phan So Tu C:\\InPut.txt Vao Chuong Trinh ");
	printf("\n2. Xuat Du Lieu Cac Phan So Vua Doc Tu File InPut.txt ");
	printf("\n3. Rut Gon Cac Phan So ");
	printf("\n4. Sap Xep Tang Dan Cac Phan So Sau Khi Da Duoc Rut Gon ");
	printf("\n5. Ghi Noi Dung Cac Phan So Sau Khi Da Sap Xep Vao C:\\OutPut.txt \n");
	textcolor(13);
	printf("\n\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3");
	textcolor(10);
	printf("\n6. \3\3\3 Loi Chuc Tot Dep Nhat Chung Em Gui Den Teacher : Ho Thi Thanh Tuyen \3\3\3  \n");
	textcolor(13);
	printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3");
	textcolor(10);
	printf("\n0. Thoat Chuong Trinh \n");
	printf("\n--------------------------------------------------------------------------------\n");
	textcolor(7); // Trả về lại màu bình thường .
	printf("\n");
	quaylai:printf("\nNhap Vao Lua Chon Cua Ban:");
	scanf("%d",&luachon);
	printf("\n");
	printf("\nKet Qua:");
	
								/* Tạo ra chương trình MeNu theo cấu trúc if - else if */

	/* Nếu ngay từ ban đầu người dùng không nhập lựa chọn đọc dữ liệu các phân số từ File InPut.txt trong ổ C vào chương trình (lựa chọn số 1) thì các lựa chọn tiếp theo là 2-3-4-5 sẽ không thể thực thi được vì không có nhận được dữ liệu đầu vào . Muốn chạy được chương trình thì tối thiểu người dùng phải nhập vào lựa chọn số 1 đầu tiên thì lúc đó dữ liệu từ File mới được đưa vào chương trình và các lựa chọn tiếp theo sẽ dựa trên đó mà xử lý . */
	
	if(luachon==1) // Lựa chọn đọc dữ liệu các phân số từ File InPut.txt trong ổ đĩa C vào chương trình .
	{
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó . 
		TacGia(); // In ra đồ họa tác giả .
		DocFileInPut(a,n); // Đọc File vào chương trình .
		printf("\n");
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==2) // Lựa chọn xuất ra các dữ liệu vừa đọc từ File .
	{
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó .
		textcolor(14); // Tô chữ màu vàng .
		printf("\n>>>>>>>>>>>>>>>> Du Lieu Cac Phan So Duoc Doc Tu File InPut.txt <<<<<<<<<<<<<<<<\n");
		textcolor(7); // Trả về màu chữ bình thường .
		XuatDuLieu(a,n); // Xuất ra dữ liệu vừa đọc từ File .
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==3) // Lựa chọn rút gọn các phân số và xuất ra chúng .
	{
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó .
		textcolor(14); // Tô chữ màu vàng .
		printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cac Phan So Da Rut Gon <<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
		textcolor(7); // Trả về màu chữ bình thường .
		RutGonPhanSo(a,n); // Rút gọn các phân số .
		XuatDuLieu(a,n); // In ra các phân số sau khi đã được rút gọn ở trên .
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==4) // Lựa chọn sắp xếp tăng dần các phân số đã được rút gọn bằng thuật toán HeapSort .
	{
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó .
		textcolor(14); // Tô chữ màu vàng .
		printf("\n>>>>>>>>>>>>>>>> Sap Xep Tang Dan Cac Phan So Sau Khi Rut Gon <<<<<<<<<<<<<<<<<<\n");
		textcolor(7); // Trả về màu chữ bình thường .
		RutGonPhanSo(a,n); // Rút gọn các phân số .
		HeapSort(a,n); // Sắp xếp các phân số vừa được rút gọn tăng dần bằng thuật toán HeapSort .
		XuatDuLieu(a,n); // Xuất ra các phân số sau khi đã sắp xếp tăng dần .
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==5) // Lựa chọn ghi kết quả các phân số sau khi sắp xếp tăng dần vào File: OutPut.txt trong ổ C .
	{
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó .
		RutGonPhanSo(a,n); // Rút gọn các phân số .
		HeapSort(a,n); // Sắp xếp các phân số vừa được rút gọn tăng dần bằng thuật toán HeapSort .
		GhiFileOutPut(a,n); // Ghi các kết quả vừa sắp xếp xong vào C:\\OutPut.txt .
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==6) // Lựa chọn in ra lời chúc tốt đẹp nhất của tụi em dành cho Cô .
	{
		ThanksTeacherHoThiThanhTuyen(); // In ra lời chúc tốt đẹp nhất mà chúng em gửi tặng đến Cô .
		system("cls"); // Xóa đi hết mọi dữ liệu đã thực thi trước đó .
		goto quaylai1; // Dùng hợp ngữ - chức năng để quay trở lại bảng MeNu cho lần lựa chọn tiếp theo .
	}
	else if(luachon==0) // Lựa chọn thoát chương trình .
	{
		ThanksYouForUsingTheProgram(); // In ra lời chào khi kết thúc chương trình .
	}
	else if(luachon!=1&&luachon!=2&&luachon!=3&&luachon!=4&&luachon!=5&&luachon!=6&&luachon!=0) 
	{
		printf("\nLua chon ban nhap vao khong hop le!Xin vui long nhap lai!"); // Báo lỗi yêu cầu lựa chọn không hợp lệ .
		goto quaylai; // Dùng hợp ngữ - chức năng để quay trở lại cho phép người dùng nhập lại lựa chọn khác .
	}
}
/* ====================================================================================================================== */

/* ==================================================== Hàm Main ======================================================== */
void main()
{
	MeNu();
}
/* ====================================================================================================================== */

/* ====================== Designed By : Nguyễn Việt Nam Sơn - Chu Anh Anh - Trần Văn Nghĩa ============================== */

/* ======================================================= THE END ====================================================== */


Output:
Line 18: error: conio.h: No such file or directory
Line 20: error: Windows.h: No such file or directory
In function 'resizeConsole':
Line 40: error: 'HWND' undeclared (first use in this function)
Line 40: error: (Each undeclared identifier is reported only once
Line 40: error: for each function it appears in.)
Line 40: error: expected ';' before 'console'
Line 41: error: 'RECT' undeclared (first use in this function)
Line 41: error: expected ';' before 'r'
Line 42: error: 'console' undeclared (first use in this function)
Line 42: error: 'r' undeclared (first use in this function)
Line 43: error: 'TRUE' undeclared (first use in this function)
In function 'gotoxy':
Line 49: error: 'HANDLE' undeclared (first use in this function)
Line 49: error: expected ';' before 'hstdout'
Line 50: error: 'COORD' undeclared (first use in this function)
Line 50: error: expected ';' before 'position'
Line 51: error: 'hstdout' undeclared (first use in this function)
Line 51: error: 'position' undeclared (first use in this function)
In function 'textcolor':
Line 57: error: 'HANDLE' undeclared (first use in this function)
Line 57: error: expected ';' before 'mau'
Line 58: error: 'mau' undeclared (first use in this function)
Line 58: error: 'STD_OUTPUT_HANDLE' undeclared (first use in this function)
In function 'ThanksYouForUsingTheProgram':
Line 80: error: 'for' loop initial declaration used outside C99 mode
t.c: At top level:
Line 388: error: expected ';', ',' or ')' before '&' token
In function 'XuatDuLieu':
Line 437: error: 'for' loop initial declaration used outside C99 mode
Line 446: error: redefinition of 'i'
Line 437: error: previous definition of 'i' was here
Line 446: error: 'for' loop initial declaration used outside C99 mode
In function 'RutGonPhanSo':
Line 466: error: 'for' loop initial declaration used outside C99 mode
Line 477: error: 'for' loop initial declaration used outside C99 mode
Line 497: error: 'for' loop initial declaration used outside C99 mode
t.c: At top level:
Line 512: error: expected ';', ',' or ')' before '&' token
In function 'CreateHeap':
Line 551: error: 'for' loop initial declaration used outside C99 mode
In function 'HeapSort':
Line 571: error: 'for' loop initial declaration used outside C99 mode
In function 'GhiFileOutPut':
Line 585: error: 'for' loop initial declaration used outside C99 mode
In function 'main':
Line 698: warning: return type of 'main' is not 'int'


Create a new paste based on this one


Comments: