Nhập vào 3 số, biết rằng đó là số đo của 2 cạnh và góc nằm giữa hai cạnh của mộttam giác.. Dùng mảng 1 chiều để lưu số ngày của các tháng trong năm, chương trình nhập tháng t trong phạm
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Ế
Giảng Viên: TS Đặng Ngọc Hoàng Thành
Tp Hồ Chí Minh, Ngày 14 tháng 12 năm 2023
Trang 3ĐỀ BÀIBài 1 Nhập vào 3 số, biết rằng đó là số đo của 2 cạnh và góc nằm giữa hai cạnh của một
tam giác Hãy tính các số đo còn lại (1 cạnh, và 2 góc)
Bài 2 P = n+1 1
√1+n+1
√2+n+1
√3+…+ n+1√n+1Có n+1 dấu căn Trong đó, n là số cuối trong số thứ tự của tên bạn trong danh sách, ví dụ,bạn có số thứ tự là 1, 11, 21, v.v., thì n=1, như yêu cầu đầu tiên
Bài 3 Dùng mảng 1 chiều để lưu số ngày của các tháng trong năm, chương trình nhập
tháng t trong phạm vi từ 1-12, sau đó cho biết số ngày của tháng t
Bài 5 Đọc vào một chuỗi, cắt bỏ những khoảng trống thừa trong chuỗi
Ví dụ S=” Noi vong tay lon - Trinh Cong Son “Kết quả in ra ”Noi vong tay lon - Trinh Cong Son“
Bài 6
CHẴN: theo số thứ tựCho một mảng nhiều chiều gồm thông tin cá nhân của mỗi sinh viên: họ tên, năm sinh,điểm trung bình, xếp loại Giả sử dữ liệu của mảng gồm có ít nhất 5 phần tử Hãy in ratoàn bộ các phiếu điểm theo mẫu như sau:
BẢNG ĐIỂM TỐT NGHIỆPCấp cho sinh viên <họ tên>, năm sinh <năm sinh>.Trong kì thi tốt nghiệp 2021, sinh viên trên đã đạt điểm trung bình là <điểm trung bình>,và được xếp loại <xếp loại> Sinh viên có thứ hạng <???> trong lớp
-Hiệu Trưởng Trường Đại học ABC.Kí tên, Đóng dấu
Trang 4
2 Thuật Toán
a) Mô Tả Thuật Toán
Để tính các số đo còn lại của tam giác khi biết số đo hai cạnh của tam giác và số đo củagóc xen giữa hai cạnh thì chúng em dùng định lý Cosin: c2
=a b2+ 2
−2 ab∗cos ( A) để tínhmột cạnh còn lại, dùng định lý Sin:
Dưới đây là các bước trình bày thuật toán của bài toán trên:
Bước 1: Nhập 2 cạnh và góc xen giữa 2 cạnh của tam giác Khai báo biến cạnh a, b, gócC là double
Bước 2: Khai báo biến double cho cạnh c, góc A và góc B.Bước 3: Đầu tiên chúng em sẽ tính cạnh c với định lý Cosin:
c = Math.Sqrt(a * a + b * b - 2 * a * b * Math.Cos(C*Math.PI/180))trong đó c là số đo cạnh còn lại, Math.Sqrt() là căn bậc 2 của hàm, Math.Cos(C) là cosincủa góc C
Bước 4: Để tính số đo 1 trong 2 góc còn lại chúng em sử dụng định lý Sin:
A
a
b c
Trang 5A = (a * Math.Sin(C * Math.PI / 180) / c) * 180 / Math.PIBước 5: Tính số đo góc còn lại Gọi góc còn lại là B:
B = 180 – A – CBước 6: Cuối cùng xuất ra kết quả các số đo còn lại của tam giác là cạnh c, góc A, B.Bước 7: Kết thúc
Console.WriteLine( "Nhập dữ liệu cạnh a:" ); double a = double Parse(Console.ReadLine());
Begin
EndNhập 2 cạnhvà 1 góc xen
giữa
c = Math.Sqrt(a * a + b * b - 2 * a * b *Math.Cos(C*Math.PI/180))A = (a * Math.Sin(C * Math.PI / 180) / c) * 180 / Math.PI
B = 180 - A - C
Xuất kết quả
Trang 6Console.WriteLine( "Nhập dữ liệu cạnh b:" ); double b = double Parse(Console.ReadLine()); Console.WriteLine( "Nhập dữ liệu góc C:" ); double C = double Parse(Console.ReadLine()); double c, B, A;
c = Math.Sqrt((a * a) + (b * b) - 2 * a * b * Math.Cos(C * Math.PI / 180)); A = (a * Math.Sin(C * Math.PI / 180) / c) * 180 / Math.PI;
B = 180 - A - C; Console.WriteLine( "Đáp án cạnh c là: {0}" , c); Console.WriteLine( "Đáp án góc A là: {0}" , A); Console.WriteLine( "Đáp án góc B là: {0}" , B); Console.ReadLine();
2 Thuật Toán
a) Mô Tả Thuật Toán
Đầu tiên chúng em sẽ phân tích biểu thức dưới mẫu gán cho P và sử dụng vòng lặp for.Với n của nhóm em bằng 6 nên n+1 căn của phương trình là căn bậc 7 Biểu thức sẽ códạng như sau:
P = 7
√1+7
√2+7√3+7
√4+7
√5+7
√6+7√7Bước 1: Nhập số thứ tự của bạn vào n Khai báo biến int n.Bước 2: Gán biểu thức dưới mẫu (double) P và khởi tạo với giá trị P = 0.Bước 3: Khởi tạo int i = n Sử dụng vòng lặp for để tạo ra biểu thức căn lồng căn như đềbài Giá trị chạy từ i trở về 1
Bước 4: Trong máy tính không có hàm căn bậc 7 nên ta sử dụng hàm Math.Pow() để thaythế hàm Math.Sqrt() Biểu thức P = Math.Pow(i + P, (double) 1 / (n + 1)) Ví dụ i = 7, P =0 thì P = 7
1 Tương tự i = 6 thì P = (6+7¿¿71)
Trang 7b) Mã Nguồn
static void Bai2() {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Clear();
Console.WriteLine( "Tính P" ); Console.Write( "Nhập số thứ tự của bạn: " ); int n = int Parse(Console.ReadLine()); double P = 0;
for int ( i = n; i >= 1; i ) {
P = Math.Pow(i + P, ( double )1 / (n + 1)); }
double kq = 1.0 / P; Console.WriteLine( "Tổng của P là: {0}" , kq); Console.ReadLine();
a) Mô Tả Thuật Toán
Bước 1: Tạo mảng một chiều int [] A có 4 phần tử chứa các ngày của tháng.Bước 2: Yêu cầu người dùng nhập tháng muốn tìm Khai báo biến int t.Bước 3: Dùng lệnh switch – case để chọn các tháng từ 1 - 12.Bước 4: Nếu t là số 1, 3, 5, 7, 8, 10, 12 thì chạy phần tử ở vị trí số 3 của mảng A, nếukhông phải thì chạy qua Bước 5
Bước 5: Nếu t là số 4, 6, 9, 11 thì chạy phần tử ở vị trí số 2 của mảng A, nếu không phảithì chạy qua Bước 6
Bước 6: Nếu t là số 2 thì chạy phần tử ở vị trí số 0 và vị trí số 1 của mảng A, nếu khôngphải thì chạy qua Bước 7
Bước 7: Nếu t không thuộc từ 1 12 trong lệnh switch – case thì sẽ in ra dòng chữ:“Nhập sai tháng!!!” và dừng lệnh switch – case
Trang 8Console.Clear(); int [] A = { 28, 29, 30, 31 }; Trolai:
Console.WriteLine( "Nhập tháng bạn muốn tìm:" ); int t = int Parse(Console.ReadLine()); switch (t)
{ case 1: case 3: case 5: case 7: case 8: case 10: case 12: Console.WriteLine( "Tháng {0} có {1} ngày" , t, A[3]); goto Trolai;
case 4: case 6: case 9: case 11: Console.WriteLine( "Tháng {0} có {1} ngày" , t, A[2]); goto Trolai;
case 2: Console.WriteLine( "Tháng {0} có {1} hoặc {2} ngày" , t, A[0], A[1]); goto Trolai;
default : Console.WriteLine( "Nhập sai tháng!!!" ); break ;
} Console.ReadLine(); }
Trang 9a) Mô Tả Thuật Toán
Bước 1: Khởi tạo biến string chuoi.Bước 2: Yêu cầu người dùng nhập vào chuỗi cần xóa khoảng trống thừa.Bước 3: Gán chuỗi nhập từ bàn phím vào chuoi
Bước 4: Hiển thị chuỗi vừa nhập vào ban đầu.Bước 5: Gán chuoi = chuoi.Trim(), cho phép cắt bỏ ký tự trắng ở hai đầu chuỗi.Bước 6: Tạo vòng lặp while (chuoi.IndexOf(“ ”) > 0) Lệnh IndexOf có tác dụng duyệtcác khoảng trắng trong chuỗi, khoảng trắng nào lớn hơn 0 thì sang bước 7
Bước 7: Sử dụng phương thức Replace để thay thế các khoảng trắng:chuoi = chuoi.Replace(“ ”, “ ”)
Bước 8: In chuỗi đã xóa các khoảng trống và kết thúc
b) Mã Nguồn
static void Bai5() {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Clear();
string chuoi; Console.WriteLine( "Nhập vào một chuỗi cần xóa: " ); chuoi = Console.ReadLine();
Console.WriteLine( "Chuỗi ban đầu: " + chuoi); chuoi = chuoi.Trim();
while (chuoi.IndexOf( " " ) > 0) {
chuoi = chuoi.Replace( " " " " , ); }
Console.WriteLine( "Chuỗi sau khi đã xóa khoảng trống: " + chuoi); Console.ReadLine();
Trang 10BÀI 6: Cho một mảng nhiều chiều gồm thông tin cá nhân của mỗi sinh viên: họ tên, năm sinh, điểm trung bình, xếp loại Giả sử dữ liệu của mảng gồm có ít nhất 5 phần tử Hãy in ra toàn bộ các phiếu điểm theo mẫu như sau:
BẢNG ĐIỂM TỐT NGHIỆP Cấp cho sinh viên <họ tên>, năm sinh <năm sinh> Trong kì thi tốt nghiệp 2021, sinh viên trên đã đạt điểm trung bình là <điểm trung bình>, và được xếp loại <xếp loại> Sinh viên có thứ hạng <???> trong lớp.
-Hiệu Trưởng Trường Đại học ABC Kí tên, Đóng dấu
a) Mô Tả Thuật Toán
Bước 1: Khởi tạo phương thức static void NhapTT1SV(object[] sv, int i).Bước 2: Khởi tạo 3 biến “sv[0]”, “sv[1]”, “sv[2]” tương ứng với “Tên sinh viên”, “Nămsinh của sinh viên”, “Điểm trung bình của sinh viên”
Bước 3: Chuyển sang dạng double: double x = (double) sv[2].Bước 4: Khởi tạo nhánh if (x >= 0 && x <= 4.0)
Bước 5: Khởi tạo nhánh if (x < 1.0) lồng trong nhánh if ở trên phía trên.Bước 6: Nếu x >= 0 && x <= 4.0 thì chạy sang Bước 8
Bước 7: Nếu x không nằm trong khoảng đó thì sẽ quay lại Bước 4.Bước 8: Xét nhánh if, nếu x < 1.0 thì sv[3] = “Kém”; nếu không thì qua Bước 9.Bước 9: Nếu x >= 1.0 && x < 2.0 thì sv[3] = “Yếu”; nếu không thì qua Bước 10.Bước 10: Nếu x >= 2.0 && x < 2.5 thì sv[3] = “Trung bình”; nếu không thì qua Bước 11.Bước 11: Nếu x >= 2.5 && x < 3.2 thì sv[3] = “Khá”; nếu không thì qua Bước 12.Bước 12: Nếu x >= 3.2 && x < 3.6 thì sv[3] = “Giỏi”; nếu không thì qua Bước 13.Bước 13: Nếu x >= 3.6 && x <= 4.0 thì sv[3] = “Xuất sắc”
Trang 11Bước 14: Khởi tạo phương thức static void SapXep(object[][] sv1).Bước 15: Khởi tạo vòng lặp for (int i = 0; i < sv1.Length – 1; i++).Bước 16: Khởi tạo vòng lặp for (int j = i + 1; sv1.Length; j++) lồng trong vòng lặp for ởtrên.
Bước 17: Khởi tạo nhánh if ((double)sv1[i][2] < (double)sv1[j][2]) lồng trong vòng lặpfor thứ hai, khởi tạo biến sobject[] a
Bước 18: Nếu điểm sinh viên 1 nhỏ hơn điểm sinh viên 2 thì hoán đổi điểm của hai sinhviên:
object[] a = sv1[i]; sv1[i] = sv1[j];sv1[j] = a.Bước 19: Khởi tạo phương thức static void XepHang(object[][] sv2).Bước 20: Gắn biến sv2[0][4] = 1
Bước 21: Chuyển sang dạng int: int xephang = (int)sv2[0][4]; sang Bước 22Bước 22: Khởi tạo vòng lặp for (int i = 1; i < sv2.Length; i++); sang Bước 23Bước 23: Khởi tạo nhánh if ((double)sv2[i][2] == (double)sv2[i - 1][2]) lồng trong vònglặp for ở phía trên; sang Bước 24
Bước 24: Nếu điểm sinh viên 2 bằng điểm sinh viên 1 thì sv2[i][4] = xephang; sang Bước25
Bước 25: Nếu điểm sinh viên 2 không bằng điểm sinh viên 1 thìxephang++;
sv2[i][4] = xephang; sang Bước 26Bước 26: Khởi tạo phương thức static void XuatTT1SV(object[] sv3) để in thông tin theomẫu (sv3[0] là tên sinh viên; sv3[1] là năm sinh; sv3[2] là điểm trung bình; sv3[3] là xếploại; sv3[4] là thứ hạng); sang Bước 27
Bước 27: Khởi tạo phương thức static void NhapDSSV(object[][] ds); sang Bước 28Bước 28: Khởi tạo vòng lặp for (int i = 0; i < ds.Length; i++) để gọi phương thứcNhapTT1SV(ds[i], i); sang Bước 29
Bước 29: Khởi tạo phương thức static void XuatDSSV(object[][] ds1) để gọi phươngthức XuatTT1SV(ds[i]); sang Bước 30
Bước 30: Quay lại phương thức static void Main(string[] args) để khởi tạo biến n là sốlượng sinh viên; sang Bước 31
Bước 31: Khởi tạo biến object[][] a = new object[n][]; sang Bước 32
Trang 12Bước 32: Khởi tạo vòng lặp for (int i = 0; i < a.Length; i++) để gán a[i] = new object[5];sang Bước 33
Bước 33: Gọi phương thức NhapDSSV(a); sang Bước 34Bước 34: Gọi phương thức SapXep(a); sang Bước 35Bước 35: Gọi phương thức XepHang(a); sang Bước 36Bước 36: Gọi phương thức XuatDSSV(a); Kết thúc
b) Mã Nguồn
static void Bai6() {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Clear();
Console.WriteLine( "Nhập số lượng sinh viên: " ); int sl = int Parse(Console.ReadLine()); object [][] ds = new object [sl][]; for int ( i = 0; i < ds.Length; i++) {
ds[i] = new object [5]; }
NhapDanhSachSV(ds); SapXep(ds); XepHang(ds); XuatDanhSachSV(ds); Console.WriteLine( "\n -\n" ); Console.ReadLine(); }
static void NhapTT1SinhVien( object [] sv, int i) {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Write( "Sinh viên {0}\n" , i + 1); Console.Write( "Nhập tên sinh viên: " ); sv[0] = Console.ReadLine(); Console.Write( "Nhập năm sinh của sinh viên: " ); sv[1] = int Parse(Console.ReadLine()); Laplai:
Console.Write( "Nhập điểm trung bình của sinh viên: " ); sv[2] = double Parse(Console.ReadLine());
double x = ( double )sv[2]; (x >= 0 && x <= 4.0) if {
(x >= 0 && x < 1.0) if {
sv[3] = "Kém" ; }
else if (x >= 1.0 && x < 2.0) {
sv[3] = "Yếu" ; }
else if (x >= 2.0 && x < 2.5) {
sv[3] = "Trung bình" ; }
else if (x >= 2.5 && x < 3.2)
Trang 13{ sv[3] = "Khá" ; }
else if (x >= 3.2 && x < 3.6) {
sv[3] = "Giỏi" ; }
else if (x >= 3.6 && x <= 4.0) {
sv[3] = "Xuất sắc" ; }
Console.WriteLine(); }
else { Console.WriteLine( "Vui lòng nhập lại!!!" ); goto Laplai;
} } static void SapXep( object [][] sv2) {
for int ( i = 0; i < sv2.Length - 1; i++) {
for int ( j = i + 1; j < sv2.Length; j++) {
(( if double )sv2[i][2] < ( double )sv2[j][2]) {
object [] a = sv2[i]; sv2[i] = sv2[j]; sv2[j] = a; } } } } static void XepHang( object [][] sv3) {
sv3[0][4] = 1; int xh = ( int )sv3[0][4]; for int ( i = 1; i < sv3.Length; i++) {
(( if double )sv3[i][2] == ( double )sv3[i - 1][2]) {
sv3[i][4] = xh; }
else { xh++; sv3[i][4] = xh; }
} } static void XuatTT1SinhVien( object [] sv1) {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.WriteLine( "\n -\n" ); Console.WriteLine( "BẢNG ĐIỂM TỐT NGHIỆP\n" ); Console.WriteLine( "Cấp cho sinh viên {0}, năm sinh {1}\n" , sv1[0], sv1[1]); Console.WriteLine( "Trong kì thi tốt nghiệp 2021, sinh viên trên đã đạt điểm trung bình là {0}, và được xếp loại {1} Sinh viên có thứ hạng {2} trong lớp.\n" , sv1[2], sv1[3], sv1[4]); Console.WriteLine( "Hiệu trưởng trường Đại học ABC\n" );
Trang 14Console.WriteLine( "Kí tên, Đóng dấu\n" ); Console.WriteLine( "\n -\n" ); }
static void NhapDanhSachSV( object [][] sv4) {
for int ( i = 0; i < sv4.Length; i++) {
NhapTT1SinhVien(sv4[i], i); }
} static void XuatDanhSachSV( object [][] sv5) {
for int ( i = 0; i < sv5.Length; i++) {
XuatTT1SinhVien(sv5[i]); }
}
Trang 15ỨNG DỤNGMenu:
Bài 1:
Trang 16Bài 2:
Bài 3:
Trang 17Bài 5:
Bài 6:
Trang 19PHỤ LỤCMã nguồn toàn bộ chương trình
using System; using System.Collections.Generic; using System.Linq;
using System.Text; using System.Threading; using System.Threading.Tasks; namespace Đồ_Án_Cơ_Sở_Lập_Trình {
internal class Program
{ static void Bai1() {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Clear();
Console.WriteLine( "Nhập dữ liệu cạnh a:" ); double a = double Parse(Console.ReadLine()); Console.WriteLine( "Nhập dữ liệu cạnh b:" ); double b = double Parse(Console.ReadLine());
Console.WriteLine( "Nhập dữ liệu góc C:" ); double C = double Parse(Console.ReadLine()); double c, B, A;
c = Math.Sqrt((a * a) + (b * b) - 2 * a * b * Math.Cos(C * Math.PI / 180)); A = (a * Math.Sin(C * Math.PI / 180) / c) * 180 / Math.PI;
B = 180 - A - C; Console.WriteLine( "Đáp án cạnh c là: {0}" , c); Console.WriteLine( "Đáp án góc A là: {0}" , A); Console.WriteLine( "Đáp án góc B là: {0}" , B); Console.ReadLine();
} static void Bai2() {
Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; Console.Clear();
Console.WriteLine( "Tính P" ); Console.Write( "Nhập số thứ tự của bạn: " ); int n = int Parse(Console.ReadLine()); double P = 0;
for int ( i = n; i >= 1; i ) {
P = Math.Pow(i + P, ( double )1 / (n + 1)); }
double kq = 1.0 / P; Console.WriteLine( "Tổng của P là: {0}" , kq); Console.ReadLine();
}