Câu 3 của bài tập giữa kỳ môn Cấu Trúc Dữ Liệu
Tải code tại đây
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
| /* Câu 3 . 638.cpp */
/* Cấu Trúc Dữ Liệu
BÀI TẬP THỰC HÀNH GIỮA KỲ
Đề 2
|-------------------------------------------------------------|
| Họ Tên Sinh Viên : Nguyễn Việt Nam Sơn |
| Mã Số Sinh Viên : 1261031 |
| Lớp : 12CK1 |
| Đề Số : 2 |
|-------------------------------------------------------------|
*/
/* Đề bài:
Cho cấu trúc Phân số gồm các thông tin sau:
+ tử số: kiểu số nguyên
+ mẫu số: kiểu số nguyên
Viết chương trình thực hiện công việc sau:
1. Nhập vào 1 danh sách liên kết (l) gồm n phân số với n được nhập từ bàn phím.
Xuất thông tin của n phân số có trong danh sách (l) ra màn hình.
2. Cho phép nhập vào 1 phân số k, xuất tất cả những phân số trong danh sách (l)
có giá trị nhỏ hơn phân số k.
3. Rút gọn các phân số có trong danh sách (l), xuât danh sách các phân số sau khi
đã rút gọn.
*/
/* =============================== Các thư viện =================================== */
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
/* =================================================================================*/
/* =============== Khai báo cấu trúc dữ liệu cho danh sách liên kết đơn các phân số ============== */
struct phanso
{
int tuso;
int mauso;
};
typedef struct phanso PHANSO;
struct node
{
PHANSO Data;
struct node*pNext;
};
typedef struct node NODE;
struct list
{
NODE*pHead;
NODE*pTail;
};
typedef struct list LIST;
/* ================================================================================================ */
/* ========================= Khởi tạo danh sách liên kết đơn ============================ */
void INit(LIST &l)
{
l.pHead=NULL;
l.pTail=NULL;
}
/* ==================================================================================== */
/* =======================Tạo Node trong danh sách liên kết đơn các phân số ======================== */
NODE*getnode(PHANSO x)
{
NODE*p;
p=new NODE;
if(p==NULL)
return NULL;
p->Data=x;
p->pNext=NULL;
return p;
}
/* ===================================================================================== */
/* ===================================Thêm vào cuối danh sách ====================================== */
void AddTail(LIST &l,NODE *new_ele)
{
if(l.pHead==NULL)
{
l.pHead=new_ele;
l.pTail=l.pHead;
}
else
{
l.pTail->pNext=new_ele;
l.pTail=new_ele;
}
}
/* ========================================================================================= */
void RutGonPhanSo(LIST &l)
{
int n,dem=0;
quaylai:printf("\nNhap so luong cac phan so:");
scanf("%d",&n);
if(n<0)
{
printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
goto quaylai;
}
INit(l);
for(int i=1;i<=n;i++)
{
PHANSO x;
printf("\n>>>>>>>>>>>>>>>>>>Moi ban nhap vao phan so thu:%d<<<<<<<<<<<<<<<<<",i);
printf("\n");
printf("\nNhap vao tu so cua phan so thu %d:",i);
scanf("%d",&x.tuso);
do{
printf("\nNhap vao mau so cua phan so thu %d:",i);
scanf("%d",&x.mauso);
if(x.mauso==0)
{
printf("\nMau so khong hop le!Xin vui long nhap lai!");
}
}while(x.mauso==0);
if(x.mauso<0)
{
x.tuso=x.tuso*-1;
x.mauso=x.mauso*-1;
}
// Trường hợp rút gọn cả tử và mẫu đều là số dương .
if(x.tuso>=0&&x.mauso>0)
{
int min;
min=x.tuso;
if(min>x.mauso)
{
min=x.mauso;
}
for(int i=min;i>=1;i--)
{
if(x.tuso%i==0&&x.mauso%i==0)
{
x.tuso=x.tuso/i;
x.mauso=x.mauso/i;
}
}
}
// Trường hợp rút gọn tử số là số âm,mẫu số là số dương .
if(x.tuso<0&&x.mauso>0)
{
x.tuso=x.tuso*-1;
int min;
min=x.tuso;
if(min>x.mauso)
{
min=x.mauso;
}
x.tuso=x.tuso*-1;
for(int i=min;i>=1;i--)
{
if(x.tuso%i==0&&x.mauso%i==0)
{
x.tuso=x.tuso/i;
x.mauso=x.mauso/i;
}
}
}
// Trường hợp cả tử và mẫu đều là số âm & trường hợp tử là số dương,mẫu 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ử & mẫu .
NODE*p=getnode(x);
AddTail(l,p);
}
}
void OutPut(LIST l)
{
int dem=0;
printf("\n>>>>>>>>>>>>>>>>>>Xuat Ra Cac Phan So:<<<<<<<<<<<<<<<<<<<<<<<<\n");
printf("\n");
for(NODE*p=l.pHead;p!=NULL;p=p->pNext)
{
dem++;
printf("\nPhan so thu %d Rut Gon La:%d/%d",dem,p->Data);
}
}
/* ====================================== Main ============================================= */
void main()
{
LIST lst;
int tieptuc;
quaylai:printf("\n>>>>>>>>>>>>>>>>>>>>>Nhap List:<<<<<<<<<<<<<<<<<<<<<<<<\n");
RutGonPhanSo(lst);
printf("\n");
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Xuat List:<<<<<<<<<<<<<<<<<<<<<<<<\n");
OutPut(lst);
printf("\n");
printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
tieptuc=getch();
if(tieptuc=='c'||tieptuc=='C')
{
system("cls");
goto quaylai;
}
}
|
Nhận xét
Đăng nhận xét