Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn Phí
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn PhíĐăng Nhập

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG


descriptionBài 1. Các phép toán trên phân số EmptyBài 1. Các phép toán trên phân số

more_horiz
CẤU TRÚC DỮ LIỆU PHÂN SỐ


Cấu trúc dữ liệu phân số:

Code:

typedef struct {
   int Tu;
   int Mau;
}PhanSo;

Nhập phân số:

Code:

//nhap phan so
PhanSo Nhap(){
   PhanSo temp;
   printf("Nhap phan so:\n");
   printf("\tTu = ");
   scanf("%d",&temp.Tu);
   temp.Mau = 0;
   while(temp.Mau == 0)
   {
      printf("\tMau = ");
      scanf("%d",&temp.Mau);
   }
   return temp;
}

Xuất phân số:

Code:

//xuat phan so
void Xuat(PhanSo p) {
   printf("%d/%d",p.Tu,p.Mau);
}

Để rút gọn phân số ta cài đặt hàm tìm Ước chung lớn nhất:

Code:

//tim uoc chung lon nhat cua hai so a va b
int UCLN(int a, int b) {
   if(a==b)
      return a;
   else
      if(a>b)
         return UCLN(a-b,b);
      else
         return UCLN(a,b-a);
}

Rút gọn phân số:

Code:

// Rut gon phan so
PhanSo RutGon(PhanSo p) {
   PhanSo temp = p;
   int k = UCLN(abs(temp.Tu),abs(temp.Mau));
   temp.Tu/=k;
   temp.Mau/=k;
   return temp;
}

Các phép toán trên trên phân số:
- Phép cộng hai phân số trả về 1 phân số

Code:

//tong hai phan so
PhanSo Tong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau + q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}

- Phép trừ hai phân số trả về 1 phân số

Code:

//hieu hai phan so
PhanSo Hieu(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau - q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}

- Phép nhân hai phân số trả về 1 phân số

Code:

//nhan hai phan so
PhanSo Tich(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Tu,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}

- Phép chia hai phân số trả về 1 phân số

Code:

//chia hai phan so
PhanSo Thuong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau,p.Mau*q.Tu};
   temp = RutGon(temp);
   return temp;
}


CHƯƠNG TRÌNH MẪU

Code:

#include "conio.h"
#include "stdio.h"
#include "math.h"

typedef struct {
   int Tu;
   int Mau;
}PhanSo;
//nhap phan so
PhanSo Nhap(){
   PhanSo temp;
   printf("Nhap phan so:\n");
   printf("\tTu = ");
   scanf("%d",&temp.Tu);
   temp.Mau = 0;
   while(temp.Mau == 0)
   {
      printf("\tMau = ");
      scanf("%d",&temp.Mau);
   }
   return temp;
}
//xuat phan so
void Xuat(PhanSo p) {
   printf("%d/%d",p.Tu,p.Mau);
}
//tim uoc chung lon nhat cua hai so a va b
int UCLN(int a, int b) {
   if(a==b)
      return a;
   else
      if(a>b)
         return UCLN(a-b,b);
      else
         return UCLN(a,b-a);
}

// Rut gon phan so
PhanSo RutGon(PhanSo p) {
   PhanSo temp = p;
   int k = UCLN(abs(temp.Tu),abs(temp.Mau));
   temp.Tu/=k;
   temp.Mau/=k;
   return temp;
}
//tong hai phan so
PhanSo Tong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau + q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//hieu hai phan so
PhanSo Hieu(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau - q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//nhan hai phan so
PhanSo Tich(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Tu,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//chia hai phan so
PhanSo Thuong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau,p.Mau*q.Tu};
   temp = RutGon(temp);
   return temp;
}

void main() {
   clrscr();
   PhanSo t = Nhap();
   PhanSo t1 = Nhap();
   printf("Mot so phep toan\n");
   //tong hai phan so
   Xuat(t);
   printf(" + ");
   Xuat(t1);
   printf(" = ");
   Xuat(Tong(t,t1));
   //hieu hai phan so
   printf("\n");
   Xuat(t);
   printf(" - ");
   Xuat(t1);
   printf(" = ");
   Xuat(Hieu(t,t1));
   //nhan hai phan so
   printf("\n");
   Xuat(t);
   printf(" * ");
   Xuat(t1);
   printf(" = ");
   Xuat(Tich(t,t1));
   //chia hai phan so
   printf("\n");
   Xuat(t);
   printf(" / ");
   Xuat(t1);
   printf(" = ");
   Xuat(Thuong(t,t1));
   getch();
}


Được sửa bởi Admin ngày Mon Oct 11, 2010 11:04 pm; sửa lần 1.

descriptionBài 1. Các phép toán trên phân số EmptyMở rộng cho n phân số

more_horiz
Mở rộng cấu trúc dữ liệu:

Code:

#include "conio.h"
#include "stdio.h"
#include "math.h"
#include "alloc.h"

typedef struct {
   int Tu;
   int Mau;
}PhanSo;
typedef PhanSo * PS;

Nhập phân số:

Code:

//Nhap n phan so
PS Nhap(int n) {
   PS p = (PS)malloc(sizeof(PhanSo)*n);
   for(int i = 0; i<n;i++)
   {
      printf("Phan so %d\n",i);
      p[i] = Nhap();
   }
   return p;
}

Xuất phân số:

Code:

void Xuat(PS p, int n) {
   printf("\nDay phan so:\n{");
   for(int i = 0; i<n-1;i++)
   {
      Xuat(p[i]);
      printf(",");
   }
   Xuat(p[n-1]);
   printf("}");
}

Tổng phân số:

Code:

//tong n phan so
PhanSo Tong(PS p, int n) {
   PhanSo temp = {0,1};
   for(int i = 0; i<n; i++)
      temp = Tong(temp,p[i]);
   return temp;
}

Tích phân số:

Code:

//nhan n phan so
PhanSo Tich(PS p, int n) {
   PhanSo temp = {1,1};
   for(int i = 0; i<n; i++)
      temp = Tich(temp,p[i]);
   return temp;
}


HÀM MAIN MẪU:

Code:

void main() {
   clrscr();
   unsigned int n;
   PS t,p;
   printf("n = ");
   scanf("%d",&n);
   printf("Nhap DS t:\n");
   t = Nhap(n);
   Xuat(t,n);
   printf("\nNhap DS p:\n");
   p = Nhap(n);
   Xuat(p,n);
   printf("\nTong n phan so cua DS t: ");
   Xuat(Tong(t,n));
   printf("\nTich n phan so cua DS p: ");
   Xuat(Tich(p,n));
   getch();
}

descriptionBài 1. Các phép toán trên phân số EmptyChương trình mẫu

more_horiz

Code:

#include "conio.h"
#include "stdio.h"
#include "math.h"
#include "alloc.h"

typedef struct {
   int Tu;
   int Mau;
}PhanSo;
typedef PhanSo * PS;
//nhap phan so
PhanSo Nhap(){
   PhanSo temp;
   printf("\tTu: ");
   scanf("%d",&temp.Tu);
   temp.Mau = 0;
   while(temp.Mau == 0)
   {
      printf("\tMau: ");
      scanf("%d",&temp.Mau);
   }
   return temp;
}
//xuat phan so
void Xuat(PhanSo p) {
   printf("%d/%d",p.Tu,p.Mau);
}
//tim uoc chung lon nhat cua hai so a va b
int UCLN(int a, int b) {
   if(a==b)
      return a;
   else
      if(a>b)
         return UCLN(a-b,b);
      else
         return UCLN(a,b-a);
}

// Rut gon phan so
PhanSo RutGon(PhanSo p) {
   PhanSo temp = p;
   int k = UCLN(abs(temp.Tu),abs(temp.Mau));
   temp.Tu/=k;
   temp.Mau/=k;
   return temp;
}
//tong hai phan so
PhanSo Tong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau + q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//hieu hai phan so
PhanSo Hieu(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau - q.Tu*p.Mau,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//nhan hai phan so
PhanSo Tich(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Tu,p.Mau*q.Mau};
   temp = RutGon(temp);
   return temp;
}
//chia hai phan so
PhanSo Thuong(PhanSo p, PhanSo q) {
   PhanSo temp = {p.Tu*q.Mau,p.Mau*q.Tu};
   temp = RutGon(temp);
   return temp;
}
//Nhap n phan so
PS Nhap(int n) {
   PS p = (PS)malloc(sizeof(PhanSo)*n);
   for(int i = 0; i<n;i++)
   {
      printf("Phan so %d\n",i);
      p[i] = Nhap();
   }
   return p;
}

void Xuat(PS p, int n) {
   printf("\nDay phan so:\n{");
   for(int i = 0; i<n-1;i++)
   {
      Xuat(p[i]);
      printf(",");
   }
   Xuat(p[n-1]);
   printf("}");
}
//tong n phan so
PhanSo Tong(PS p, int n) {
   PhanSo temp = {0,1};
   for(int i = 0; i<n; i++)
      temp = Tong(temp,p[i]);
   return temp;
}
//nhan n phan so
PhanSo Tich(PS p, int n) {
   PhanSo temp = {1,1};
   for(int i = 0; i<n; i++)
      temp = Tich(temp,p[i]);
   return temp;
}

void main() {
   clrscr();
   unsigned int n;
   PS t,p;
   printf("n = ");
   scanf("%d",&n);
   printf("Nhap DS t:\n");
   t = Nhap(n);
   Xuat(t,n);
   printf("\nNhap DS p:\n");
   p = Nhap(n);
   Xuat(p,n);
   printf("\nTong n phan so cua DS t: ");
   Xuat(Tong(t,n));
   printf("\nTich n phan so cua DS p: ");
   Xuat(Tich(p,n));
   getch();
}

descriptionBài 1. Các phép toán trên phân số EmptyRe: Bài 1. Các phép toán trên phân số

more_horiz
privacy_tip Permissions in this forum:
Bạn không có quyền trả lời bài viết
power_settings_newLogin to reply