1. Trang chủ
  2. » Giáo án - Bài giảng

Lab report C & Data Structures

98 278 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lab report C & Data Structures
Tác giả Nhóm: 5 Lớp: CDTH11K
Người hướng dẫn Châu Thị Bảo Hà, GVHD
Trường học Trường Đại Học Công Nghiệp TP.Hồ Chí Minh
Chuyên ngành Khoa Học & Kỹ Thuật Máy Tính
Thể loại Báo cáo thực tập
Năm xuất bản 2010
Thành phố Biên Hòa
Định dạng
Số trang 98
Dung lượng 1,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Viết một hàm tính tổng các chữ số của một số nguyên...7 8.. Viết một hàm đảo ngược thứ tự các phần tử của một mảng số nguyên...17 3.. Viết một hàm tính tổng các chữ số của một số nguyên.

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HỒ CHÍ MINH

Khoa Khoa Học & Kỹ Thuật Máy Tính

LAB REPORT

C & Data Structures

Nhóm: 5 Lớp: CDTH11K GVHD:Châu Thị Bảo Hà

TP.Biên Hòa 11/2010

Trang 2

Mục Lục

 Module 1: 2

1 Viết hàm tính tổng S=1+1/2+1/3…+ 1/N 2

2 Nhập 2 số a và n Tính S =a^1 + a^2 + a^3 + …+ a^n 3

3 Viết chương trình tính tổng sau: S= 1 + 1/1! +1/2! + 1/3! + … + 1/n! 4

6 Viết chương trình tính tổng sau: S= 1 - x + x^2 - x^3 + … (-1)x^n 6

7 Viết một hàm tính tổng các chữ số của một số nguyên 7

8 Bài toán tính tiền lãi gửi ngân hàng 8

9 Trở lại bài toán tính tiền gửi ngân hàng 9

 Module 2: 11

1 Nhập 2 số n và k nguyên Tính tổ hợp chập k của n 11

2 Tìm các số Fibonaci 12

4 Viết hàm nhập số giây và đổi thành giờ : phút : giây 13

5 Viết hàm kiểm tra 1 số có phải là số nguyên tố hay không 14

6 Tìm số n bé nhất thoã s =1 + 2 + 3 +… + n >10000 16

 Module 3: 17

2 Viết một hàm đảo ngược thứ tự các phần tử của một mảng số nguyên 17

3 Viết chương trình nhập vào một mảng số tự nhiên Hãy xuất ra màn hình: 19

4 Viết chương trình nhập vào một mảng, hãy xuất ra màn hình: 21

 Module 4: 26

1 Tổ chức và xây dựng 2 hàm : GiảiPT_bac1 và GiảiPT_bac2 26

2 Tổ chức hàm với các tham số hợp lý dùng để tính: 27

3 Viết chương trình tính lương cho các công nhân tại xưởng may 30

4 Viết chương trình xây dựng và quản lý danh sách liên kết đơn 32

 Module 5 38

2 Viết chương trình xây dựng và quản lý danh sách liên kết đôi 38

 Module 6 47

2 Viết chương trình xây dựng và quản lý danh sách liên kết đôi 48

 Module 7 58

1 Sử dụng danh sách liên kết đơn tạo stack 58

2 Sử dụng danh sách liên kết đôi để quản lý khách hàng cho một nhà ga 62

 Module 8 70

1 Viết chương trình xây dựng và quản lý cây nhị phân tìm kiếm 70

2 Sử dụng bài tập ở câu trên tiếp tục phát triển rộng các menu như sau 74

3 Viết chương trình xây dựng và quản lý danh sách sinh viên 82

 Module 9 87

1 Viết chương trình xây dựng và quản lý cây nhị phân tìm kiếm 87

2 Sử dụng bài tập ở câu trên tiếp tục phát triển rộng các menu như sau 92

Trang 3

Ý 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

}

Kết quả:

Trang 4

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

}

Kết quả:

Trang 5

3 Viết chương trình tính tổng sau: S= 1 + 1/1! +1/2! + 1/3! + … + 1/n!.

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!.

}

Trang 6

float ham1(int x,int n)

Trang 7

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.

Trang 8

cout<<n<<" chia het cho 3"<<endl;

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.

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à

Trang 9

Số tiền = Tiền vốn + Tiền vốn * Lãi suất

Kết quả:

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 trước.

Trang 10

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)

return i;

}}

return i;

Trang 11

}}

Trang 12

2 Tìm các số Fibonaci Dãy số Fibonaci { 1, 1, 2, 3, 5, 8, 13, 21,… } được

là dãy được nhắc nhiều trong khối kỹ thuật, nó được xây dựng như sau: U0=1, U1=1 , Uk=Uk-1 + Uk-2 với mọi k= 2, 3, 4,

a Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n (sử dụng đệ quy)

b Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n (KHÔNG sử dụng đệ quy)

c Viết chương trình nhập số nguyên n và xuất ra n số Fibonaci đầu tiên

Trang 13

3 a Nhập 2 số nguyên dương m và n Tính Ước số chung nhỏ nhất và

bội số chung lớn nhất của m và n (sử dụng đệ quy)

b Nhập 2 số nguyên dương m và n Tính Ước số chung nhỏ nhất và bội số chung lớn nhất của m và n (không sử dụng đệ quy)

4 Viết hàm nhập số giây và đổi thành giờ : phút : giây.

Ví dụ: nhập 3665 giây -> 1 giờ 1 phút 5 giây

Nhập: n (giây).

Xuất dạng giờ: phút: giây.

Ý tưởng :

Dùng hàm gọi đệ quy và cấu trúc if /else để đổi giây thành giờ, phút và giây.

Nếu số giây (n)<60 thì gán giây = n, ngược lại nếu số giây n/3600 mà lớn hơn 0 thì gán kết quả n/3600 vào giờ, sau đó gọi đệ quy hàm doigio() với tham số n%3600 là

số giây dư của phép chia

Trang 14

void doigio(int n, int &g,int &p, int &gi);

Trang 15

cout<<"KHONG PHAI SO NGUYEN TO"<<endl;

}cout<<"Day so nguyen to la: ";xuatsntb(n);

}if(sum==2)

Trang 16

cout<<i<<" ";

dem++;

}if(dem==19)

{cout<<endl;

dem=0;

}}

cout<<i<<" ";

dem++;

}if(dem==n){

6 Tìm số n bé nhất thoã s =1 + 2 + 3 +… + n >10000 vã hãy cho biết khi đó

s có giá trị là bao nhiêu ?

Kiểm tra n bé nhất thỏa s =1 + 2 + 3 +… + n >10000 và tính s=?

Xuất n là số bé nhất thỏa điều kiện trên, và xuất s tổng.

Trang 17

cout<<"n = "<<i<<endl;

cout<<"S = "<<sum;

break;

}}

1 VCT nhập vào 2 phân số a/b và c/d Hãy tính tổng của phân số này, yêu

cầu là phân số kết quả phải ở dạng tối giản ví dụ :1/6+1/3=1/2.

2 Viết một hàm đảo ngược thứ tự các phần tử của một mảng số nguyên.

Ví dụ: mảng nhập vào 1 2 3 4 5 7 9 10

Sau khi đảo mảng thành 10 9 7 5 4 3 2 1

Nhập vào 1 mảng số nguyên a[];

Xuất mảng đả đảo ngược;

Ý tưởng:

Khi đảo mảng ta dùng 2 vòng lặp for(), vòng for thứ nhất thì chạy từ vị trí i=0 đến n,

để đảo vị trí 2 số cho nhau ta sử dụng giải thuật:

a[i]=a[i]+a[j];

a[j]=a[i]-a[j];

Trang 18

Chương trình:

#include <iostream.h>

#include <math.h>

void nhapmang(int a[],int m);

void xuatmang(int a[],int m);

void daonguocmang(int a[],int m);

}

Kết quả:

Trang 19

3 Viết chương trình nhập vào một mảng số tự nhiên Hãy xuất ra màn

void nhapmang(int a[],int m);

void sole(int a[],int m);

void sochan(int a[],int m);

void songuyento(int a[],int m);

void ktsonguyento(int a[],int m);

Trang 20

void sole(int a[],int m)

dem++;

cout<<a[i]<<" ";

}cout<<" - So luong so le la: "<<dem<<endl;}

void sochan(int a[],int m)

{

int dem=0;

cout<<"Cac so chan la: ";

for (int i=0;i<m;i++)

if (a[i]%2==0){

dem++;

cout<<a[i]<<" ";

}cout<<" - So luong so chan la: "<<dem<<endl;}

void songuyento(int a[],int m)

}

}

Kết quả:

Trang 21

4 Viết chương trình nhập vào một mảng, hãy xuất ra màn hình:

- Phần tử lớn nhất của mảng.

- Phần tử nhỏ nhất của mảng.

- Tính tổng của các phần tử trong mảng

- Tính trung bình cộng

- Tính tổng của các phần tử là số nguyên tố trong mảng

- Tính số lượng phần tử là số nguyên tố trong mảng

- Kiểm tra tính đối xứng cũa mảng

- Tìm phân tử là số nguyên tố đầu tiên trong mảng

- Tìm 2 phân tử là 2 số nguyên tố đầu tiên trong mảng

Tính trung bình cộng lấy tổng các phần tử chia cho số lượng phần tử nhập vào Tổng và số lượng cac phần tử là số nguyên tố trong mảng dùng hai vòng lặp for để tính nếu a[i]%2=0 thì tăng đếm lên nếu đếm =2 th2 cộng dồn a[i].

Xuất số lẻ dùng vòng lặp for nếu a[i]%2!=0 thì cộng dồn [i] tăng biến đếm lên Xuất số chẵn dùng vòng lặp for nếu a[i]%2==0 thì cộng dồn [i] tăng biến đếm lên Xuất số nguyên tố đầu tiên và hai số nguyên tố đầu tiên.

Hàm trên có thể được viết như sau:

Chương trình:

void nhapmang(int a[],int m);

void maxmin(int a[],int m);

void tongcacphantu(int a[],int m);

void trungbinhcong(int a[],int m);

Trang 22

void tongcacsonguyento(int a[],int m);

void soamlonnhat(int a[],int m);

void soduongnhonhat(int a[],int m);

void tongsocannguyen(int a[],int m);

void sole(int a[],int m);

void sochan(int a[],int m);

void ktdoixung(int a[],int m);

void songuyentodautien(int a[],int m);

void haisntdautien(int a[],int m);

void maxmin(int a[],int m)

cout<<"Phan tu lon nhat cua mang = "<<max<<endl;

cout<<"Phan tu nho nhat cua mang = "<<min<<endl;

sum+=a[i];

t++;

}}

cout<<"\nTong cac phan tu la so nguyen to = "<<sum;cout<<"\nSo luong phan tu la so nguyen to = "<<t<<endl;

Trang 23

void soamlonnhat(int a[],int m)

{

int min, flag=0, maxam;

for (int i=0;i<m;i++)

{

if (a[i]<0){

int flag=0, minduong;

for (int i=0;i<m;i++)

{

if (a[i]>0){

Trang 24

cout<<"Tong phan tu co can ban hai nguyen la "<<tong<<endl;}

void sole(int a[],int m)

dem++;

cout<<a[i]<<" ";

}cout<<"\nSo luong so le la "<<dem<<endl;

dem++;

cout<<a[i]<<" ";

}cout<<" - So luong so chan : "<<dem<<endl;

flag=0;

i=m;

}j ;

cout<<"Phan tu la so nguyen to dau tien : ";

for (int i=0;i<m;i++)

{

int dem=0;

for (int j=1;j<=a[i];j++){

Trang 25

if (a[i]%j==0)

dem++;

}

if (dem==2){

kt++;

cout<<a[i]<<" ";

i=m;

}}

Trang 26

PT bậc 1: nếu a=0 thì pt vô nghiệm, nếu a,b=0 thì pt vô số nghiệm.

Nếu a=0 thì giải phương trình bậc 2 như giải pt bậc 1 Ngược lại thì tính delta Delta=b2 – 4ac Nếu delta=0 thì pt có 1 nghiệm kép x1, delta<0 thì pt vô nghiệm, ngược lại thì có 2 nghiệm x1,x2.

Chương trình :

#include <iostream.h>

#include <math.h>

void GiaiPT_bac1(float a, float b);

void GiaiPT_bac2(float a1, float b1, float c1);

Trang 27

cout<<"Phuong trinh co 2 nghiem: x1= "<<x1;

cout<<" || x2= "<<x2;

}}

dài-• Một hàm dùng để tính MAXMIN của 2 số integer.

• Một hàm dùng để tính bội số chung nhỏ nhất – USC lớn nhất của 2 số nguyên dương.

Nhập bán kính, chiều dài, rộng của hcn, 2 số a,b;

Xuất Chu vi, diện tích của hình tròn và hcn Tìm max và min cùa 2 số a, b.

Ý tưởng:

Hàm tìm ước chung lớn nhất dùng đệ quy giải Nhập 2 giá trị c, d, nếu c<d thì gọi lại hàm đó với tham số đảo ngược d,c Đặt 1 biến x = c%d; nếu x=0 nghĩ trả lại d, không thì gọi lại hàm đó với 2 tham số là d và x.

Hàm tìm bội chung nhỏ nhất thì ta có 3 trường hợp: thứ nhất là c chia hết cho d thì c

là bcnn ngược lại là trường hợp thứ hai thì d là bcnn, thứ ba thì cho vòng lặp chạy

từ i=c đến i<=c*d nếu i chia hết cho c và cho d thì xuất i ra thoát vòng lặp.

Trang 28

float cv, dt;

cv=2*3.14*r;

dt=3.14*r*r;

cout<<"Chu vi hinh tron: "<<cv<<endl;

cout<<"Dien tich hinh tron: "<<dt;

Trang 29

cout<<"\t\t\t|.2.CHU VI DIEN TICH HCN TU CD, CR |\n";cout<<"\t\t\t|.3.TIM MAX MIN CUA 2 SO INTERGER |\n";cout<<"\t\t\t|.4.BCNN & UCLN CUA 2 SO NGUYEN DUONG|\n";cout<<"\t\t\t~~~~~~~~~~~~~NGO~QUOC~HUNG~~~~~~~~~~~\n";

Trang 30

Kết quả:

3 Viết chương trình tính lương cho các công nhân tại xưởng may Mỗi

công nhân sẽ có giờ vào và giờ ra trong một ngày Tiền lương được tính như sau:

Nhập giờ vào, giờ ra.

Xuất ra lương tính theo giờ.

Ý tưởng :

Nếu giờ vào <= 24 thì xét tiếp điều kiện nếu giờ vào > =17 thì lương=(giờ ra – giờ vào)* 40000 Ngược lại thì lương =(giờ ra – 17) * 40 và gán lại số giờ ra dư ra, và còn lại sau khi nhân với 40 Lấy chính số dư đó làm giờ ra, tiếp tục xét tiếp những điều kiện còn lại.

if(giovao>=17)

sum+=(giora-giovao)*40;

else{

sum+=(giora-17)*40;

giora=giora-(giora-17);

Trang 31

if(giora<18){

if(giovao>=14)

sum+=(giora-giovao)*22;

else{

sum+=(giora-14)*22;

giora=giora-(giora-14);

}}

if(giora<15){

if(giovao>=11)

sum+=(giora-giovao)*30;

else{

sum+=(giora-11)*30;

giora=giora-(giora-11);

}}

if(giora<12){

if(giovao>=8)

sum+=(giora-giovao)*15;

else{

sum+=(giora-8)*15;

giora=giora-(giora-8);

}}

if(giora<9){

if(giovao>=5)

sum+=(giora-giovao)*20;

else{

sum+=(giora-5)*20;

giora=giora-(giora-5);

}}

cout<<"TONG TIEN LUONG: "<<sum;

}

void main()

{

float giovao, giora;

cout<<"NHAP GIO VAO: ";

Trang 32

cout<<"NHAP SAI DU LIEU";

}

Kết quả :

4 Viết chương trình xây dựng và quản lý danh sách liên kết đơn Thành

phần quản lý gồm con trỏ pHead và pTail (đầu và cuối xâu) Hiển thị menu thực hiện các chức năng sau (mỗi chức năng thực hiện bằng hàm) Thành phần dữ liệu trong mỗi Node là giá trị kiểu integer.

• Thêm một node vào đầu danh sách

• Thêm một node vào cuối danh sách

• Thêm nhiều node vào đầu danh sách

• Thêm nhiều node vào cuối danh sách

• Hiển thị giá trị node thứ n

• Tìm một node dựa theo giá trị nhập vào

• Thêm một node vào sau một node nào đó (nhập giá trị để tìm)

• Đếm số lượng node trong xâu

• Hiển thị danh sách các node trong xâu

• Hủy một node (nhập giá trị cần tìm)

• Hủy tòan bộ danh sách

• Tính tổng giá trị tòan bộ danh sách

• Tìm giá trị lớn nhất và nhỏ nhất trong danh sách

• Sắp xếp danh sách với giá trị tăng dần (tự chọn thuật tóan)

Nhập danh sách liên kết đon l.

Thực hiện yêu cầu đề.

Ý tưởng :

Khai báo cấu trúc 1 DSLK đơn chứa số nguyên

// kiểu của một phần tử trong danh sách

//khởi tạo danh sách rỗng

void Init(List &l)

Trang 33

// -prototype -void init(list &l);

void output(list l);

void outputsearch(list l, int n);

void addhead(list &l, node* p);

void addtail(list &l, node* p);

void searchfixed (list l, int x);

node* search (list l, int x);

void addafter (list &l, node *q, node* new_node);

int demnode(list l);

void removelist(list &l);

void sum(list l);

int removehead(list &l);

int removeafter(list &l, node *q);

int removenode(list &l, int k);

Trang 34

node *n=search(ds,k);

if(n!=NULL){

cout<<"Nhap gia tri cho node moi: ";cin>>k2;

node* nm=getnode(k2);

if(nm!=NULL)

addafter(ds,n,nm);

}}

cout<<p->data<<"\t";

flag=1;

break;

Trang 35

cout<<i<<"\t";

flag=1;

Trang 36

}p=p->pnext;

Trang 37

int removehead(list &l)

Trang 38

1 Viết chương trình xây dựng và quản lý danh sách liên kết vòng đơn

Thành phần quản lý gồm con trỏ pHead Hiển thị menu thực hiện các chức năng sau (mỗi chức năng thực hiện bằng hàm) Thành phần dữ liệu trong mỗi Node là giá trị kiểu integer.

• Hiển thị toàn bộ danh sách.

• Thêm một node vào danh sách.

• Tìm một node trong danh sách (giá trị nhập vào).

• Hiển thị các node là số nguyên tố.

• Hủy một node trong danh sách (giá trị nhập vào đầu tiên tìm thấy).

• Hủy tất cả các node là số nguyên tố.

• Tăng giá trị mỗi node lên 2.

• Tính tổng giá trị tòan bộ danh sách.

• Tìm giá trị lớn nhất và nhỏ nhất trong danh sách.

• Sắp xếp danh sách tăng dần.

• Hủy tòan bộ danh sách.

2 Viết chương trình xây dựng và quản lý danh sách liên kết đôi Thành phần

quản lý gồm con trỏ pHead và pTail Hiển thị menu thực hiện các chức

Trang 39

năng sau (mỗi chức năng thực hiện bằng hàm) Thành phần dữ liệu trong mỗi Node là giá trị kiểu integer.

•Hiển thị giá trị toàn bộ danh sách theo thứ tự từ đầu đến cuối

•Hiển thị giá trị toàn bộ danh sách theo thứ tự từ cuối đến đầu

•Thêm một node vào đầu danh sách

•Thêm một node vào cuối danh sách

•Thêm một node vào sau một phần tử (giá trị nhập vào)

•Tìm một node trong danh sách.

•Đếm số lần xuất hiện của một node trong danh sách

•Hủy phần tử đầu danh sách

•Hủy phần tử cuối danh sách

•Hủy phần tử trong danh sách (giá trị nhập vào)

•Hiển thị các node là số nguyên tố

•Hủy một node trong danh sách (giá trị nhập vào đầu tiên tìm thấy)

•Hủy tất cả các node là số nguyên tố

•Tăng giá trị mỗi node lên 2

•Tính tổng giá trị tòan bộ danh sách

•Tìm giá trị lớn nhất và nhỏ nhất trong danh sách

•Sắp xếp danh sách tăng dần

•Hủy tòan bộ danh sách

Nhập danh sách liên kết đôi với 2 con trỏ phead và ptail.

Thực hiện yêu cầu đề.

Trang 40

case 1:

{

outputdaucuoi(ds);break;

}case 2:

{

outputcuoidau(ds);break;

}case 3:

cout<<"Nhap gia tri cho node moi: ";cin>>k2;

dnode* nm=getnode(k2);

if(nm!=NULL)

addafter(ds,n,nm);

}

Ngày đăng: 12/05/2014, 10:44

TỪ KHÓA LIÊN QUAN

w