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 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz

Code:

#include <iostream.h>
#include <conio.h>
void nhap(int &x, int &n);
long tinh(int x,int n);
void xuat(int x, int n);

void main(){
   int x,n;
   nhap(x,n);
   xuat(x,n);
}
void nhap(int &x, int &n){
   clrscr();
   cout<<"Nhap x (so nguyen): ";
   cin>>x;
   cout<<"Nhap n (so nguyen): ";
   cin>>n;
}
void xuat(int x, int n){
   if ((x==0)&&(n<=0))
      cout<<"Math error!!!...";
   else
      if (n<0)
         cout<<x<<"^("<<n<<") = "<<1/float(tinh(x,-n));
      else
         cout<<x<<"^"<<n<<" = "<<tinh(x,n);
   getch();
}
long tinh(int x, int n){
   if (n==0)
      return 1;
   else
      return x*tinh(x,n-1);
}


Có sai thầy sửa dùm em nha thầy! Very Happy

----------------------
Admin: Bài này thì tốt không có vấn đề gì, nhưng chú ý cách đặt tên hàm cho dễ nhìn và hợp với phong cách lập trình.

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
Nếu x = 0 thì bài toán sai rùi!

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
đâu có sai đâu thầy! thầy xem lại void xuất của em đi!

Code:


void xuat(int x, int n){
  if ((x==0)&&(n<=0))
      cout<<"Math error!!!...";
  else
      if (n<0)
        cout<<x<<"^("<<n<<") = "<<1/float(tinh(x,-n));
      else
        cout<<x<<"^"<<n<<" = "<<tinh(x,n);
  getch();
}

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
Uhm, nếu bẩy ở Xuất thì ok!

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
Các code trên thấy dài dòng quá; hàm x^n chỉ cần gói gọn cho 1 dòng lệnh với toán tử ? 3 ngôi!

Code:

#include <stdio.h>
#include <conio.h>

float XmuN(float x,int n)
{
    return (n<1)?0:x*XmuN(x,n-1);
}

int main()
{
    float x;
   int n;
   printf("x= ");
   scanf("%f",&x);
   printf("n= ");
   scanf("%d",&n);
   printf("\n%f^%d= %f",x,n,XmuN(x,n));
   getch();
   return 0;
}

Với n<=0 chúng ta coi x^n=0; còn lại nếu muốn mở rộng thêm thì khai báo n kiểu unsigned cho OK!

Được sửa bởi peterdrew ngày Fri Jul 09, 2010 9:57 pm; sửa lần 1. (Reason for editing : Edit chút!)

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
quan trọng là kết quả phải đúng, cách viết của anh đúng là ngắn gọn hơn của em thiệt, em xin học hỏi.

Nhưng thế nào thì củng phải bảo đảm kết quả đúng mới được chứ!

* n^0 = 1 (với n thuộc R*)

* còn theo code của anh thì bằng 0.


float XmuN(float x,int n){
return (n<1)?0:x*XmuN(x,n-1);
}


Chắc anh chưa chạy test thử code này, vì em đoán là code này sẽ luôn cho ra kết quả là 0.

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
Thì Peter đã nói là Peter quy ước rồi đó!....Hì hhì

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
Đối với một bài toán có nhiều cách viết code tùy vào kỹ thuật mà mỗi người có được. Ở đây, chúng ta trinh bày thế nào cho người học khi nhìn vào có thể hiểu và viết lại những định nghĩa đệ quy tương tự rùi. Từ đó, tùy vào kỹ thuật của bản thân mỗi người có cách tối ưu code riêng.

Cám ơn bạn đã cho những đoạn code khá hay.

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
peterdrew đã viết:
Thì Peter đã nói là Peter quy ước rồi đó!....Hì hhì

- theo em thì không thể quy ước như vậy, vì từ xưa đến giờ người ta đã có quy ước cho x^n như sau:
  • x = 0:
    + n = 0: lỗi
    + n != 0: 0
  • x != 0:
    + n < 0: 1/x^(-n)
    + n = 0: 1
    + n > 0: x*(x^(n-1))


- Mà giả sử như theo cách quy ước của anh, thì anh có thấy là luôn cho ra kết quả là 0 cho mọi trường hợp của phép tính x^n không?

giả sử x = 2, n = 2
2^2 = 2*(2^1) = 2*(2*(2^0))

theo quy ước của anh (n<1 thì return 0)thì 2^0 = 0. Vậy chẳng phải 2^2 = 0 ???

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

more_horiz
ztanzzthanhz đã viết:
peterdrew đã viết:
Thì Peter đã nói là Peter quy ước rồi đó!....Hì hhì

- theo em thì không thể quy ước như vậy, vì từ xưa đến giờ người ta đã có quy ước cho x^n như sau:
  • x = 0:
    + n = 0: lỗi
    + n != 0: 0
  • x != 0:
    + n < 0: 1/x^(-n)
    + n = 0: 1
    + n > 0: x*(x^(n-1))


- Mà giả sử như theo cách quy ước của anh, thì anh có thấy là luôn cho ra kết quả là 0 cho mọi trường hợp của phép tính x^n không?

giả sử x = 2, n = 2
2^2 = 2*(2^1) = 2*(2*(2^0))

theo quy ước của anh (n<1 thì return 0)thì 2^0 = 0. Vậy chẳng phải 2^2 = 0 ???


À, sorry, Peter nhầm chút, tại không để ý thôi; đây là code lại (thay số 0 bằng số 1) và ở đây coi 0^0=1.

Code:

#include <stdio.h>
#include <conio.h>

float XmuN(float x,int n)
{
    return (n<1)?1:x*XmuN(x,n-1);
}

int main()
{
    float x;
  int n;
  printf("x= ");
  scanf("%f",&x);
  printf("n= ");
  scanf("%d",&n);
  printf("\n%f^%d= %f",x,n,XmuN(x,n));
  getch();
  return 0;
}

Hy vọng cậu đã hài lòng; cảm ơn cậu vì để lại nhận xét trên (vì lúc trước Peter viết ra nhưng chưa Test).

descriptionBài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy. EmptyRe: Bài 2. Tính x^n (với x,n là số nguyên bất kỳ) bằng đệ quy.

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