Tải bản đầy đủ (.doc) (43 trang)

Tiểu luận kĩ thuật lập trình C

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (292.3 KB, 43 trang )

UBND TỈNH BÌNH DƯƠNG
TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT

TÊN ĐỀ TÀI

BÁO CÁO TIỂU LUẬN MƠN HỌC
KỸ THUẬT LẬP TRÌNH 2

NHĨM: 5
NGÀNH HỌC: Sư Phạm Tốn Học
TÊN LỚP: C14TO02
NIÊN KHỐ: 2014-2017
GIẢNG VIÊN GIẢNG DẠY: Cao Thanh Xuân
SINH VIÊN TRONG NHÓM:
STT

HỌ TÊN SV

MÃ SỐ SV

VAI TRÒ

1
2
3
4
5

Nguyễn Cao Mỹ Thanh
Dương Ngọc Thu Hằng
Võ Thị Mỹ Duyên


Nguyễn Thị Thoa
Phạm Ngọc Trinh

1411402090126
1411402090109
1411402090137
1411402090077
1411402090086

Thành viên
Thành viên
Thành viên
Nhóm trưởng
Thành viên


CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc

BIÊN BẢN PHÂN CÔNG CÁC LẦN HỌP NHĨM
V/v: Làm bài tập nhóm mơn Kỹ Thuật Lập Trình 2
Kính gửi: Thầy giáo dạy bộ mơn Kỹ Thuật Lập Trình 2
Hơm nay, nhóm 5 chúng em làm biên bản thống kê các lần họp nhóm như sau:
 Lần họp nhóm thứ nhất:
1. Địa điểm họp: Vườn học tập trường Đại học Thủ Dầu Một
2. Nội dung họp:
Nhóm trưởng phân công các bài tập thầy đã giao cho các thành viên trong nhóm
để nộp lấy điểm 30% và sau đó nhóm trưởng dặn dị các thành viên là phải làm sao
cho đúng yêu cầu và nộp đúng thời hạn cho nhóm trưởng trước ngày 25/04/2016.
3. Thành phần tham gia:

Nhiệm vụ
% đóng
Họ và tên
Bài thực hành số
Bài thực hành số Bài thực hành số
góp
1
2
3

S
T
T
1

Nguyễn Cao Mỹ Thanh

1,2

2,5

7,9

100%

2

Dương Ngọc Thu Hằng

4


1,4

5,6

100%

3

Võ Thị Mỹ Duyên

3

3,7

2,8

100%

4

Nguyễn Thị Thoa

5,7

8,9

3,4

100%


5

Phạm Ngọc Trinh

6

6,10

1,10

100%

Tất cả các thành viên trong nhóm đi đầy đủ, đúng giờ và tích cực đóng góp
nhiều ý kiến cho bài làm và buổi họp kéo dài từ 7h30 đến 10h00 vào ngày
16/4/2016.
 Lần họp nhóm thứ hai:
1. Địa điểm họp: Vườn học tập trường Đại học Thủ Dầu Một
2. Nội dung họp:
Nhóm trưởng cùng các thành viên trong nhóm tìm và đưa ra cách giải quyết bài
toán lớn để nộp lấy điểm 70% và sau đó nhóm trưởng phân cơng các thành viên là
phải làm sao cho đạt hiệu quả và nộp đúng thời hạn cho thầy trước ngày 7/5/2016
để thầy xem sớm có gì thiếu sót thầy sẽ góp ý kiến để bổ sung tốt hơn cho bài, khi
thầy xác nhận xong thì in ra nộp khoa.
3. Thành phần tham gia:
STT
1
2

Họ và tên

Nguyễn Cao Mỹ Thanh
Dương Ngọc Thu Hằng

Nhiệm vụ
Viết và chạy chương trình
Tìm kiếm thuật tốn

% đóng góp
100%
100%

3

Võ Thị Mỹ Dun

Viết thuật toán

100%

4

Nguyễn Thị Thoa

Viết thuật toán

100%

5

Phạm Ngọc Trinh


Viết và chạy chương trình

100%


Tất cả các thành viên trong nhóm đi đầy đủ, đúng giờ và tích cực đóng góp
nhiều ý kiến cho bài làm và buổi họp họp vào các buổi: thứ 7 (23/4/2016) từ 07h30
đến 10h00, thứ 4 (4/5/2016) từ 8h00 đến 10h30, thứ 6 (6/5/2016) từ 8h00 đến
10h30.
Nhóm em đã cố gắng để hoàn thành bài tập theo yêu cầu của thầy, có gì thiếu
sót mong thầy góp ý để bài tiểu luận của nhóm tốt hơn.
Nhóm 5 chúng em xin chân thành cảm ơn!
Nhóm trưởng
Nguyễn Thị Thoa

PHẦN NỘI DUNG
MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU……………………………………………………….……1


1. Giới thiệu chung về đề tài…………………..………………………………..1
2. Khả năng ứng dụng đề tài trong thực tế.......................................................1
CHƯƠNG 2: LỰA CHỌN CÔNG NGHỆ....................................................................2
1. Cơng nghệ, nền tảng, ngơn ngữ lập trình…………………………..………...2
2. Cấu hình máy tối thiểu………………………………………………………2
2.1 Dành cho lập trình viên…………………………………………….2
2.2 Dành cho người sử dụng……………………………………………2
CHƯƠNG 3: MÔ TẢ CHI TIẾT KĨ THUẬT……………………………………...…3
1. Cấu trúc dữ liệu được sử dụng………………………………………………3

2. Các thuật toán được sử dụng………………………………………………..3
3. Các hàm được sử dụng……………………………….……………………..3
CHƯƠNG 4: KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG DẪN SỬ DỤNG……………..4
1. Bài thực hành số 1……………………………..……………………………4
1.1 Bài 1:……………………………………………………………….4
1.2 Bài 2:….……………………………………………………………5
1.3 Bài 3: …………………………………………..…………………..8
1.4 Bài 4:……………………………………………..…………………9
1.5 Bài 5: ………………………………………………………..……10
1.6 Bài 6:….…………………………………………..………………12
1.7 Bài 7:….………………………………………..…………………12
2. Bài thực hành số 2…………………………………………………………12
2.1 Bài 1:….……………………………………..……………………12
2.2 Bài 2: ……………………………………….…………………….14
2.3 Bài 3:….………………………………………..…………………15
2.4 Bài 4:….………………………………………….………………..17
2.5 Bài 5:….……………………………………………..…………….18
2.6 Bài 6:….………………………………….………….…………….19
2.7 Bài 7:….…………………………………………….……………..19
2.8 Bài 8:….……………………………………………..…………….22
2.9 Bài 9:….…………………………………………….……………..23
2.10 Bài 10:…..…………………………………………..……………24
3. Bài thực hành số 3……………………………………..…………………..26
3.1 Bài 1:….……………………………………………..…………….26
3.2 Bài 2:….……….……………………………………………….….26
3.3 Bài 3:….……….……………………………………………..……27
3.4 Bài 4:….……….…………………………………………..………27
3.5 Bài 5:….……….…………………………………………..………28
3.6 Bài 6:….…………………………………………………...………28
3.7 Bài 7:….…………………………………………………..……….29

3.8 Bài 8:….…………………………………………………...………30
3.9 Bài 9:….…………………………………………….……….…….30
3.10 Bài 10: ……………………………………………...……………31
4. Bài tập lớn……….………………………………………...…….…………32
CHƯƠNG 5: KẾT LUẬN………………………………………...…………………36
CHƯƠNG 6: TÀI LIỆU THAM KHẢO…………………………………………….37


CHƯƠNG 1: GIỚI THIỆU
1. Giới thiệu chung về đề tài
Trên thế giới cũng như Việt Nam, Công nghệ thông tin đã trở thành một ngành
công nghiệp mũi nhọn, không thể thiếu trong việc áp dụng vào các hoạt động xã hôi
như: Quản lý kinh tế, thông tin, các hoạt động kinh doanh… ở nước ta hiện nay, việc
áp dụng tin học trong việc quản lý tại các cơ quan xí nghiệp đang rất phổ biến và trở
nên cấp thiết. Nhưng một vấn đề đặt ra là trong việc quản lý làm thế nào để chuẩn hoá
cách xử lý dữ liệu bởi mỗi cơ quan có một cách xử lý khác nhau. Đó cũng là một vấn
đề cịn nhiều hạn chế của đội ngũ nhân viên trong việc quản lý các cơ quan xí nghiệp
của nước ta. Một thực trạng là các công ty thường mời các chuyên viên phần mềm vi
tính viết chương trình nhưng họ khơng hiểu chương trình được viết như thế nào, hoặc
ứng dụng được phân tích ra sao. Họ chỉ biết làm theo sự chỉ dẫn của công ty phần
mềm khi sử dụng, khi muốn thay đổi nhỏ lại phải mời chuyên viên vì họ là người viết
ra nó. Với mong muốn giúp các bạn hiểu về cách thực hiện, cách tạo ra và chạy các
chương trình trên máy tính như thế nào, nhóm đã cố gắng thực hiện và đưa ra các
phương pháp, các thuật tốn cho mỗi chương trình trên Dev C. Đây cũng chỉ là 1
phương pháp trong số nhiều phương pháp, nó có thể chưa hồn thiện nhưng cũng góp
phần giúp chúng ta hiểu được các quy trình thực hiện của 1 bài toán, ý nghĩa của các
thuật toán khi đưa vào chương trình. Mặc dù có nhiều cố gắng để hồn thành nhưng
thời gian có hạn và kinh nghiệm chưa nhiều nên việc xây dựng hệ thống cịn nhiều
thiếu xót cần được bổ sung chỉnh sửa. Vì vậy, nhóm em mong nhận được ý kiến đóng
góp của thầy cơ và bạn bè để đề tài được hoàn thiện hơn. Cuối cùng, nhóm em xin

chân thành cảm ơn thầy Cao Thanh Xuân đã tận tình chỉ bảo hướng dẫn nhóm em
hồn thành đề tài này.
Chức năng của đề tài: Lập trình để giải quyết các bài toán từ cơ bản đến nâng
cao thơng qua các thuật tốn được viết trên Dev C.
2. Khả năng ứng dụng đề tài trong thực tế
Có ứng dụng tốt trong thực tế như giúp người học giải quyết các bài tốn
nhanh; giúp giáo viên có thể ứng dụng để tính tốn điểm số của học sinh, có thể
phân loại: giỏi, trung bình, khá,… và hạnh kiểm; giúp những người làm văn phịng
có thể quản lí được nhân viên về mặt tiền lương, tiền thưởng, trợ cấp,…; giúp các
nhà kinh doanh quản lí được các thơng số dữ liệu để tính tốn dễ dàng và chính xác
hơn,…

Nhóm 5

GV giảng dạy: Cao Thanh Xuân 1


CHƯƠNG 2: LỰA CHỌN CƠNG NGHỆ
1. Cơng nghệ, nền tảng, ngơn ngữ lập trình
Phần mềm Dev C, ngơn ngữ lập trình C/C++
2. Cấu hình máy tối thiểu
2.1 Dành cho lập trình viên





Máy có thể của các hãng như Dell, Acer, Asus, HP,…
Core i3
Phần cứng máy tính có chip xử lí 1.8Ghz, RAM 2G

Phần mềm: Visual Studio, Dev C, Notepad, …

2.2 Dành cho người sử dụng

Bất kì thiết bị nào có cài phần mềm Dev C
 Máy tính bàn
 Laptop
 Máy tính bảng
 …
 Core i3
 Phần cứng máy tính có chip xử lý từ 1.5Ghz trở lên, RAM

2G

 Phần mềm: Visual Studio, Dev C,…

Nhóm 5

GV giảng dạy: Cao Thanh Xuân 2


CHƯƠNG 3: MÔ TẢ CHI TIẾT KỸ THUẬT
1. Cấu trúc dữ liệu được sử dụng

Một số cấu trúc dữ liệu được dùng trong chương trình như: mảng, danh sách liên
kết, con trỏ, tập tin, struct.
2. Các thuật toán được sử dụng

Một số thuật toán được sử dụng như: sắp xếp, tìm kiếm, đường đi ngắn nhất, …
3. Các hàm được sử dụng


- Hàm đọc file: void docfile(HCN a[MAX],int &n)
- Hàm ghi file: void ghifile(HCN a[],int kq)
- Hàm true/false: bool HCN_Long_Nhau(HCN a, HCN b)
- Hàm main: int main()

Nhóm 5

GV giảng dạy: Cao Thanh Xuân 3


CHƯƠNG 4: KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG DẪN SỬ DỤNG
Các bài tập nhóm đã làm được:

BÀI THỰC HÀNH SỐ 1: TÌM KIẾM CƠ BẢN
Bài 1. Viết chương trình nhập một mảng số nguyên A gồm n phần tử(1≤ n ≤100).
Hãy lập trình thực hiện các cơng việc sau:
a. Sắp xếp mảng theo thứ tự tăng dần.
b. Nhập vào phần tử X. Dùng kỹ thuật tìm kiếm nhị phân kiểm tra xem X có
trong A khơng, nếu có hãy in ra vị trí của X trong A, nếu khơng in ra vị trí -1.
c. Nhập vào hai phần tử X và Y (X ≠ Y). In ra khoảng cách giữa X và Y. Nếu một
trong hai hoặc cả hai X và Y khơng có trong A thì khoảng cách bằng -1.
Yêu cầu chung: Mỗi câu sẽ viết riêng một hàm, trong hàm main sẽ gọi các hàm
này. Tất cả lưu trong một file .c hoặc .cpp.
#include <conio.h>
#include <iostream>
using namespace std;
int x[100], a[100], b[100], n, k;
FILE *f;
void xuLiHoanVi(int i){

for(int j = 1; j <= n; j++){
if(b[j] == 1){
x[i] = j;
b[j] = 0;
if(i == n){
for(int h = 1; h <= n; h++)
fprintf(f, "%d ", a[x[h]-1]);
fprintf(f, "\n");
}
else xuLiHoanVi(i+1);
b[j] = 1;
}
}
}
void xuLiToHop(int i)
{
for(int j = x[i-1]+1; j <= n-k+i; j++)
{
x[i] = j;
if(i == k)
{
for(int h = 1; h <= k; h++)
fprintf(f, "%d ", a[x[h]-1]);
fprintf(f, "\n");
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 4


}

else xuLiToHop(i+1);
}
}
void readFile(){
f = fopen("input.txt", "rt");
fscanf(f, "%d", &n);
for(int i = 0; i < n; i++)
fscanf(f, "%d", &a[i]);
fclose(f);
}
void toHop(){
cout<<"\nnhap K : ";
cin>>k;
f = fopen("Tohop.out", "wt");
fprintf(f,"%d %d\n",n,k);
xuLiToHop(1);
fclose(f);
}
void hoanVi(){
for(int i = 0; i <= n; i++) b[i] = 1;
f = fopen("Hoanvi.out", "wt");
xuLiHoanVi(1);
fclose(f);
}
int main()
{
readFile();
toHop();
hoanVi();
getch();

return 0;

}
BÀI 2: Cho trước một danh sách A các số nguyên, hãy nhập từ bàn phím vào một
số nguyên X, hãy cho biết X xuất hiện bao nhiêu lần trong A.
Input: danh sách số nguyên cho trước trong file “dsach.inp”, trong file này có 2
dịng, dịng đầu tiên là số nguyên n (1≤ n ≤50) là số lượng các phần tử trong danh
sách, dòng tiếp theo là danh sách chứa n số nguyên.
Output: in ra màn hình.
Yêu cầu chung: Viết ít nhất 2 hàm (kể cả hàm main()).
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <conio.h>
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 5


using namespace std;
void taoFile();
void docFile(int &, int *&);
void thuhoiContro(int *&);
void xuatDanhsachA(int, int *);
int nhapX(int &);
int demX(int, int, int *);
void timX();
int main()

{
taoFile();
timX();
getch();
return 0;
}
void taoFile()
{
srand(time(NULL));
int n; // 1 <= n <= 50
n = 1 + rand() % 50; //Tao gia tri cho n tu [1, 50]
ofstream FileOut("dsach.inp", ios_base::out);
FileOut << n << endl;
for (int i = 0; i < n; ++i)
{
FileOut << rand() % 100 << " ";
}
FileOut.close();
}
void docFile(int &n, int *&arr)
{
ifstream FileIn("dsach.inp", ios_base::in);
if (FileIn.fail())
{
cout << "Khong tim thay dsach.inp, vui long kiem tra lai!" << endl;
return;
}
FileIn >> n;
arr = new int[n];
for (int i = 0; i < n; ++i)

{
FileIn >> arr[i];
}
FileIn.close();
}
void thuhoiContro(int *&ptr)
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 6


{
delete[] ptr;
ptr = NULL;
}
void xuatDanhsachA(int n, int *arr)
{
cout << "n = " << n << endl;
cout << "Danh sach A cua ban:" << endl;
for (int i = 0; i < n; ++i)
{
cout << arr[i];
if (i < n)
cout << setw(4);
}
}
int nhapX(int &x)
{
do
{

cout << "\nNhap mot so nguyen X: ";
cin >> x;
if (x < 0 || x > 100)
cout << "X khong hop le. X >= 0 va X <= 100" << endl;
} while (x < 0 || x > 100);
return x;
}
int demX(int x, int n, int *arr)
{
int DEMX = 0;
for (int i = 0; i < n; ++i)
{
if (arr[i] == x)
{
++DEMX;
}
}
return DEMX;
}
void timX()
{
int n = 0, *arr = NULL, x, dem = 0;
docFile(n, arr);
xuatDanhsachA(n, arr);
nhapX(x);
dem = demX(x, n, arr);
cout << "So nguyen X = " << x << " xuat hien " << dem << " lan trong A" <<
endl;
Nhóm 5


GV giảng dạy: Cao Thanh Xuân 7


}
Bài 3. Một chỉnh hợp không lặp chập k của tập n phần tử (k≤n) là một bộ (có thứ
tự) gồm k phần tử của tập n phần tử và các thành phần của bộ không được trùng
nhau.
Số lượng chỉnh hợp không lặp chập k của tập n phần tử:
Ank = n(n-1)…(n-k+1)=
Hãy tìm tất cả các chỉnh hợp khơng lặp chập k của tập n phần tử.
Yêu cầu chung: Viết ít nhất 2 hàm (kể cả hàm main()).
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#define max 20
char DanhDau[max];
int Luu[max];
int n,k;
void Init()
{
printf("\n\t\2 Nhap n = ");
scanf("%d",&n);
printf("\n\t\2 Nhap k = ");
scanf("%d",&k);
for(int i = 0; iDanhDau[i] = 0;
}
void Out()
{
cout<

for(int i = 0; icout<}
void Try(int i)
{
if(i==k)
Out();
else
{
for(int j = 0; jif(DanhDau[j] == 0)
{
DanhDau[j] = 1;
Luu[i] = j;
Try(i+1);
DanhDau[j] = 0;
}
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 8


}
}
int main()
{
Init();
printf("\nCac chinh hop khong lap chap k cua n la");
Try(0);
getch();

return 0;

}
Bài 4. Một chỉnh hợp lặp chập k của tập n phần tử là một bộ (có thứ tự) gồm k
phần tử của tập n phần tử và các thành phần của bộ có thể trùng nhau.
Số lượng chỉnh hợp lặp chập k của tập n phần tử:
Hãy tìm tất cả các chỉnh hợp lặp chập k của tập n phần tử.
Yêu cầu chung: Viết ít nhất 2 hàm (kể cả hàm main()).
#include<iostream>
using namespace std;
int n, k, a[10];
bool check = false;
void display()
{
for (int i = 1; i <= k; i++)
{
cout << a[i];
}
cout << endl;
}
void nextString()
{
int i = k;
while (a[i]==n&&i>0)
{
i--;
}
if (i == 0) check = true;
else
{

a[i]++;
for (int j = i + 1; j <= k; j++)
{
a[j] = 1;
}
}
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 9


}
int main()
{
cout << "\n\t\2 Nhap n = ";
cin >> n;
cout << "\n\t\2 Nhap k = ";
cin >> k;
for (int i = 1; i <= k; i++)
{
a[i] = 1;
}
while (!check)
{
display();
nextString();
}
system("pause");

}

Bài 5. Cho file văn bản input.txt dòng đầu tiên ghi một số nguyên n, dòng thứ hai
ghi n số nguyên các số đôi một khác nhau và cách nhau một khoảng trống. Hãy:
a. Đọc dữ liệu từ file vào mảng a.
b. Liệt kê các tổ hợp chập k (ktrong mảng a. Dữ liệu được ghi ra file Tohop.out với nội dung: dòng thứ nhất ghi
hai số n, k cách nhau một khoảng trống, các dòng tiếp theo mỗi dòng ghi một tổ
hợp của a,
mỗi số cách nhau một khoảng trắng.
c. Liệt kê các hoán vị của các phần tử trong mảng a. Dữ liệu được ghi ra file
Hoanvi.out, mỗi dòng là một hoán vị của a, mỗi số cách nhau một khoảng trắng.
Yêu cầu chung: Viết ít nhất 3 hàm (kể cả hàm main()).
#include <conio.h>
#include <iostream>
using namespace std;
int x[100], a[100], b[100], n, k;
FILE *f;
void xuLiHoanVi(int i){
for(int j = 1; j <= n; j++){
if(b[j] == 1){
x[i] = j;
b[j] = 0;
if(i == n){
for(int h = 1; h <= n; h++)
fprintf(f, "%d ", a[x[h]-1]);
fprintf(f, "\n");
}
else xuLiHoanVi(i+1);
b[j] = 1;
Nhóm 5


GV giảng dạy: Cao Thanh Xuân 10


}
}
}
void xuLiToHop(int i)
{
for(int j = x[i-1]+1; j <= n-k+i; j++)
{
x[i] = j;
if(i == k)
{
for(int h = 1; h <= k; h++)
fprintf(f, "%d ", a[x[h]-1]);
fprintf(f, "\n");
}
else xuLiToHop(i+1);
}
}
void readFile(){
f = fopen("input.txt", "rt");
fscanf(f, "%d", &n);
for(int i = 0; i < n; i++)
fscanf(f, "%d", &a[i]);
fclose(f);
}
void toHop(){
cout<<"\nnhap K : ";
cin>>k;

f = fopen("Tohop.out", "wt");
fprintf(f,"%d %d\n",n,k);
xuLiToHop(1);
fclose(f);
}
void hoanVi(){
for(int i = 0; i <= n; i++) b[i] = 1;
f = fopen("Hoanvi.out", "wt");
xuLiHoanVi(1);
fclose(f);
}
int main()
{
readFile();
toHop();
hoanVi();
getch();
return 0;

}
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 11


Bài 6. Liệt kê các số nhị phân gồm n chữ số.
#include "conio.h"
#include "stdio.h"
int main()
{

int x[30], n,i,k,l,r;
printf("\n\t\6 Nhap vao do dai cua day: ");
scanf("%d",&n);
for (i=0; ix[i] = 0;
while (i>=0)
{
for (i=0; iprintf("%d ",x[i]);
printf("\n");
i=n-1;
while ((i>=0) && (x[i] == 1)) i--;
if(i>=0)
{
x[i] = 1;
for (int j= i+1; jx[j] = 0;
}
}
getch();
return 0;

}
Bài 7. Liệt kê tất cả các dãy nhị phân thưa có đúng n chữ số (dãy nhị phân thưa là
dãy trong đó khơng có hai chữ số 1 đứng liền nhau).
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
void nhiphan(int i);

int x[30],k,i;
static int n;
int kiemtra(){
int j;
for(j=0; jif(x[j]==1 && x[j+1]==1){
return 0;
}
return 1;
}
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 12


void printresult(){
int j;
for(j=0; jcout<cout<<"\n";
}
int main(){
cout<<"\n\t\2 Nhap vao n: ";
cin>>n;
nhiphan(0);
getch();
return 0;
}
void nhiphan(int i){
int k;

for (k=0; k<=1; k++){
x[i] = k;
if (i== n-1){
if(kiemtra()==1)
printresult();
}
else
nhiphan(i+1);
}
}

BÀI THỰC HÀNH SỐ 2: RÈN LUYỆN TƯ DUY LẬP TRÌNH
Bài 1. Viết chương trình nhập từ bàn phím 2 số nguyên a, b và một ký tự ch.
Nếu: ch là “+“ thì thực hiện phép tính a + b,
ch là “–“ thì thực hiện phép tính a – b,
ch là “*” thì thực hiện phép tính a * b,
ch là “/” thì thực hiện phép tính a / b (với điều kiện b <> 0), ch không thuộc
những ký hiệu trên thì thơng báo nhập sai.
u cầu kỹ thuật:
+ Chương trình được viết bởi ít nhất 6 hàm (kể cả hàm main()).
+ Kết quả in ra màn hình.
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void swap(char &a, char &b){
char temp = a; a = b; b = temp;
}
Nhóm 5


GV giảng dạy: Cao Thanh Xuân 13


void sortNumber(char s[]){
char a[100];
int n = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] >= '0' && s[i] <= '9'){
a[n] = s[i];
n++;
}
}
for(int i = 1; i < n; i++){
for(int j = 0; j < n-1; j++)
if(a[j] > a[j+1]) swap(a[j], a[j+1]);
}
n = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] >= '0' && s[i] <= '9'){
s[i] = a[n];
n++;
}
}
}
int main()
{
char s[100];
printf("Moi ban nhap vao 1 chuoi bat ki: ");
gets(s);

sortNumber(s);
cout<<"\nChuoi sau khi duoc sap xep la : ";
puts(s);
getch();
return 0;

}
Bài 2. Viết chương trình tính giá trị của xy, với x, y là 2 số nguyên (0<= x, y <= 10).
Yêu cầu kỹ thuật:
- Dữ liệu nhập từ bàn phím, kết quả in ra màn hình.
- Xây dựng đúng 3 hàm (kể cả hàm main()).
- Có kiểm tra điều kiện nhập (Gợi ý: sử dụng cấu trúc do … while
để kiểm tra)
#include <iostream>
#include <fstream>
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int luythua(int x, int y){
return pow(x,y);
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 14


}
int kiemtra(int x, int y){
if((x<0)or(x>10))
{

cout<<"\nx phai >=0 va <= 10";
return 1;
}
if((y<0)or(y>10))
{
cout<<"\ny phai >=0 va <=10";
return 1;
}
}
int main(){
int x, y, lt;
do{
cout<<"\n\t\6 Nhap x: "; cin>>x;
cout<<"\n\t\6 Nhap y: "; cin>>y;
}while(kiemtra(x, y));
lt=luythua(x, y);
cout<getch();
return 0;

}
Bài 3. Viết chương trình tìm tổng các chữ số của một số nguyên dương cho trước.
- Input: tập tin „tongchuso.inp‟, trong tập tin chỉ gồm một số nguyên dương n
(0<= n <= 2 tỷ).
- Output: tập tin „tongchuso.out‟, chỉ chứa một số nguyên duy nhất là tổng của
các chữ số tính được.
Yêu cầu kỹ thuật:
- Xây dựng đúng 3 hàm (kể cả hàm main()).
- Có kiểm tra điều kiện nhập (Gợi ý: sử dụng cấu trúc do … while để kiểm tra)
#include <fstream>

#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstddef>
#include <cmath>
using namespace std;
void taoFile()
{
int n;
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 15


ofstream FileOut;
do
{
printf("\n\t\5 Nhap vao so nguyen duong n: ");
scanf("%d", &n);
if (n < 0)
printf("Du kien khong dung. Moi ban nhap lai!\n");
} while (n < 0);
FileOut.open("tongchuso.inp", FileOut.out);
FileOut << n;
FileOut.close();
}
void xuatKetqua()
{

long n;
ifstream FileIn("tongchuso.inp", ios_base::in);
FileIn >> n;
FileIn.close();
int s=0;
do
{
s=s+n % 10;
n=n/ 10;
} while (n>0);
ofstream FileKetqua("tongchuso.out", ios_base::out);
FileKetqua << s;
FileKetqua.close();
}
int main()
{
taoFile();
xuatKetqua();
printf("Da tinh xong. Moi ban xem ket qua o file tongchuso.out");
getch();
return 0;

}
Bài 4. Viết chương trình tìm các số nguyên tố trong khoảng từ m đến n cho
trước, với m và n là các số nguyên dương (1 < m,n < 255).
- Input: tập tin „timnguyento.inp‟, trong tập tin chứa số m và n, cả hai số
cùng nằm trên một dịng, cách nhau ít nhất một khoảng trắng.
- Output: tập tin „timnguyento.out‟, trong tập tin là danh sách các số nguyên tố
tìm được, các số cách nhau ít nhất một khoảng trắng.
Nhóm 5


GV giảng dạy: Cao Thanh Xuân 16


Trường hợp khơng tìm được số ngun tố nào thì trong tập ghi câu “khơng có số
ngun tố”.
u cầu kỹ thuật:
- Xây dựng ít nhất 3 hàm (kể cả hàm main()).
- Có kiểm tra điều kiện nhập (Gợi ý: sử dụng cấu trúc do … while để kiểm tra)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cstddef>
#include <cmath>
#include <conio.h>
#include <stdio.h>
using namespace std;
void taoFile();
void docFile(int &, int &);
void xuatFile(int, int);
bool isNguyento(int);
void timNguyento();
int main()
{
taoFile();
timNguyento();
system("pause");
getch();
return 0;

}
void taoFile()
{
srand(time(NULL));
ofstream FileOut;
int m = 0, n = 0;
m = 2 + rand() % (253);
n = 2 + rand() % (253);
FileOut.open("timnguyento.inp", FileOut.out);
FileOut << m << " " << n;
FileOut.close();
}
void docFile(int &m, int &n)
{
ifstream FileIn;
FileIn.open("timnguyento.inp", FileIn.in);
if (FileIn.fail())
{
cout << "Khong tim thay file timnguyento.inp" << endl;
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 17


return;
}
else
{
while (!FileIn.eof())
{

FileIn >> m >> n;
}
}
FileIn.close();
}
void xuatFile(int m, int n)
{
ofstream FileOut;
FileOut.open("timnguyento.out", FileOut.out);
if (m < n)
{
for (int i = m + 1; i < n; ++i)
{
if (isNguyento(i))
{
FileOut << i;
if (i < n)
FileOut << " ";
}
}
}
else
{
FileOut << "\nKhong co so nguyen to";
}
FileOut.close();
}
bool isNguyento(int num)
{
if (num < 2)

return false;
else if (num > 2)
{
for (int i = 2; i <= sqrt(num); ++i)
{
if (num % i == 0)
return false;
}
}
return true;
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 18


}
void timNguyento()
{
int m = 0, n = 0;
docFile(m, n);
cout << "\tTim cac so nguyen to trong khoang tu " << m << " den " << n <<
endl;
xuatFile(m, n);
cout << "\nDa tim xong. Moi ban xem ket qua o file timnguyento.out" << endl;

}
Bài 5: Viết chương trình nhập vào một chuỗi bất kỳ. Hãy sắp xếp lại các
chữ số trong chuỗi theo thứ tự tăng dần (nếu có), các chữ cái và ký tự
khác giữ nguyên.
Yêu cầu kỹ thuật:

- Dữ liệu nhập từ bàn phím, kết quả xuất ra màn hình
- Xây dựng đúng 3 hàm (kế cả hàm main()).
#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
void swap(char &a, char &b){
char temp = a; a = b; b = temp;
}
void sortNumber(char s[]){
char a[100];
int n = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] >= '0' && s[i] <= '9'){
a[n] = s[i];
n++;
}
}
for(int i = 1; i < n; i++){
for(int j = 0; j < n-1; j++)
if(a[j] > a[j+1]) swap(a[j], a[j+1]);
}
n = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] >= '0' && s[i] <= '9'){
s[i] = a[n];
n++;
}
}

}
int main()
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 19


{
char s[100];
printf("Moi ban nhap vao 1 chuoi bat ki: ");
gets(s);
sortNumber(s);
cout<<"\nChuoi sau khi duoc sap xep la : ";
puts(s);
getch();
return 0;

}
Bài 6: Tìm tất cả các số có 3 chữ số abc sao cho tổng lập phương của các chữ số
thì bằng chính số đó (abc = a3 + b3 + c3)
u cầu kỹ thuật:
- Dữ liệu nhập từ bàn phím, kết quả xuất ra màn hình
- Xây dựng ít nhất 2 hàm (kế cả hàm main()).
#include <stdio.h>
#include <conio.h>
int mu3(int n)
{ int m=n,tong=0;
while(m!=0)
{ int k=m%10;
tong+=k*k*k;

m/=10;
}
if(tong==n) return 1;
return 0;
}
int main()
{
printf("Cac so can tim la: ");
for(int i=100;i<=999;i++)
if(mu3(i)) printf("%3d ",i);
getch();
return 0;

}
Bài 7. Nhập dữ liệu cần thiết (số tờ, số mặt, loại giấy) và tính tiền khách phải trả,

biết bảng giá tiền photo như sau:
Số lượng

Khổ giấy A4
Khổ giấy A3
1 mặt
2 mặt
1 mặt
2 mặt
1 – 100 tờ
150 đ/tờ
250 đ/tờ
280đ/tờ
530 đ/tờ

Trên 100 tờ
120 đ/tờ
230 đ/tờ
250 đ/tờ
500 đ/tờ
Dữ liệu vào từ tệp “photoinp.dat”. Trong tệp có 3 dòng, dòng thứ 1 chứa số tờ,
dòng 2 chứa số mặt, dòng còn lại chứa loại giấy (loại giấy chỉ gồm một trong hai
số 3 hoặc 4 – tương ứng cho A3 và A4). Kết quả ra vừa lưu vào tệp có tên
Nhóm 5

GV giảng dạy: Cao Thanh Xuân 20


“photoout.dat” vừa in ra màn hình.
Yêu cầu kỹ thuật:
- Nhập và xuất trên tập tin
- Viết đúng 3 hàm (kể cả hàm main()).
#include <stdio.h>
#include <conio.h>
void taoFile();
void xuatFile(int);
void tinhTien();
int main()
{
taoFile();
tinhTien();
getch();
return 0;
}
void taoFile()

{
int soTo = 0, soMat = 0, loaiGiay = 0;
do
{
printf("Nhap vao so to: ");
scanf("%d", &soTo);
if (soTo < 0)
printf("So to khong dung. Moi ban nhap lai\n");
} while (soTo < 0);
do
{
printf("\nNhap vao so mat (1: Mot mat, 2: Hai mat): ");
scanf("%d", &soMat);
if (soMat < 1 || soMat > 2)
printf("So mat khong dung. Moi ban nhap lai\n");
} while (soMat < 1 || soMat > 2);
do
{
printf("\nNhap vao loai giay can pho(3: A3, 4: A4): ");
scanf("%d", &loaiGiay);
if (loaiGiay < 3 || loaiGiay > 4)
printf("Loai giay khong dung. Moi ban nhap lai\n");
} while (loaiGiay < 3 || loaiGiay > 4);
printf("\tSo to: %d to\n\tSo mat: %d mat\n\tLoai giay: A%d\n", soTo, soMat,
loaiGiay);
FILE *PhotoInp;
PhotoInp = fopen("photoinp.dat", "w");
fprintf(PhotoInp, "%d\n%d\n%d", soTo, soMat, loaiGiay);
fclose(PhotoInp);
Nhóm 5


GV giảng dạy: Cao Thanh Xuân 21


×