Bước 3: Dùng vòng lặp for nhập lần lượt từng số nguyên từ đầu đến cuối.Bước 4: Dùng vòng lặp for lồng để so sánh từ đầu đến cuối từng phần tử, phần tử lớn hơn được gán vào biến max... d,
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN
MÔN CƠ SỞ LẬP TRÌNH
ĐỀ SỐ 32
Sinh viên thực hiện: Lê Tiến Đạt
Lớp: 2110A04
Hà Nội, năm 2021
1
Trang 2MỤC LỤC
Bài 01: 3
Bài 02: 4
Bài 03: 7
Bài 04: 8
Bài 05: .11
Bài 06: .13
Bài 07: .15
Bài 08: .19
Bài 09: .23
Bài 10: .28
Trang 31 Input: số nguyên n.
2 Output: số chữ số của số nguyên n, tổng các chữ số của số nguyên n.
3 Process: xác định sơ đồ thuật giải
*Đếm số chữ số:
Trang 5trung bình nhân = (a*b*c)/3
3 Process: xác định sơ đồ thuật giải
* Tính trung bình cộng:
Tính trung bình nhân:
Trang 64 Test: lập bảng có cả Input và Output tương ứng
cout<<"Nhap so thu nhat: "<<endl; cin>> a;
cout<<"Nhap so thu hai: "<<endl; cin>> b;
cout<<"Nhap so thu ba: "<<endl; cin>> c;
tbc=(a+b+c)/3;
tbn=(a*b*c)/3;
cout<<"Trung binh cong cua 3 so "<<a<<", "<<b<<", "<<c<<" la: "<<tbc<<endl;cout<<"Trung binh nhan cua 3 so "<<a<<", "<<b<<", "<<c<<" la: "<<tbn<<endl; return0;
}
* Kết quả:
Trang 7Bài 03:
Viết chương trình nhập hai số nguyên từ bàn phím In ra tổng, tích, hiệu và thương của 2 số đó
1 Input: Số nguyên a, số nguyên b.
2 Output: Tổng, tích, hiệu, thương hai số a và b.
3 Process: Các bước thực hiện chương trình
+Bước 1: Khai báo biến: a, b, tổng, tích, hiệu, thương
cout<<"Nhap so nguyen thu nhat: ";cin>>a;
cout<<"Nhap so nguyen thu hai: ";cin>>b;
cout<<"\nTong hai so "<<a<<" va "<<b<<" la: "<<a<<" + "<<b<<" = "<<a+b<<endl;
cout<<"Tich hai so "<<a<<" va "<<b<<" la: "<<a<<" * "<<b<<" = "<<a*b<<endl;
cout<<"Hieu hai so "<<a<<" va "<<b<<" la: "<<a<<" - "<<b<<" = "<<a-b<<endl;
cout<<"Thuong hai so "<<a<<" va "<<b<<" la: "<<a<<" : "<<b<<" = "<<a/b<<endl; return 0;}
5.Test:
Trang 9Bước 3: Dùng vòng lặp for nhập lần lượt từng số nguyên từ đầu đến cuối.
Bước 4: Dùng vòng lặp for lồng để so sánh từ đầu đến cuối từng phần tử, phần tử lớn hơn được gán vào biến max
int *head, *p, *q, n, max; cout <<
"Nhap so phan tu: "; cin >> n;
head = new int[n];
for (p = head; p < head + n; p++)
Trang 11Bài 05:
Viết hàm liệt kê các ước số của n Viết chương trình nhập số nguyên dương n, gọi hàm trên và cho biết kết quả
1 Input: Số nguyên dương n.
2 Output: Danh sách ước số của số nguyên dương n.
3 Process:
Bước 1: Khai báo biến: n
Bước 2: Dùng vòng lặp for xét từ 1 cho đến n, lấy n chia cho từng số Bước 3:
In các số mà n chia hết trong Bước 2 ra màn hình
}
int main(){
int n;
cout<<"Nhap so nguyen duong n: "; cin>>n;
cout<<"Cac uoc so cua so nguyen duong n la : "<<endl;
lietkeuocso(n);
return 0;
}
Trang 125 Test:
Trang 13Bước 3: Dùng vòng lặp for xét từ đầu đến cuối chuỗi, nếu tìm thấy kí tự thì xóa đi Bước 4:x
In ra chuỗi sau khi xóa kí tự x
n ;
}}
}
int main(){
char a[50]; char x;
cout<<"Nhap chuoi: "; fgets(a,
sizeof(a)+1, stdin);
Trang 14cout<<"Chuoi ki tu vua nhap la:"<<endl;
Trang 15d, Cho biết giá trị nhỏ nhất của mảng số nguyên
e, Tìm kiếm một phần tử x nào đó trong mảng các số nguyên
f, Sắp xếp các phần tử của mảng các số nguyên theo thứ tự giảm dầnViết chương trình chính Áp dụng lần lượt các hàm trên
- Dùng vòng lặp for xét từ đầu đến cuối mảng
Trang 16- Chia từng phần tử cho 2, mỗi phần tử chia cho 2 bị dư sẽ tăng dem lên 1 đơn vị.
- in ra dem.d) - Khai báo biến min
- Dùng vòng for lồng xét từ đầu đến cuối mảng, so sánh các phần tử, phần tử bé hơn thì gán vào biến min
- In ra min.e) - nhập phần tử cần tìmx
- Dùng vòng for xét từ đầu đến cuối mảng, in ra những vị trí của những phần tửtrùng vs x
f) - Dùng vòng for lồng xét từ đầu đến cuối mảng, so sánh các phần tử với nhau rồisắp xếp theo thứ tự giảm dần
cout<<"\n\nGia tri nho nhat trong mang la: "<<min<<endl;
}
void timx(int n,int a[],int x){ for(int
i=0;i<n;i++)
if(a[i]==x){
Trang 17cout<<" So "<<x<<" nam o vi tri a["<<i<<"] ";
}
}
void sapxep(int n, int a[],int tg){
cout<<"\n\nMang cac so nguyen sau khi sap xep theo thu tu giam dan la: "<<endl; for(int i=0; i<n-1;i++){
}
}
int main(){
int n,x,tg; int a[50];
int dem=0; int min;
cout<<"Nhap so phan tu cua mang: "; cin>>n;
Trang 19Bài 08:
Viết các hàm thực hiện công việc sau:
a Nhập ma trận số nguyên kích thước n*m
b Hiện ma trận vừa nhập ra màn hình
c Hiện ra hàng có số lượng phần tử âm nhiều nhất
d Kiểm tra một số chính phương
e Liệt kê vị trí (dạng (i, j)) của các phần tử là số chính phương trong ma trận
f Đếm số lượng phần tử có giá trị bằng phần tử tại vị trí (0,0) của ma trận Viết chương trình chính Áp dụng lần lượt các hàm trên
Trang 20-Khai báo biến dem
-Dùng for lồng chạy từ đầu đến cuối mảng
-So sánh từng phần tử với phần tử đầu tiên
-Mỗi lần xuất hiện dấu bằng thì dem tăng lên 1
void hienmt(int a[MAX][MAX],int n, int m){ for(int
void ammax(int a[MAX][MAX],int n, int m){
int max = 0, k, dem, vt;
for(int i = 0; i < n; i ++){
Trang 21void chinhphuong(int a[MAX][MAX],int n, int m){ cout<<"So chinh
phuong co trong ma tran la: "<<endl; for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(sqrt(a[i][j])*sqrt(a[i][j])==a[i][j]){
cout<<"a["<<i<<"]["<<j<<"]: "; cout<<a[i][j]<<endl;}
}}
cout<<"\nCo "<<dem-1<<" phan tu co gia tri bang phan tu tai vi tri a[0][0] trong ma tran"<<endl;
}
int main(){
int a[MAX][MAX];
int n,m; int dem;
cout<<"Nhap so hang: ";cin>>n;
cout<<"\nNhap so cot: ";cin>>m;
nhapmt(a,n,m);
Trang 22cout<<"\nMa tran vua nhap la: "<<endl; hienmt(a,n,m);
Trang 23Bài 09:
Viết các chương trình con thực hiện các công việc sau:
a nhập danh sách các sách gồm các thông tin: tên sách, tên tác giả, nhà xuất bản, năm xuất bản và lưu vào tệp sach.dat;
b hiện danh mục sách từ tệp sach.dat với đầy đủ các thông tin;
c nhập tên sách từ bàn phím, tìm sách vừa nhập và in các thông tin chi tiết ra màn hình;
d thống kê số lượng sách của thập niên 80
e cho biết tên các quyển sách đã xuất bản cách đây 30 năm
Viết chương trình chính để gọi các chương trình con đã được viết theo trật tự như trên
Trang 24d.số lượng sách của thập niên 80
e.tên sách xuất bản cách đây 30 năm
3 Process:
a
-Tạo struct gồm các thông tin sách cần nhập
- Nhập số lượng sách ( )n
-Dùng vòng lặp for nhập lần lượt thông tin từng quyển sách
-Mở file sach.dat rồi tiến hành ghi dữ liệu vừa nhập vào file dưới dạng nhị phân.b
-Đọc file sach.dat rồi in ra danh sách sách vừa nhập
c
-Khai báo 1 biến chuỗi kí tự để nhập vào tên sách cần tìm
-Dùng vòng for so sánh chuỗi đó với lần lượt từng tên sách trong danh sách
-In ra thông tin các sách có tên trùng với chuỗi kí tự vừa
nhập d
-Dùng để tìm ra các sách được xuất bản vào thập kỉ 80 rồi in ra màn hình.If
e
-Dùng để tìm ra các sách được xuất bản vào 30 năm về trước rồi in ra màn hình.If
* Dùng switch () case để tạo menu
void nhap(sach a[],int &n){
cout<<"Nhap so luong sach: ";cin>>n; for(int
Trang 25cout<<left<<setw(15)<<"Ten sach"<<setw(15)<<"Tac gia"<<setw(15)<<"Nha xuatban"<<"Nam xuat ban"<<endl;
cout<<"Thong tin sach can tim"<<endl;
cout<<left<<setw(15)<<"Ten sach"<<setw(15)<<"Tac gia"<<setw(15)<<"Nha xuatban"<<"Nam xuat ban"<<endl;
for( int i=0; i<n; i++)
{ if(strcmp(a[i].tensach,ten) ==
0){
cout<<left<<setw(15)<<a[i].tensach<<setw(15)<<a[i].tentacgia<<setw(15)<<a[i].nhaxb<<a[i].namxb<<endl;
}
}
Trang 26void thongke80(sach a[50],int n){
cout<<"\nDanh sach sach xuat ban vao thap nien 80 la :"<<endl; cout<<left<<setw(15)<<"Ten
sach"<<setw(15)<<"Tac gia"<<setw(15)<<"Nha xuatban"<<"Nam xuat ban"<<endl;
void tensach30(sach a[], int n){
cout<<"\n\nDach sach sach xuat ban vao 30 nam truoc la : "<<endl; cout<<left<<setw(15)<<"Ten
sach"<<setw(15)<<"Tac gia"<<setw(15)<<"Nha xuatban"<<"Nam xuat ban"<<endl;
cout<<"\n=============== MENU ==============="<<endl;
cout<<"1 Nhap thong tin
sach"<<endl; cout<<"2 Hien thong tin
sach"<<endl; cout<<"3 Tim kiem
sach"<<endl;
cout<<"4 Thong ke sach cua thap nien 80"<<endl;
cout<<"5 Sach xuat ban cach day 30 nam"<<endl;
cout<<"0 Thoat chuong trinh"<<endl;
cout<<"\nMoi chon: ";
cin>>chon;
switch(chon){
case 1: nhap(a,n); ghif("sach.dat",a,n); break;
case 2: docf("sach.dat",a,n); break; case 3:
timsach(a,n); break;
case 4: thongke80(a,n); break; case 5:
tensach30(a,n); break; case 0: break;
Trang 27default: cout<<"Lua chon khong hop le!"<<endl;}
} while(chon!=0); return
0;
}
5 Test:
Trang 28Bài 10:
Viết các chương trình con thực hiện các công việc sau:
a nhập danh sách sinh viên gồm các thông tin: mã sinh viên, tên sinh viên, ngày sinh, giới tính, điểm trung bình; việc nhập sẽ dừng khi nhập mã sinh viên là 0
b hiện danh sách vừa nhập ra màn hình;
c sắp xếp danh sách sinh viên theo thứ tự alphabet của tên sinh viên và ghi vào tệpsv.dat (dạng nhị phân);
d tìm sinh viên nữ có điểm trung bình thấp nhất
e đếm số sinh viên nam
Trang 29Viết chương trình chính để gọi các chương trình con theo trật tự trên.
1.Input:
a danh sách sinh viên
b danh sách sinh viên
c danh sách sinh viên
d danh sách sinh viên
e danh sách sinh viên
2.Output:
a k có
b danh sách vừa nhập
c danh sách đã được sắp xếp
d sinh viên nữa có điểm tb thấp nhất
e số sinh viên nam
3 Process:
a
-Tạo Struct gồm các thông tin sinh viên cần nhập
-Dùng vòng for nhập dữ liệu từng sinh viên một, dùng hàm if ngay sau khi nhập mã sinh viên, nếu mã sinh viên = 0 thì kết thúc luôn quá trình nhập
-Dùng for và để tìm ra những sinh viên là nữif
-So sánh điểm các sinh viên nữ với nhau
-In ra sinh viên có điểm thấp
nhất e
-Khai báo biến dem=0 và 1 xâu kí tự “Nam”
- Dùng for chạy từ đầu đến cuối danh sách
- So sánh phần giới tính của từng người với “Nam”
- Nếu giống nhau thì tăng biến dem lên 1 đơn vị
- In ra dem sau khi kết thúc vòng lặp
* Dùng switch () case để tạo menu
Trang 30cout<<"Nhap thong tin sinh vien thu "<<i+1<<endl;
cout<<"Nhap ma sinh vien: ";
fflush(stdin);
cin>>a[i].masv;
if (t.compare(a[i].masv)==0)break;
}
void hien(sv a[],int &n){
cout<<"\n\t\t\tDANH SACH SINH VIEN "<<endl<<endl;
cout<<left<<setw(15)<<"Ma sinh vien"<<setw(15)<<"Ten sinhvien"<<setw(15)<<"Ngay sinh"<<setw(15)<<"Gioi tinh"<<"Diem TB"<<endl;
for(int i=0;i<n;i++){
cout<<left<<setw(15)<<a[i].masv<<setw(15)<<a[i].tensv<<setw(15)<<a[i].ns<<setw(15)<<a[i].gt<<a[i].dtb<<endl;
}
}
void sx(sv a[], int n){
for( int i=0; i<n-1; i++){
for( int j=i+1; j<n; j++){
if(a[i].tensv.compare(a[j].tensv)>0){
Trang 32cout<<left<<setw(15)<<"Ma sinh vien"<<setw(15)<<"Ten sinh vien"<<setw(15)<<"Ngay sinh"<<setw(15)<<"Gioi tinh"<<"Diem TB"<<endl;
for( int i=0; i<n; i++)
{ if(t.compare(a[i].gt) ==
0){
if(a[i].dtb == tbmin){
cout<<left<<setw(15)<<a[i].masv<<setw(15)<<a[i].tensv<<setw(15)<<a[i].ns<<setw(15)<<a[i].gt<<a[i].dtb<<endl;
}
}
}
}
void demnam(sv a[],int n){ string s
= "Nam"; int dem=0;
for(int i=0;i<n;i++){
if(s.compare(a[i].gt)==0){
dem++;
}} cout<<"\nSo sinh vien nam la: "<<dem<<endl;
}
int main(){
sv a[100]; int n,
chon; do{
cout<<"\n=============== MENU ==============="<<endl;
cout<<"1 Nhap danh sach sinh vien"<<endl;
cout<<"2 Hien danh sach sinh vien"<<endl;
cout<<"3 Sap xep danh sach sinh vien theo alphabet va ghi vao file sinhvien.dat"<<endl;cout<<"4 Sinh vien nu co diem trung binh thap nhat"<<endl;
cout<<"5 Dem so sinh vien nam"<<endl;
cout<<"0 Thoat chuong trinh"<<endl;
Trang 335 Test: