Tóm tắt nội dung bài viết
- I. Căn Bậc 2 Trong C + + Là Gì ?
- II. Hàm Tính Căn Bậc 2 Trong C + +
- Tính căn bậc hai sử dụng hàm trong C / C + +
- Tìm căn bậc hai của 1 số ít không dùng hàm thì sao ?
- III. Ví Dụ Về Căn Bậc 2 Trong C + +
- IV. Căn Bậc N Trong C
- Tính căn bậc 3 trong C / C + +
- Tính căn bậc 3 không dùng hàm pow
- V. Dấu Căn Bậc 2 Trong C + +
- VI. Hàm Căn Bậc 3 Trong C + +
- VII. Bài Tập Về Căn Bậc 2 Trong C + +
- VIII. Tìm Căn Bậc Hai Không Dùng Sqrt
- Tìm căn bậc hai của 1 số ít không dùng hàm thì sao ?
I. Căn Bậc 2 Trong C + + Là Gì ?
Hàm sqrt() là hàm có sẵn trong thư viện math, vì vậy trước khi sử dụng nó hãy khai báo thư viện đã nhé: #include
Hàm sqrt ( ) là hàm được sử dụng để tính căn bậc hai của 1 số ít. Tham số truyền vào nó là một số ít bất kể và giá trị trả về là căn bậc hai của tham số đó .
Cú pháp:
Bạn đang đọc: Căn Bậc 2 Trong C++ – Techacademy
sqrt(x)
Trong đó x là 1 số ít truyền vào bất kể, hoàn toàn có thể là số nguyên hoặc số thực .
II. Hàm Tính Căn Bậc 2 Trong C + +
Hôm nay Techacademy quay lại cùng với một bài toán đơn thuần mà phức tạp. Chắc hẳn khi học lập trình bạn nào cũng đã từng tính căn bậc hai của một số ít. Chắc không ai quên được tên hàm nó chính là hàm sqrt ( ). Nhưng những bạn đã khi nào tự hỏi làm thế nào để hoàn toàn có thể tự viết hàm sqrt ( ) này chưa ? Hãy cũng mình đi tìm giải pháp trong bài viết này nhé .
Tính căn bậc hai sử dụng hàm trong C / C + +
// Code from http://wp.ftn61.com #include#include int main() { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %f\n", x, sqrt(x)); }
Chạy demo :
Input x: 5 Sqrt of 5 = 2.236068
Tìm căn bậc hai của 1 số ít không dùng hàm thì sao ?
Ý tưởng tìm căn bậc hai:
- Khai báo 1 epsilon đặt sai số chấp nhận, vì căn bậc hai của một số có thể là số thập phân vô hạn
- Khởi tạo kết quả bằng 1.0
Nếu tác dụng có sai số cao hơn epsilon, update lại tác dụng theo công thức
result = (number/result - result) / 2 + result;
- Mình sẽ thu hẹp dần giới hạn trên và giới hạn dưới của kết quả, lấy trung bình hiệu khoảng cách giới hạn đó để cập nhật kết quả. Điều này luôn đảm bảo rằng giới hạn trên dưới sẽ bị thu hẹp nhưng sẽ luôn bao bọc đáp án.
- Nếu kết quả có sai số nhỏ hơn EPSILON thì dừng lại và lấy kết quả đó làm đáp án.
Ví dụ : Bạn cần tính căn bậc 2 của 5 .
- Ta khởi tạo kết quả là 1.0. Kết quả này dĩ nhiên không đúng rồi, nên đáp số sẽ nằm trong khoảng 1.0 và 5/1.0 = 5.0.
- Lấy một nửa hiệu khoảng 1.0 đến 5.0 là 1.0 + (5.0 – 1.0)/2 được 3.0. Nhưng 3.0 lớn hơn kết quả thực(bình phương là biết, trong code thì sai số để check),
- Lại lấy nửa hiệu khoảng từ 5/3.0 đến 3.0 cộng vào kết quả hiện tại(3.0) = 3.0 + (5/3.0 – 3.0) = 2.33…
- Cứ làm tiếp tục như vậy cho tới khi sai số nhỏ hơn EPSILON
Code vừa đủ cho ý tưởng sáng tạo này là
// Code from http://wp.ftn61.com #include#include #define EPSILON 0.0001f double mySqrt(int number) { double result = 1.0f; while (fabs(result * result - number) / number >= EPSILON) result = (number / result - result) / 2 + result; return result; } int main() { int x; printf("Input x: "); scanf("%d", &x); printf("Sqrt of %d = %1.9f\n", x, mySqrt(x)); return 0; }
Và chạy thử xem sao
Input x: 5 Sqrt of 5 = 2.236069
III. Ví Dụ Về Căn Bậc 2 Trong C + +
Trong phần này mình sẽ triển khai hai ví dụ sử dụng hàm sqrt ( ) để những bạn hoàn toàn có thể so sánh tác dụng nhé .
Ví dụ 1 : Ở ví dụ này mình sẽ khai báo và khởi tạo giá trị x = 9, sau đó gọi hàm sqrt ( ) để tính căn bậc hai của x .
#include#include using namespace std; int main() { //khai báo và khởi tạo giá trị x = 9 double x = 9, result; //gọi hàm sqrt() để tính căn bậc hai của x result = sqrt(x); //hiển thị kết quả ra màn hình cout << "Căn bậc hai của " << x << " là " << result << endl; cout<<"\n--------------------------------------------\n"; cout<<"Chương trình này được đăng tại techacademy.edu.vn"; }
Kết quả :
Ví dụ 2 : Ở ví dụ này mình sẽ đổi khác giá trị của x thành 125, cùng xem hiệu quả nhé .
#include#include using namespace std; int main() { //khai báo và khởi tạo giá trị x = 125 double x = 125, result; //gọi hàm sqrt() để tính căn bậc hai của x result = sqrt(x); //hiển thị kết quả ra màn hình cout << "Căn bậc hai của " << x << " là " << result << endl; cout<<"\n--------------------------------------------\n"; cout<<"Chương trình này được đăng tại Freetuts.net"; }
Kết quả :
IV. Căn Bậc N Trong C
Bài này mình sẽ hướng dẫn những bạn mới học lập trình cách để tính căn bậc n với n là một số ít bất kể nhé, nhưng n > = 2 nha. Chỉ là chỉ lại giúp những bạn nhớ lại toán học thôi ^ ^ .
Một số vướng mắc của những bạn sinh viên :
- Tình hình là em đang bí trong cách tính căn bậc n của 1 số. Thực tình em mới học môn này được 2 tuần nên thực tình ko biết giải quyết thế nào, ai biết phép toán của nó ra sao thì giúp em với?
- Trong C chỉ có hàm sqrt để tính căn bậc 2, vậy nếu em muốn tính căn bậc 3 hay căn bậc n của một số thì làm thế nào ạ?
Tính căn bậc 3 trong C / C + +
Để tính căn bậc 3 trong C / C + +, bạn sử dụng công thức toán học sau. Công thức này đúng với căn bậc n luôn nhé. Bạn hoàn toàn có thể vận dụng để tính căn bậc n của số bất kể :
Như vậy, với 1 số ít x = 8 ví dụ điển hình, bạn muốn tính căn bậc 3 của 8. Khi đó, trong công thức trên x = 8, n = 3, m = 1. Vậy ta sẽ phải tính x1 / 3
Để tính ax trong C / C + +, tất cả chúng ta hoàn toàn có thể sử dụng hàm pow ( ) có cú pháp như sau :
double pow (double base, double exponent);
Ví dụ dưới đây sử dụng C / C + + để tính căn bậc 3 của 8 theo cách trên. Các bạn chú ý quan tâm em kiểu cho số mũ nhé. Vì 2 số nguyên chia cho nhau sẽ chỉ ra giá trị nguyên ( 1/3 = 0 ) .
#include#include int main () { int a = 8; printf("%f", pow(a, 1.0/3)); }
Kết quả : 2.000000
Như vậy, để tính căn bậc n của số a, bạn sẽ dùng hàm pow để tính hiệu quả của phép tính a1 / n
Tính căn bậc 3 không dùng hàm pow
Để tính căn bậc 3 của 1 số dương a ( tổnq quát căn bậc n ), ta phải thiết kế xây dựng một chuỗi ( toán học ) mà chuỗi này quy tụ về căn bậc 3 của a. Sau đó lặp hữu hạn 1 số lần để được tác dụng với độ đúng chuẩn nào đó đồng ý được. Sau day la chuong trinh trong C de thuật tính căn bậc 3 cua 2 voi độ đúng chuẩn 0.00000001 chỉ bằng những phép toán +, –, *, / mà thôi .
Dưới đây là giải thuật tính căn bậc 3 của 2 của một thành viên trong Cộng đồng C Việt :
//////////////////////////////////////////////////////////////////////// // Cube root of 2 by Nguyen Van Noi - DHTG // Email : [email protected] /////////////////////////////////////////////////////////////////////// #includedouble myabs(double x) { return ((x>=0)?x:(-x)); } void main() { double a=2.0, xo, xn=1, e=1e-8; do { xo=xn; xn=(a/xo/xo+2.0*xo)/3.0; } while (myabs(xn-xo)>e); printf("Can bac 3 cua 2 = %1.8f\n",xn); }
Một lời giải khác do mình tổng hợp :
Ý tưởng : Tìm phần nguyên trước, sau đó tìm phần thập phân .
Với cách làm này, bạn chỉ thu được tác dụng xê dịch với đáp án đúng chuẩn. Độ đúng mực phụ thuộc vào vào giá trị precision mà bạn mong ước .
#includedouble cubeRoot(double n) { double i, precision = 0.000001; for(i = 1; (i*i*i) <= n; ++i); //tim phan nguyen for(--i; (i*i*i) < n; i += precision); //tim phan thap phan return i; } int main() { int n = 125; printf("Can bac ba cua %d = %lf", n, cubeRoot(n)); return 0; }
Chạy thử :
Can bac 3 cua 125 = 5.000000
V. Dấu Căn Bậc 2 Trong C + +
Hàm sqrt() trong C
Hàm double sqrt ( double x ) trong Thư viện C trả về căn bậc hai của x .
Khai báo hàm sqrt ( ) trong C
Dưới đây là phần khai báo cho hàm sqrt ( ) trong C :
double sqrt(double x)
Tham số
x − Đây là giá trị số thực dấu chấm động .
Trả về giá trị
Hàm này trả về căn bậc hai của x .
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm sqrt ( ) trong C :
#include#include int main () { printf("Can bac hai cua %lf bang %lf\n", 4.0, sqrt(4.0) ); printf("Can bac hai cua %lf bang %lf\n", 5.0, sqrt(5.0) ); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho hiệu quả :
VI. Hàm Căn Bậc 3 Trong C + +
Bài tập C : Tìm căn bậc ba của 1 số ít
Tương tự như cách tìm căn bậc hai ( không sử dụng hàm sqrt ( ) ), bài tập C này hoàn toàn có thể được giải theo hai bước :
Tìm phân nguyên
Tìm phần thập phân
Đây chỉ là cách giải cho tác dụng giao động, và độ đúng mực phụ thuộc vào vào số những số sau dấu thập phân .
Bạn theo dõi phần code dưới đây để hiểu cách tìm căn bậc ba của một số ít bất kể trong C .
Chương trình C
Dưới đây là chương trình C để giải bài tập tìm căn bậc ba của 1 số ít trong C :
#includedouble cubeRoot(double n) { double i, precision = 0.000001; for(i = 1; (i*i*i) <= n; ++i); //tim phan nguyen for(--i; (i*i*i) < n; i += precision); //tim phan thap phan return i; } int main() { int n = 125; printf("Can bac ba cua %d = %lf", n, cubeRoot(n)); return 0; }
Biên dịch chương trình C trên sẽ cho tác dụng :
VII. Bài Tập Về Căn Bậc 2 Trong C + +
Đề bài
Viết chương trình giải phương trình bậc 2 trong C + +. Phương trình bậc 2 có dạng :
Lời giải
Lời giải của chúng tôi sử dụng phương pháp sqrt ( ) để tính căn bậc 2 của một số ít trong C + + .
#include#include using namespace std; /** * giai phuong trinh bac 2: ax2 + bx + c = 0 * * @param a: he so bac 2 * @param b: he so bac 1 * @param c: so hang tu do */ void giaiPTBac2(float a, float b, float c) { // kiem tra cac he so if (a == 0) { if (b == 0) { printf("Phuong trinh vo nghiem!"); } else { printf("Phuong trinh co mot nghiem: x = %f", (-c / b)); } return; } // tinh delta float delta = b*b - 4*a*c; float x1; float x2; // tinh nghiem if (delta > 0) { x1 = (float) ((-b + sqrt(delta)) / (2*a)); x2 = (float) ((-b - sqrt(delta)) / (2*a)); printf("Phuong trinh co 2 nghiem la: x1 = %f va x2 = %f", x1, x2); } else if (delta == 0) { x1 = (-b / (2 * a)); printf("Phong trinh co nghiem kep: x1 = x2 = %f", x1); } else { printf("Phuong trinh vo nghiem!"); } } /** * ham main */ int main() { float a, b, c; cout << "Nhap he so bac 2, a = "; cin >> a; cout << "Nhap he so bac 1, b = "; cin >> b; cout << "Nhap so hang tu do, c = "; cin >> c; giaiPTBac2(a, b, c); return 1; }
Kết quả :
Nhap he so bac 2, a = 2 Nhap he so bac 1, b = 3 Nhap so hang tu do, c = 1 Phuong trinh co 2 nghiem la: x1 = -0.500000 va x2 = -1.000000
VIII. Tìm Căn Bậc Hai Không Dùng Sqrt
Tìm căn bậc hai không sử dụng hàm sqrt ? Bạn nghĩ sao ? Hôm nay Techacademy quay lại cùng với một bài toán đơn thuần mà phức tạp. Chắc hẳn khi học lập trình bạn nào cũng đã từng tính căn bậc hai của một số ít. Chắc không ai quên được tên hàm nó chính là hàm sqrt ( ). Nhưng những bạn đã khi nào tự hỏi làm thế nào để hoàn toàn có thể tự viết hàm sqrt ( ) này chưa ? Hãy cũng mình đi tìm giải pháp trong bài viết này nhé .
Tìm căn bậc hai của 1 số ít không dùng hàm thì sao ?
Ý tưởng tìm căn bậc hai:
- Khai báo 1 epsilon đặt sai số chấp nhận, vì căn bậc hai của một số có thể là số thập phân vô hạn.
- Khởi tạo kết quả bằng 1.0
Nếu kết quả có sai số cao hơn epsilon, cập nhật lại kết quả theo công thức
result = (number/result – result) / 2 + result;
- Mình sẽ thu hẹp dần giới hạn trên và giới hạn dưới của kết quả, lấy trung bình hiệu khoảng cách giới hạn đó để cập nhật kết quả. Điều này luôn đảm bảo rằng giới hạn trên dưới sẽ bị thu hẹp nhưng sẽ luôn bao bọc đáp án.
- Nếu kết quả có sai số nhỏ hơn EPSILON thì dừng lại và lấy kết quả đó làm đáp án.
Ví dụ : Bạn cần tính căn bậc 2 của 5 .
- Ta khởi tạo kết quả là 1.0. Kết quả này dĩ nhiên không đúng rồi, nên đáp số sẽ nằm trong khoảng 1.0 và 5/1.0 = 5.0.
- Lấy một nửa hiệu khoảng 1.0 đến 5.0 là 1.0 + (5.0 – 1.0)/2 được 3.0. Nhưng 3.0 lớn hơn kết quả thực(bình phương là biết, trong code thì sai số để check),
- Lại lấy nửa hiệu khoảng từ 5/3.0 đến 3.0 cộng vào kết quả hiện tại(3.0) = 3.0 + (5/3.0 – 3.0) = 2.33…
- Cứ làm tiếp tục như vậy cho tới khi sai số nhỏ hơn EPSILON
Code vừa đủ cho ý tưởng sáng tạo này là
// Code from https://nguyenvanhieu.vn #include#include #define EPSILON 0.0001f double mySqrt(int number) { double result = 1.0f; while (fabs(result * result – number) / number >= EPSILON) result = (number / result – result) / 2 + result; return result; } int main() { int x; printf(“Input x: “); scanf(“%d”, &x); printf(“Sqrt of %d = %1.9fn”, x, mySqrt(x)); return 0; }
Và chạy thử xem sao
Input x: 5 Sqrt of 5 = 2.236069
Source: http://wp.ftn61.com
Category: Hỏi Đáp
Để lại một bình luận