Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 98 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
98
Dung lượng
1,57 MB
Nội dung
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HỒ CHÍ MINH Khoa Khoa Học & Kỹ Thuật Máy Tính LABREPORTC & DataStructures Nhóm: 5 Lớp: CDTH11K GVHD:Châu Thị Bảo Hà TP.Biên Hòa 11/2010 C & DataStructures Mục Lục • Module 1: 1. Viết hàm tính tổng S=1+1/2+1/3…+ 1/N. Sử dụng hàm để tính S khi người dùng nhập N. Nhập : N Xuất: S(Tổng) Ý tưởng: Dùng vòng lặp for để chạy i từ 1 đến N, trong for dùng biến sum để tính tổng của thương 1/i, mỗi lần tăng biến sum sẽ cộng dồn giá trị 1/i, rồi trả về giá trị sum. float tinhtong(float n) { float sum=0; for(int i=1;i<=n;i++) { sum+=(1.0/i); } return sum; } Chương trình: #include <iostream.h> #include <conio.h> float tinhtong(float n); void main() { float sum; float n; cout<<"Nhap N: "; cin>>n; cout<<"Tong 1 + 1/2 + + 1/n = "; cout<<tinhtong(n)<<endl; } float tinhtong(float n) { float sum=0; for(int i=1;i<=n;i++) { sum+=(1.0/i); } return sum; } Kết quả: 2 C & DataStructures 2. Nhập 2 số a và n. Tính S =a^1 + a^2 + a^3 + …+ a^n . Nhập: a, n; Xuất: S(Tổng); Ý tưởng: Dùng vòng lặp for để chạy i từ 1 đến N, trong for dùng biến sum để tính tổng của a mũ i, mỗi lần vòng lặp lặp lại thì biến sum sẽ cộng dồn giá trị a mũ i, dùng hàm pow(a,i) để tính a mũ i. float tinhtong(int a,float n) { float sum=0; for(int i=1;i<=n;i++) { sum+=(pow(a,i)); } return sum; } Chương trình: #include <iostream.h> #include <conio.h> #include <math.h> float tinhtong(int a,float n); void main() { float sum,n; int a; cout<<"Nhap N: "; cin>>n; cout<<endl; cout<<"Nhap a: "; cin>>a; cout<<"Tong a^1 + a^2 + + a^n = "; cout<<tinhtong(a,n)<<endl; } float tinhtong(int a,float n) { float sum=0; for(int i=1;i<=n;i++) { sum+=(pow(a,i)); } return sum; } 3 C & DataStructures Kết quả: 3. Viết chương trình tính tổng sau: S= 1 + 1/1! +1/2! + 1/3! + … + 1/n!. Nhập: N; Xuất: S(Tổng) Ý tưởng: Dùng 2 hàm: tinhtong và hàm giaithua. Hàm tinhtong là để tính tổng các phần tử 1 + 1/1! + 1/2! +….Hàm giaithua để tính giai thừa của 1!, 2!, 3!,… Trong hàm giaithua() thì thì ta dùng vỏng lặp i chạy từ 1 -> n để nhân dồn giá trị vào 1 biến t. Rồi trong hàm tinhtong() ta gọi hàm giaithua() để tính đươc già trị 1/i!. float tinhtong(int n) { float sum=1; for(int i=1;i<=n;i++) { sum+=(1.0/gt(i)); } return sum; } int giaithua(int n) { int t=1; for(int i=1;i<=n;i++) t*=i; return t; } Chương trình: #include <iostream.h> #include <math.h> int giaithua(int n); float tinhtong(int n); void main() { float sum; int n; cout<<"Nhap N: "; cin>>n; cout<<"Tong S = 1 + 1/1! +1/2! + 1/3!+ … +1/n!="; cout<<tinhtong(n)<<endl; } float tinhtong(int n) { float sum=1; for(int i=1;i<=n;i++) 4 C & DataStructures { sum+=(1.0/giaithua(i)); } return sum; } int giaithua(int n) { int t=1; for(int i=1;i<=n;i++) t*=i; return t; } Kết quả: 6. Viết chương trình tính tổng sau: S= 1 - x + x^2 - x^3 + … (-1)x^n Nhập: x, n; Xuất: S(Tổng) Ý tưởng: Dùng vòng lặp for để chạy được x^0, x^1,x^2,…,x^n trong for dùng thêm biến k=1, mỗi lần lặp lại thì k=k*(-1) là k đổi dấu, thì khi nhân với x^1,x^3,x^5… thì là -1, Nhân với x^0,x^2,x^4… là 1. float ham1(int x,int n) { float sum1=0; int k=1; for(int i=0;i<=n;i++) { sum1+=k*(pow(x,i)); k=k*(-1); } return sum1; } Chương trình: #include<iostream.h> #include<math.h> float ham1(int x,int n); void main() { int x,n; cout<<"Nhap x:"; cin>>x; cout<<"Nhap n:"; cin>>n; 5 C & Data Structures cout<<"S= 1 - x +x^2- x^3+ … (-1)x^n = "; cout<<ham1(x,n)<<endl; } float ham1(int x,int n) { float sum1=0; int k=1; for(int i=0;i<=n;i++) { sum1+=k*(pow(x,i)); k=k*(-1); } return sum1; } Kết quả: 7. Viết một hàm tính tổng các chữ số của một số nguyên. Viết chương trình nhập vào một số nguyên, dùng hàm trên kiểm tra xem số đó có chia hết cho 3 không. (Một số chia hết cho 3 khi tổng các chữ số của nó chia hết cho 3). Nhập: 1 số nguyên n; Xuất: Số nguyên nhập vào có chia hết cho 3 hay không? Kiểm tra tính chia hết cho 3. Ý tưởng: Dùng hàm while để tính tổng các chữ số của 1 số nguyên, rồi dùng hàm kiểm tra xem tính chia hết cho 3 của 1 số nguyên. Hàm kiểm tra thì ta lấy giá trị trả về của hàm tinhtongcacchuso() chia lấy số dư cho 3, nếu không dư thì là số chia hết cho 3 và ngược lại int tongcacchuso(int n) { int t, sum=0; while(n!=0) { t=n%10; n=n/10; sum+=t; } return sum; } Chương trình: #include<iostream.h> #include<conio.h> int tongcacchuso(int n); int kiemtrachiahetcho3(int n); void main() 6 C & DataStructures { int n; cout<<"CHUONG TRINH KIEM TRA TINH CHIA HET CHO 3\n"; cout<<"Nhap N: "; cin>>n; if(kiemtrachiahetcho3(n)==1) cout<<n<<" chia het cho 3"<<endl; else cout<<n<<" khong chia het cho 3"<<endl; } int tongcacchuso(int n) { int t, sum=0; while(n!=0) { t=n%10; n=n/10; sum+=t; } return sum; } int kiemtrachiahetcho3(int n) { if(tongcacchuso(n)%3==0) return 1; else return 0; } Kết quả: 8. Bài toán tính tiền lãi gửi ngân hàng: Nhập tiền vốn ban đầu, số tháng gửi N và lãi suất hàng tháng. T í nh số tiền nhận được sau mỗi tháng gửi biết rằng tiền lãi hàng tháng được gộp vào tiền vốn. Số tiền nhận được sau mỗi tháng sẽ hiển thị trên màn hình dạng : Tháng 1: 100 Tháng 2: 102 … Ví dụ: tiền vốn là 100, lãi suất thán là 2%. Sau 1 tháng gửi sẽ có số tiền là : Số tiền =100 + 100*0.02 = 102 Sau 2 tháng gửi sẽ có số tiền là: Số tiền=102 + 102*0.02 = 104 . 04 Công thức tính tiền thu được sau mỗi tháng gửi là: Số tiền := Tiền vốn + Tiền vốn * Lãi suấ t Số tiền này trở thành tiền vốn của tháng sau, tức là Tiền vốn = Số tiền Qúa trình cứ lặp đi lặp lại từ tháng 1 đến tháng N . 7 C & DataStructures Nhập: Tiền vốn, lãi suất, số tháng gửi. Xuất: tổng số tiền. Ý tưởng: Dùng vòng lặp for để tính tổng tiền với công thức trong for là Số tiền = Tiền vốn + Tiền vốn * Lãi suấ t (Tiền vốn = Số tiền) void tongsotien(float tv, float ls,int thang) { for(int i=1;i<=thang;i++) { tv+=(tv*(ls/100.0)); cout<<"Thang "<<i<<": "<<tv<<endl; } } Chương trình: #include <iostream.h> #include <conio.h> #include <math.h> void tongsotien(float tv, float ls,int thang); void main() { double s; float tv,sum,ls; int thang; cout<<"Nhap Tien Von: "; cin>>tv; cout<<"Nhap Lai Suat: "; cin>>ls; cout<<"Nhap So Thang Gui: "; cin>>thang; cout<<endl; tongsotien(tv,ls,thang); } void tongsotien(float tv, float ls,int thang) { for(int i=1;i<=thang;i++) { tv+=(tv*(ls/100.0)); cout<<"Thang "<<i<<": "<<tv<<endl; } } Kết quả: 8 C & DataStructures 9. Trở lại bài toán tính tiền gửi ngân hàng có tiền lãi hàng tháng gộp vào vốn (bài tập trên). Câu hỏi bây giờ là: cần gửi tối thiểu là bao nhiêu tháng để có được số tiền > S cho t rước . Nhập: Tiền vốn, lãi suất, tổng số tiền S. Xuất: Tổng số tháng gửi cần thiết để tiền vốn> S Kiểm tra khi tổng số tiền > số tiền nhập vào thì xuất i(tháng) ra. Ý tưởng: Làm như bài 8, trong for thì không có điều kiện dừng vòng lặp, vòng lặp chỉ dừng khi sum>S, thêm vào if, nếu tổng số tiền sum tăng lên lớn hơn S cho trước thì xuất tháng i ra. double cau9(float tv, float ls,double s) { double sum=0; for(int i=1;;i++) { sum=tv+(tv*(ls/100.0)); tv=sum; if(sum>s) { return i; } } } Chương trình: #include <iostream.h> #include <conio.h> #include <math.h> double cau9(float tv, float ls,double s); void main() { double s; float tv,ls; cout<<"Nhap Tien Von: "; cin>>tv; cout<<"Nhap Lai Suat: "; cin>>ls; cout<<"MODULE 1-9"<<endl; cout<<"Nhap tong so tien S: "; cin>>s; cout<<"Sau "<<cau9(tv,ls,s)<<" thang thi tien von > S"; } double cau9(float tv, float ls,double s) { double sum=0; for(int i=1;;i++) { 9 C & DataStructures sum=tv+(tv*(ls/100.0)); tv=sum; if(sum>s) { return i; } } } Kết quả: • Module 2: 1. Nhập 2 số n và k nguyên. Tính tổ hợp chập k của n theo công thức như sau C(k , n)=n !/ (k ! *(n-k) ! ) Nhập: 2 số nguyên n, k; Xuất tổ hợp chập k của n; Ý tưởng: Sử dụng đệ quy để tính tổ hợp. int tohop(int n, int k) { if (k == 0 || k == n) return 1; else return (tohop(n-1, k) + tohop(n-1, k-1)); } Chương trình: #include<iostream.h> #include<conio.h> #include<stdio.h> int tohop(int n,int k); void main() { int n,k; cout<<"Nhap n: "; cin>>n; cout<<"Nhap k: "; cin>>k; cout<<"To hop C(n,k): "<<tohop(n,k)<<endl; } int tohop(int n, int k) { if (k == 0 || k == n) return 1; else return (tohop(n-1, k) + tohop(n-1, k-1)); 10 [...]... cv, dt; cv=(cd+cr)*2; dt=cd*cr; cout