In ra một số kết quả sau: số lượng số âm, tổng sốsố âm, số lượng số dương, tổng số số dương trong mảng.Bài 3: Nhập các phần tử của một ma trận A , in ra ma trận phản chiếu.mxnBài 4: Cho
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH (UEH) TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ
ĐỒ ÁN MÔN HỌC
CƠ SỞ LẬP TRÌNH
GVHD: TS.GVC Nguyễn Quốc Hùng
Nhóm thực hiện: _17_
Phạm Thị Thanh Trúc (Trưởng nhóm)
Tống Thị Tuyết Phượng
Nguễn Nữ Nhân Hậu
Đỗ Thùy Vân
Tp Hồ Chí Minh, Tháng 9 Năm 2023
Trang 2ĐỀ BÀI Bài 1: Giải phương trình trùng phương: ax + bx + c = 04 2
Bài 2: Nhập vào một mảng số nguyên In ra một số kết quả sau: số lượng số âm, tổng số
số âm, số lượng số dương, tổng số số dương trong mảng
Bài 3: Nhập các phần tử của một ma trận A , in ra ma trận phản chiếu.mxn
Bài 4: Cho mảng nhiều chiều gồm có các thông tin liên quan đến khách lưu trú ở khách
sạn Khách gồm các thông tin: họ tên, số ngày ở, số bữa ăn, tiền ở (1 ngày), tiền ăn (1 bữa), phí phục vụ Phân tích và viết chương trình tính tiền trọ khách sạn In hóa đơn tính tiền lên màn hình có mẫu sau:
*********************************************************************** Khách sạn Five Starts
Hóa đơn khách sạn
Qúi Ông(Bà): ???????????????????
Số ngày ở: ????? Số bữa ăn: ?????
Tiền ở: ??????? Tiền ăn: ??????? Phí phục vụ: ??????? Tổng cộng: ???????????????
Hân hạnh phục vụ quý khách
************************************************************************
Trang 3LỜI GIẢI BÀI 1.
1 Phân Tích:
Phương trình trùng phương là phương trình bậc 4 có dạng: ax + bx + c = 0 (1) với a4 2
# 0 Ta có thể phân tích phương trình (1) thành: a(x + b(x ) + c = 0 2)2 2
Để giải phương trình này ta đặt ẩn t = x với điều kiện t ≥ 0 do x ≥ 0 Khi đó, phương2 2 trình ban đầu sẽ trở thành một phương trình bậc hai với ẩn t như sau: at + bt + c = 0 (2).2 Sau khi giải xong phương trình (2) thì sẽ thực hiện so sánh các nghiệm của phương trình (2) với điều kiện t ≥ 0 có thỏa mãn điều kiện hay không Khi tìm được các giá trị t đảm bảo thỏa mãn điều kiện ban đầu, ta sẽ từng bước tìm được các nghiệm x tương ứng với phương trình và chỉ cần tiếp tục giải phương trình bậc hai với ẩn x để tìm ra tập nghiệm của phương trình (1) là hoàn thành
INPUT: các tham số a, b, c được nhập từ bàn phím
OUTPUT: tập nghiệm của phương trình ax + bx + c = 0.4 2
2 Thuật Toán:
a) Mô Tả Thuật Toán:
Bước 1: Yêu cầu người dùng nhập các tham số a,b,c Giải phương trình bậc hai có dạng
at2 + bt + c = 0 được đưa về từ phương trình trùng phương ax + bx + c = 0.4 2
Bước 2: Giải phương trình và in kết qủa các nghiệm của phương trình: kiểm tra a và chia
ra các trường hợp nếu có của phương trình sau đó giải và in số nghiệm x1, x , x2 3, x4 vừa tìm được
Bước 3: Xét trường hợp, khi a = 0 phương trình sẽ trở thành phương trình bậc nhất bt + c
= 0 và kiểm tra và biện luận các trường hợp sau :
b = 0 && c = 0 thì chương trình sẽ in ra “Phương trình có vô số nghiệm”
b == 0 && c!=0 thì chương trình sẽ in ra “Phương trình vô nghiệm”
c != 0 thì giải chương trình như phương trình bậc nhất, bằng cách: tính t = −bcvà kiểm tra t Nếu t≥0 thì phương trình in ra 2 nghiệm x , x là 1 2 ± √ và ngược lại sẽ in
ra màn hình “Phương trình vô nghiệm”
Bước 4: Xét trường hợp, khi a != 0 thì giải chương trình bậc hai: at + bt + c = 0.2 Tính đenta ∆= b*b - 4*a*c và kiểm tra các trường hợp của ∆có thể xảy ra:
Nếu ∆ < 0 thì chương trình in ra “phương trình vô nghiệm”
Nếu ∆ == 0 thì thực hiện tính nghiệm kép t = t = 1 2
−b
2 a sau đó kiểm tra t nếu t≥0 thì phương trình in ra 2 nghiệm x1,x2 là ± √ và ngược lại nếu không thỏa mãn điều kiện sẽ in ra “Phương trình vô nghiệm”
Trang 4 Trong trường hợp, ∆ > 0 thì thực hiện tính 2 nghiệm t , t với t = 1 2 1
−b+√ ∆
2 và t =2
−b−√ ∆
2 Sau đó, chương trình sẽ kiếm tra t và t có thỏa mãn điều kiện t ≥ 0 ban1 2 đầu không và phân chia các trường hợp của t và t để in ra nghiệm x , x , x , x 1 2 1 2 3 4
một cách phù hợp nhất theo những điều kiện ban đầu
S
Đ S
Đ
Đ
S
Nhập a, b, c Bắt đầu
a = 0
t = x2
at2 + bt + c = 0
∆= b2 – 4ac
∆ < 0
nghiệm
Phương trình có
vô số nghiệm
Too long to read on your phone? Save to
read later on your computer
Save to a Studylist
Trang 5
S
Đ Đ
S
nghiệm
x1 = √−c
b , x2 =
-√−c b
Phương trình vô nghiệm
Phương trình có 2
nghiệm: t =1
−b+√ ∆
2 , t =2
b √
Phương trình có nghiệm kép: t = t1 2
= −2 ab
t ≥ 0
x1 = √ t , x = -2 √ t
t ≥ 0 và1
t2 ≥ 0
t1 ≥ 0 và
t2 < 0
x1 = √ t 1 , x2 = - √ t 1 , x3 = √ t 2 , x = -4 √ t 2
Phương trình vô nghiệm
Trang 6\c) Mã Nguồn:
using System;
using System.Text;
classbt1
{
static public void Main()
{
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
Console.WriteLine("Hãy nhập 3 tham số a,b,c của phương trình trùng phương:"); double a, b, c, t1, t2, denta;
double x1, x2, x3, x4;
a = double.Parse(Console.ReadLine());
b = double.Parse(Console.ReadLine());
c = double.Parse(Console.ReadLine());
x1 = √ t 1 x2 = −√ t 1
Kết thúc
t1 < 0 và
t2 ≥0
x1 = √ t 2 x2 = −√ t 2
t1 < 0 và
t2 ¿0
Phương trình vô
nghiệm
Trang 7(a == 0)if
{
(b == 0 && c == 0) Console.Write(if "Phương trình vô số nghiệm");
else if (b == 0 && c != 0) Console.WriteLine("phương trình vô nghiệm"); else
{
t1 = -c / b;
(t1 > 0)if
{
x1 = Math.Sqrt(t1);
x2 = Math.Sqrt(t1) * -1;
Console.WriteLine("Nghiệm của phương trình là x1 = " + x1 + "; x2 = " + x2); }
(t1 == 0) Console.Write(if "Nghiệm của phương trình là x1 = x2 = 0"); else Console.Write("Phương trình vô nghiệm");
}
}
else
{
denta = b * b - 4 * a * c;
(denta < 0) Console.WriteLine(if "phương trình vô nghiệm");
else if (denta == 0)
{
t1 = t2 = -b / 2 * a;
(t1 < 0) Console.WriteLine(if "phương trình vô nghiệm");
else if (t1 == 0) Console.Write("Nghiệm của phương trình là x1 = x2 = 0"); else
{
x1 = Math.Sqrt(t1);
x2 = Math.Sqrt(t1) * -1;
Console.Write("Nghiệm của phương trình là x1 =" + x1 + "; x2 = " + x2); }
}
else
{
t1 = (-b + Math.Sqrt(denta)) / (2 * a);
t2 = (-b - Math.Sqrt(denta)) / (2 * a);
(t1 < 0 && t2 < 0)if
{
Console.WriteLine("phương trình vô nghiệm");
}
(t1 > 0)if
{
x1 = Math.Sqrt(t1);
x2 = Math.Sqrt(t1) * -1;
Console.Write("Nghiệm của phương trình là x1 =" + x1 + "; x2 = " + x2);
Trang 8}
(t1 == 0)if
{
x1 = x2 = 0;
Console.Write("Nghiệm của phương trình là x1 = x2 = " + x1);
}
(t2 > 0)if
{
x3 = Math.Sqrt(t2);
x4 = Math.Sqrt(t2) * -1;
(t1 >= 0) Console.WriteLine(if "; x3 = " + x3 + "; x4 = " + x4);
else Console.WriteLine("Nghiệm của phương trình là x1 =" + x3 + "; x2 = " + x4); }
(t2 == 0)if
{
x3 = x4 = 0;
(t1 >= 0) Console.WriteLine(if " x3 = x4 = " + x3);
else Console.WriteLine("Nghiệm của phương trình là x1 = x2 = " + x4);
}
}
}
}
}
BÀI 2.
1 Phân Tích:
Để có thể giải quyết bài tập này, trước tiên cần sử dụng vòng lặp lần lượt duyệt qua n
số, nếu đó là một số nguyên âm thì tiến hành cộng vào biến tổng âm đồng thời biến tính
số âm sẽ tăng thêm 1 Ngược lại, nếu đó là một số nguyên dương thì sẽ thực hiện cộng vào biến tổng dương và lúc này số số dương cũng sẽ tăng thêm 1 Ngoài ra, nếu trong n
số nhập vào có số 0 là một số không âm không dương thì sẽ không thực hiện câu lệnh nào cả
INPUT: Mảng n số nguyên được nhập từ người dùng
OUTPUT: số lượng số âm, tổng số số âm, số lượng số dương, tổng số số dương trong mảng.
2 Thuật Toán:
a) Mô Tả Thuật Toán:
Bước 1: Khai báo các biến cần thiết trong chương trình và thực hiện gán giá trị ban đầu cho tổng âm, tổng dương, số số âm và số số dương bằng 0
Trang 9Bước 2: Yêu cầu người dùng nhập các số nguyên n sau đó tạo thành mảng có n phần tử Bước 3: Sử dụng vòng lặp for để lặp n lần Yêu cầu người dùng nhập phần tử thứ i với i = 1,2,…,n từ bàn phím cho mảng đồng thời thực hiện kiểm tra phần thứ a[i], nếu:
a[i] > 0 thì biến tổng dương thêm một lượng là a[i] và biến đếm số dương sẽ tăng lên 1
a[i] < 0 thì biến tổng âm tăng thêm một lượn là a[i] đồng thời biến đếm số âm tăng thêm 1
a[i] = 0 thì chương trình không làm gì cả vì số 0 là một số không âm không dương Bước 4: Kết thúc vòng lặp và in ra màn hình các thông số theo đúng yêu cầu của đề bài gồm có: số lượng số âm, tổng số số âm, số lượng số dương, tổng số số dương
b) Mã Nguồn:
using System;
using System.Text;
using System.Threading;
classbt2
{
static void Main()
{
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
demam = 0, demduong = 0, tongam = 0, tongduong = 0;int
Console.WriteLine("Nhập số phần tử của mảng");
n = Parse(Console.ReadLine()); int int // 1 2 3 4 -3 -5 -2
[] mang = int new int [n];
for int ( i = 0; i < n; i++)
{
Console.WriteLine("Nhập phần tử thứ " + i);
mang[i] = int.Parse(Console.ReadLine());
(mang[i] < 0)if
{
demam += 1;
tongam += mang[i];
}
(mang[i] > 0)if
{
demduong += 1;
tongduong += mang[i];
}
}
Console.WriteLine("Số lượng số âm: " + demam);
Console.WriteLine("Tổng số số âm: " + tongam);
Console.WriteLine("Số lượng số dương: " + demduong);
Console.WriteLine("Tổng số số dương: " + tongduong);
Trang 10}
}
BÀI 3
1 Phân Tích:
Để thực hiện đề bài này, trước hết cần yêu cầu người dùng nhập kích thước ma trận, nếu kích thước ma trận không phải là một ma trận vuông thì in ra màn hình ma trận không hợp lệ vì trong đại số tuyến tính, ma trận phản chiếu hay ma trận đối xứng được định nghĩa là một ma trận vuông và bằng chính ma trận chuyển vị của nó Điều này đồng nghĩa với việc trước hết để tồn tại tính phản chiếu, ma trận khởi tạo phải thỏa mãn điều kiện là một ma trận vuông có dạng Anxn
Người dùng cần nhập vào kích cỡ kiểu số nguyên int cụ thể (m: số dòng, n: số cột) của ma trận Dựa vào kích cỡ đã nhập, hệ thống tiến hành so sánh m và n Nếu giá trị của m khác n nghĩa là ma trận không thỏa điều kiện nên không tồn tại ma trận phản chiếu; ngược lại nếu giá trị của m bằng n thì tồn tại ma trận phản chiếu và tiếp tục chương trình Nhằm mục đích in ra ma trận phản chiếu, mảng hai chiều được khởi tạo
để lưu trữ dữ liệu Các phần tử trong mảng hai chiều được truy xuất thông qua hai chỉ
số phần tử tương ứng với số dòng m và số cột n của ma trận (ma trận vuông nên giá trị m, n bằng nhau, vì vậy có thể sử dụng n, n để thay thế)
Áp dụng cấu trúc vòng lặp for lồng nhau để nhập xuất dữ liệu cho phép người dùng nhập vào lần lượt các mục trong ma trận Vì mỗi phần tử của một ma trận phản chiếu thì đối xứng qua đường chéo, người dùng chỉ cần nhập giá trị aij tại các vị trí trong tam giác dưới của ma trận (j ≤ i), chương trình sẽ tạo ra một ma trận phản chiếu hoàn chỉnh Cuối cùng, vì là ma trận phản chiếu nên suy ra aij = aji, gán giá trị aij vào aji và sử dụng vòng lặp for lồng nhau để xuất ra màn hình ma trận phản chiếu
2 Thuật Toán
a) Mô Tả Thuật Toán:
Bước 1: Chương trình yêu cầu người dùng nhập vào kích thước m,n ma trận có phải là
ma trận vuông không, nếu không thì in ra “ma trận không phù hợp để có ma trận phản chiếu” và nếu có thì sẽ tiếp tục thực hiện những câu lệnh tiếp theo
Bước 2: Sử dụng hai vòng lặp for lồng nhau Vòng lặp ngoài dùng để duyệt chỉ số hàng (i<n) và vòng trong duyệt chỉ số cột (j<=i) để người dùng nhập các phần tử ở tam giác dưới (kể cả đường chéo chính)
Bước 3: Tiếp tục sử 2 vòng lặp như trên để gán gía trị cho các phần tử đối xứng qua đường chéo chính (A[j,i] = A[i,j]) Đối với phần tử được gán sẽ được duyệt cột ở ngoài
Trang 11và duyệt dòng bên trong Đối với phần tử gán thì sẽ được duyệt dòng bên ngoài và duyệt cột bên trong
Bước 4: Sử dụng 2 hai vòng lặp lồng nhau để in từng phần tử của ma trận vừa có được bằng cách duyệt chỉ số dòng (i<n) ở vòng ngoài và duyệt chỉ số cột (j<n) ở vòng lặp bên trong
b) Mã Nguồn:
using System;
using System.Text;
using System.Threading;
classbt3
{
static void Main()
{
Console.InputEncoding = Encoding.Unicode;
Console.OutputEncoding = Encoding.Unicode;
Console.WriteLine("Nhập kích thức của ma trận Amxn ");
m = int int.Parse(Console.ReadLine());
n = int int.Parse(Console.ReadLine());
[,] matrix = int new int [m, n];
(m != n || m <= 0 || n <= 0) Console.WriteLine(if "Kích thước của mảng không thích hợp để tồn tại ma trận phản chiếu.");
else
{
Console.WriteLine("Hãy nhập phần tử của ma trận (chỉ cần nhập phần tử ở tam giác dưới
kể cả đường chéo chính của ma trận)");
for int ( i = 0; i < m; i++)
{
for int ( j = 0; j <= i; j++)
{
Console.WriteLine("Nhập giá trị A{0}{1} của ma trận ", i, j);
matrix[i, j] = int.Parse(Console.ReadLine());
}
}
for int ( i = 0; i < n; i++)
{
for int ( j = 0; j <= i; j++)
{
matrix[j, i] = matrix[i, j];
}
}
Console.WriteLine("Ma trận Amxn thoả mãn yêu cầu đề bài là:");
for int ( i = 0; i < m; i++)
{
for int ( j = 0; j < n; j++)
{
Trang 12Console.Write(matrix[i, j] + " ");
}
Console.WriteLine("\n");
}
}
}
}
PHẦN 4:
Cho mảng nhiều chiều gồm có các thông tin liên quan đến khách lưu trú ở khách sạn Khách gồm các thông tin: họ tên, số ngày ở, số bữa ăn, tiền ở (1 ngày), tiền ăn (1 bữa), phí phục vụ Phân tích và viết chương trình tính tiền trọ khách sạn In hóa đơn tính tiền lên màn hình có mẫu sau:
******************************************************************
*****
Khách sạn Five Starts
Hóa đơn khách sạn
Qúi Ông(Bà): ???????????????????
Số ngày ở: ????? Số bữa ăn: ?????
Tiền ở: ??????? Tiền ăn: ??????? Phí phục vụ: ??????? Tổng cộng: ???????????????
Hân hạnh phục vụ quý khách
******************************************************************
*****
1 Phân Tích
Nhập vào số lượng n khách và tạo mảng một chiều để chứa tên n các vị khác đó mảng 2 chiều gồm 2 hàng 2 cột để chứa thông tin như bảng sau:
Dùng vòng lặp n lần để in ra n hoá đơn của n khác hàng trong mỗi vòng lặp gồm các yêu cầu: người dùng nhập lần lượt số ngày ở, tiền ở (1 ngày); số bữa ăn, số tiền ăn (1 bữa) sau
đó tính toán tổng số tiền ăn, ở và tổng tiền thanh toán (bao gồm phí dịch vụ) sau đó in hoá đơn ứng với mỗi khách hàng
Trang 13INPUT: Cho mảng nhiều chiều gồm có các thông tin liên quan đến khách lưu trú ở khách sạn Khách gồm các thông tin: họ tên, số ngày ở, số bữa ăn, tiền ở (1 ngày), tiền ăn (1 bữa), phí phục vụ
OUTPUT: hoá đơn tính tiền của các vị khách
2 Thuật Toán
a) Mô Tả Thuật Toán
Bước 1: Yêu cầu người dùng nhập số n khách cần in hoá đơn, tạo mảng kiểu string n phần tử để chứa tên khách hàng sau đó yêu cầu người dùng nhập tên của từng khách hàng
Bước 2: Tạo mảng kiểu int hai chiều gồm 2 hàng và 2 cột chứa các giá tiền, số ngày (bữa) của từng dịch vụ theo quy tắc:
A[0,0] số ngày ở
A[1,0] tiền ở 1 ngày
A[0,1] số bữa ăn
A[1,1] tiền ăn 1 bữa
Bước 3: Sử dụng vòng lặp for lặp n phần tử ứng với n khách hàng để in hoá đơn từng khách hàng Nội dung mỗi lần lặp bao gồm:
Sử dụng hai vòng lặp for để yêu cầu người dùng nhập các chỉ số vào mảng hai chiều theo thứ tự và quy tắc trên sau đó yêu cầu người nhập thêm phí dịch vụ
Tính tổng tiền ăn = A[0,0] (số ngày ở) * A[1,0] (tiền 1 ngày ở)
Tính tổng tiền ở = A[0,1] (số bữa) * A[1,1] (tiền ăn 1 bữa)
Tính tổng tiền thanh toán = tổng tiền ăn + tổng tiền ở + phí dịch vụ
Sử dụng các câu lệnh in và định dạng để tạo và in hoá đơn gồm các phí cần thanh toán của khách hàng theo mẫu của đề bài