Untitled
unknown
plain_text
2 years ago
4.5 kB
10
Indexable
#include <stdio.h>
#include <stdlib.h>
// Khai báo cấu trúc phân số
typedef struct {
int tuSo;
int mauSo;
} PhanSo;
// Hàm nhập phân số từ bàn phím
void nhapPhanSo(PhanSo *ps) {
printf("Nhap tu so: ");
scanf("%d", &(ps->tuSo));
printf("Nhap mau so: ");
scanf("%d", &(ps->mauSo));
}
// Hàm xuất phân số ra màn hình
void xuatPhanSo(const PhanSo *ps) {
printf("%d/%d\n", ps->tuSo, ps->mauSo);
}
// Hàm tính tổng mảng phân số
PhanSo tinhTongMangPhanSo(const PhanSo *mangPhanSo, int n) {
PhanSo tong = {0, 1}; // Khởi tạo tổng ban đầu là 0
for (int i = 0; i < n; i++) {
tong.tuSo = tong.tuSo * mangPhanSo[i].mauSo + mangPhanSo[i].tuSo * tong.mauSo;
tong.mauSo *= mangPhanSo[i].mauSo;
}
// Rút gọn phân số tổng nếu có thể
int a = tong.tuSo;
int b = tong.mauSo;
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
tong.tuSo /= a;
tong.mauSo /= a;
return tong;
}
// Hàm tìm phân số lớn nhất trong mảng
PhanSo timPhanSoLonNhat(const PhanSo *mangPhanSo, int n) {
PhanSo max = mangPhanSo[0];
for (int i = 1; i < n; i++) {
if ((float)mangPhanSo[i].tuSo / mangPhanSo[i].mauSo > (float)max.tuSo / max.mauSo) {
max = mangPhanSo[i];
}
}
return max;
}
// Hàm tìm phân số nhỏ nhất trong mảng
PhanSo timPhanSoNhoNhat(const PhanSo *mangPhanSo, int n) {
PhanSo min = mangPhanSo[0];
for (int i = 1; i < n; i++) {
if ((float)mangPhanSo[i].tuSo / mangPhanSo[i].mauSo < (float)min.tuSo / min.mauSo) {
min = mangPhanSo[i];
}
}
return min;
}
// Hàm kiểm tra xem phân số có tồn tại trong mảng hay không
int phanSoTonTaiTrongMang(const PhanSo *mangPhanSo, int n, const PhanSo *ps) {
for (int i = 0; i < n; i++) {
if (mangPhanSo[i].tuSo == ps->tuSo && mangPhanSo[i].mauSo == ps->mauSo) {
return 1; // Phân số tồn tại trong mảng
}
}
return 0; // Phân số không tồn tại trong mảng
}
// Hàm so sánh 2 phân số
// Trả về -1 nếu ps1 < ps2, 0 nếu ps1 = ps2, 1 nếu ps1 > ps2
int soSanhPhanSo(const PhanSo *ps1, const PhanSo *ps2) {
float value1 = (float)ps1->tuSo / ps1->mauSo;
float value2 = (float)ps2->tuSo / ps2->mauSo;
if (value1 < value2) return -1;
else if (value1 > value2) return 1;
else return 0;
}
int main() {
int n;
printf("Nhap so luong phan so: ");
scanf("%d", &n);
// Khởi tạo mảng phân số với kích thước n
PhanSo *mangPhanSo = (PhanSo*)malloc(n * sizeof(PhanSo));
// Kiểm tra xem việc cấp phát bộ nhớ có thành công không
if (mangPhanSo == NULL) {
printf("Loi! Khong du bo nho.");
return 1;
}
// Nhập các phân số vào mảng
for (int i = 0; i < n; i++) {
printf("Nhap phan so thu %d:\n", i + 1);
nhapPhanSo(&mangPhanSo[i]);
}
// Tính tổng mảng phân số
PhanSo tong = tinhTongMangPhanSo(mangPhanSo, n);
printf("Tong cac phan so: ");
xuatPhanSo(&tong);
// Tìm phân số lớn nhất và nhỏ nhất
PhanSo max = timPhanSoLonNhat(mangPhanSo, n);
PhanSo min = timPhanSoNhoNhat(mangPhanSo, n);
printf("Phan so lon nhat: ");
xuatPhanSo(&max);
printf("Phan so nho nhat: ");
xuatPhanSo(&min);
// Kiểm tra phân số có tồn tại trong mảng hay không
PhanSo ps;
printf("Nhap phan so can kiem tra:\n");
nhapPhanSo(&ps);
if (phanSoTonTaiTrongMang(mangPhanSo, n, &ps)) {
printf("Phan so ton tai trong mang.\n");
} else {
printf("Phan so khong ton tai trong mang.\n");
}
// So sánh 2 phân số
PhanSo ps1, ps2;
printf("Nhap phan so thu nhat:\n");
nhapPhanSo(&ps1);
printf("Nhap phan so thu hai:\n");
nhapPhanSo(&ps2);
int ketQua = soSanhPhanSo(&ps1, &ps2);
if (ketQua == -1) {
printf("Phan so thu nhat nho hon phan so thu hai.\n");
} else if (ketQua == 0) {
printf("Hai phan so bang nhau.\n");
} else {
printf("Phan so thu nhat lon hon phan so thu hai.\n");
}
// Giải phóng bộ nhớ đã cấp phát cho mảng phân số
free(mangPhanSo);
return 0;
}
Editor is loading...
Leave a Comment