BỘ GIÁO DỤC VÀ ĐÀO TẠOĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH UEHTRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾGiảng Viên: TS.. Bài 3: Nhập vào một mảng các số nguyên.. In ra một số kết quả sau: số lượng số âm, tổ
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 30 tháng 10 năm 2022
Trang 3tự là 1, 11, 21, v.v., thì n=1, như yêu cầu đầu tiên
Bài 3: Nhập vào một mảng các 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 4: 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 5: Đọc vào một chuỗi, cho biết chuỗi đó có bao nhiêu từ
Ví dụ: S = “ minh thich thi minh nhich thoi” => có 6 từ
Bà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
Trang 4-LỜI GIẢI
BÀI 1.
1 Phân Tích
Xác định bài toán: - Input: Nhập các số a, b, c
- Output: Nghiêm của phương trình trùng phương ax + bx + c = 0 (1)42
Ý tưởng:
- Đưa về phương trình bâc 2 có dang ax + bx + c = 0 (2) 2
- Giải phương trình (2), dựa trên nghiêm của pt (2) tìm ra nghiệm của pt (1) Nếu pt (2) có 2 nghiêm dương thì phương trình (1) có 4 nghiêm Nếu pt (2) có 1 nghiệm dương và một nghiệm bằng 0 thì pt (1) có 3
- Bước 1: Nhập các số thực a, b, c;
- Bước 2: Nếu a = b = c = 0 thì thông báo “Phương trình có vô số nghiệm”; Kết
- Bước 3: Nếu a = b = 0 thì sang bước 25;
- Bước 4: Nếu a = 0 thì tiếp tục bước 5 không thì sang bước 9;- Bước 5: d = -c / b;
- Bước 6: Nếu d < 0 thì sang bước 25;- Bước 7: Nếu d = 0 thì sang bước 24;
- Bước 8: Thông báo “Phương trình có 2 nghiệm x1 = , x2 = ”; Kết thúc;- Bước 9: Tính delta = b * b - 4 * a * c;
- Bước 10: Nếu delta < 0 thì sang bước 25;- Bước 11: no1 = no2 = 0;
- Bước 12: Nếu delta = 0 thì tiếp tục bước 13, ngược lại sang bước 17;- Bước 13: no1 = -b / (2 * a);
- Bước 14: Nếu no1 < 0 thì sang bước 25;- Bước 15: Nếu no1 = 0 thì thì sang bước 24;
- Bước 16: Thông báo “Phương trình có 2 nghiệm x1 = , x2 = ”; Kết thúc;
Too long to read onyour phone? Save to
read later on yourcomputer
Save to a Studylist
Trang 5- Bước 17: no1 = , no2 = ;
- Bước 18: Nếu no1 > 0 và no2 > 0 thì thông báo “Phương trình có 4 nghiệm x1 = ,
- Bước 23: Nếu no1 < 0 và no2 < 0 thì sang bước 25;
- Bước 24: Thông báo “Phương trình có 1 nghiệm x = ”; Kết thúc;- Bước 25: Thông báo “Phương trình vô nghiệm”; Kết thúc;
Trang 6b) Sơ Đồ Khối
Trang 7c) Mã Nguồn
// BÀI 1
static void Bai1( check) int
{ double a; double b; double c; (check == ) if 1
{ a = ; 1
// Nh pậ a for (; ; ) {
{
Console.Write("Nh pậ a = "); a = double.Parse(Console.ReadLine()); break;
} catch {
Console.WriteLine("Vui lòng nh pậ s "ố); }
}
// Nh pậ b for (; ; ) {
{
Console.Write("Nh pậ b = "); b = double.Parse(Console.ReadLine()); break;
} catch {
Console.WriteLine("Vui lòng nh pậ s "ố); }
}
// Nh pậ c for (; ; ) { try {
Console.Write("Nh pậ c = "); c = double.Parse(Console.ReadLine()); break;
} catch {
Console.WriteLine("Vui lòng nh pậ s "ố); }
} }
Trang 8no1 = Math.Sqrt(d);
double no2 = -Math.Sqrt(d);
Console.WriteLine($"Ph ngươ trình có 2 nghi mệ \nx1 = {no1}, x2 = {no2}");
} } else {
// Tính delta
double delta = b * b - * a * c; 4
// Xác đ nhị các nghi mệ phươ trình ng double no1 = ; 0
double no2 = ; 0
// delta âm (delta < ) if 0
{
Console.WriteLine("Ph ngươ trình vô nghi m"ệ ); }
// delta b ngằ 0 else if (delta == ) 0
{
no1 = -b / ( * a); 2
// pt b cậ 2 có nghi mệ kép âm (no1 < ) if 0
{
Console.WriteLine("Ph ngươ trình vô nghi m"ệ ); }
// pt b cậ 2 có nghi mệ kép b ngằ 0 else if (no1 == ) 0
{
Console.WriteLine("Ph ngươ trình có 1 nghi mệ duy nh tấ \nx = 0"); }
// pt b cậ 2 có nghi mệ kép dươ ng else
{
no2 = Math.Sqrt(no1); no1 = -Math.Sqrt(no1);
Console.WriteLine($"Ph ngươ trình có 2 nghi mệ phân bi tệ \nx1 = {no1}, x2 = {no2}");
Trang 9} // delta dươ ng else {
no1 = (-b - Math.Sqrt(delta)) / ( * a); 2
no2 = (-b + Math.Sqrt(delta)) / ( * a); 2
// pt b cậ 2 có 2 nghi mệ dươ ng (no1 > && no2 > ) if 0 0
{
double no3 = -Math.Sqrt(no1); double no4 = -Math.Sqrt(no2); no1 = Math.Sqrt(no1); no2 = Math.Sqrt(no2);
Console.WriteLine($"Ph ngươ trình có 4 nghi mệ phân bi tệ \nx1 = {no1}, x2 = {no2}, x3 = {no3}, x4 = {no4}");
double no4 = Math.Sqrt(no2);
Console.WriteLine($"Ph ngươ trình có 3 nghi mệ phân bi tệ \nx1 = {no3}, x2 = {no4}, x3 = 0");
double no4 = Math.Sqrt(no1);
Console.WriteLine($"Ph ngươ trình có 3 nghi mệ phân bi tệ \nx1 = {no3}, x2 = {no4}, x3 = 0");
}
// pt b cậ 2 có 2 nghi mệ trái d uấ else if (no1 > && no2 < ) 0 0
double no4 = Math.Sqrt(no2);
Console.WriteLine($"Ph ngươ trình có 2 nghi mệ phân bi tệ \nx1 = {no3}, x2 = {no4}");
{
Console.WriteLine("Ph ngươ trình vô nghi m"ệ ); }
} }
Trang 10}
BÀI 2.
1 Phân Tích
Xác định bài toán: - Input: Nhập n- Output: Tính Ý tưởng:
- Ta thấy bên trong căn của mẫu có dạng là chính nó, ta nghĩ đến việc sử dụngchính nó bên trong nó.
- Sử dụng đệ quy để gọi chính căn của mẫu bên trong nó với 2 tham số đầu vàolà n và i ( i chay từ 1 đến n + 1)
- Cứ tiếp tục gọi đệ quy cho tới khi nào i = n+12 Thuật Toán
a) Mô Tả Thuật Toán
- Bước 1: Nhập n;
- Bước 2: Khai báo hàm dequy(n, i) => Nếu i < n +1 trả về ; Nếu i = n +1 trả về ;
Nếu i > n + 1 trả về 0;
- Bước 3: mau = dequy(n, 1);
- Bước 4: Thông báo kết quả “P = 1 / mau”; Kết thúc;
static void Bai2( check) int
{ n; int
(check == ) if 1
{
Trang 11Console.WriteLine($"n = 4"); }
else {
// Nh pậ n do
{ (; ; )
{
{
Console.Write("Nh pậ n = "); n = Parse(Console.ReadLine()); int
break; } catch {
Console.WriteLine("Vui lòng nh pậ s "ố); }
} } while (n < ); 0
}
double result = / sqrtRecur(n, ); 1 1
// Hi nể th k tị ế quả
Console.Write($"K tế qu hi nả ể th v iị ớ n = {n}, P = "); Console.WriteLine(result);
a) Mô Tả Thuật Toán
- Bước 1: Nhập mảng số nguyên arr;
- Bước 2: sumA = sumD = countA = countD = i =0;
- Bước 3: Nếu i > số phần tử chứa trong arr thì chuyển sang bước 7, không thì tiếp
tục bước 4;
Trang 12- Bước 4: Nếu arr[i] < 0 thì countA = countA + 1 và sumA = sumA + arr[i] sau đó
(check == ) if 1
{
arr = new int[6]; Random rd = new Random(); for int ( i = ; i < ; i++) 0 6
{
arr[i] = rd.Next(- , ); 9 10
}
Console.Write("M ngả : ["); foreach ( val in arr) int
{
Console.Write($" {val},"); }
Console.WriteLine(" ]"); }
else {
// Nh pậ n n; int
do
{ for (; ; ) { try {
Console.Write("Nh pậ vào s lố ượ ph nngầ t c aử ủ m ng:ả "); n = Parse(Console.ReadLine()); int
break; } catch {
Console.WriteLine("Vui lòng nh pậ số nguyên"); }
} } while (n <= ); 0
// M ngả arr = new int [n];
// Nh pậ giá trị t ngừ ph nầ tử for int ( i = ; i < arr.Length; i++) 0
{ (; ; )
{
{
Console.Write($"Nh pậ ph nầ tử th {i + 1}: "ứ );
Trang 13break; } catch {
Console.WriteLine("Vui lòng nh pậ số nguyên"); }
} } }
// Ki mể tra ph nầ tử m ngả sumA = ; int 0
{ countA += ; 1
sumA += arr[i]; }
elseif (arr[i] > ) 0
{ countD += ; 1
sumD += arr[i]; }
}
- Output: Ma trận phản chiếu B của Anxmmxn
Trang 14row; int
column; int
(check == ) if 1
{ row = ; 2
column = ; 3
matrix = newint[2 3, ]; Random rd = new Random();
for int ( i = ; i < row; i++) 0
Console.WriteLine("M ngả :"); for int ( i = ; i < row; i++) 0
Console.WriteLine(); }
} else {
// Khai báo và nh pậ m ngả // column
do
{ for (; ; ) { try {
Console.Write("Nh pậ vào s c tố ộ c aủ ma tr n:ậ "); column = Parse(Console.ReadLine()); int
break; } catch {
Console.WriteLine("Vui lòng nh pậ số nguyên"); }
}
} while (column <= ); 0
Trang 15// row do
{ (; ; )
{
{
Console.Write("Nh pậ vào s hàng c aố ủ ma tr n:ậ "); row = Parse(Console.ReadLine()); int
break; } catch {
Console.WriteLine("Vui lòng nh pậ số nguyên"); }
{
for int ( j = ; j < column; j++) 0
{ (; ; )
{ try {
Console.Write("A[{0}, {1}] = ", i, j); matrix[i, j] = Parse(Console.ReadLine()); int
break; } catch {
Console.WriteLine("Vui lòng nh pậ số nguyên"); }
} } }
Console.WriteLine("M ngả :"); for int ( i = ; i < row; i++) 0
Console.WriteLine(); }
}
// Hi nể th k tị ế quả
Trang 16Console.WriteLine(); }
}
BÀI 5.
1 Phân Tích
Xác định bài toán: - Input: Chuỗi văn bản- Output: Số từ có trong chuỗiÝ tưởng:
- Các từ trong văn bản được ngăn cách nhau bởi khoảng trắng / dấu cách => táchchuỗi thàng một mảng với các phần tử của mảng là các từ của chuỗi được phânchia bởi khoảng trắng / dấu cách (“ “)
- Đếm các phần tử trong mảng, ngoại trừ các ký tự đặc biệt ( , | | - | ~ | ? | …)2 Thuật Toán
a) Mô Tả Thuật Toán
- Bước 1: Nhập chuỗi str;
- Bước 2: Mảng arrStr có các phần tử được cung cấp bởi chuỗi str sau khi sử dụng
phương thức tách chuỗi bằng “khoảng trắng / dấu cách” ( trong C# ta sử dụngphương thức Split(‘ ’) );
- Bước 3: count = i = 0;
- Bước 4: Nếu i > số phần tử của arrStr thì chuyển đến bước 8, không thì tiếp tục
bước 5;
- Bước 5: Nếu arrStr[i] = rỗng (String.Empty) hoặc (, | | - | ~ | ? | / | ( | ) | ; | & | “
| / ) thì chuyển đến bước 7, không thì tiếp tục;
- Bước 6: count = count + 1;- Bước 7: i = i + 1, quay lại bước 4;
- Bước 8: Thông báo kết quả “count”; Kết thúc:
b) Mã Nguồn
// BÀI 5
static void Bai5( check) int
{ string str; (check == ) if 1
{
Trang 17} else {
// Nh pậ n
Console.Write("Nh pậ chu iỗ mu nố ki mể tra: "); str = Console.ReadLine();
}
string[] arrStr = str.Split( ); ' '
case : ";"
case : "'"
case"\"": case"-": case")": case"(": case"?": case"!": case"&": case : ","continue; default: count += ; 1break; }
}
- Input: Thông tin sinh viên (họ tên, năm sinh, điểm trung bình)
- Output: In ra bảng điếm tốt nghiệp của sinh viên với xếp loại và thứ hạng sinhviên.
Trang 18- Xây dựng hàm xác định xếp loại học lực và thứ hạng của sinh viên dựa vàođiểm trung bình nhập vào
Xếp loại sinh viên dựa vào điểm trung bình Dtb <= 1 : Rớt
Dtb <= 3 : Yếu Dtb <= 5 : Trung bình Dtb <= 6.5 : Khá Dtb <= 8 : Giỏi Dtb <= 10 : Xuất sắc
Xác định thứ hạng của sinh viên dựa trên điểm trung bình bằng cách sửdụng thuật toán sắp xếp thứ tự và loại bỏ các phần tử trùng
Tạo một mảng chứa điểm của các sinh viên
Sắp xếp thứ tự giảm dần cho mảng chứa điểm: bằng cách so sánh2 phần tử kề nhau, nếu phần tử đứng sau lớn hơn phần tử đứngtrước ta hoán đổi giá trị của 2 phần tử này cho nhau Lặp đi lặplại công việc cho từng phần tử trong mảng cho đến phần tử cuốicùng.
Tạo mảng mới (1) bằng cách loại bỏ các phần tử trùng nhau trongmảng vừa sắp xếp (2): duyệt qua các phần tử của mảng (2) gángiá trị MinValue cho các phần tử bị trùng, tiếp tục duyệt lại mảng(2) và lấy các phần tử không trùng ( khác MinValue ) vào mảng(1).
Chỉ số của các phần tử trong mảng (1) + 1 là thứ hạng của cácsinh viên có điểm số tương ứng với giá trị của phần tử đó.- Sau khi xây dựng xong các hàm ta thực hiện thuật toán để giải bài tập2 Thuật Toán
a) Mô Tả Thuật Toán
- Bước 1: Nhập thông tin danh sách sinh viên vào dssv;
- Bước 2: Nhập thông tin họ tên, năm sinh, điểm trung bình cho từng sinh viên vào
Trang 19- Bước 11: Nếu score[j] > score[i] thì tiếp tục bước 12, không thì chuyển đến bước
- Bước 12: tmp = score[j]; - Bước 13: score[j] = score[i];- Bước 14: score[i] = tmp;
- Bước 15: j = j + 1, quay lại bước 10;- Bước 16: i = i + 1, quay lại bước 8;- Bước 17: i = 0;
- Bước 18: Nếu i < số phần tử của score thì tiếp tục bước 19, không thì chuyển đến
- Bước 26: Nếu i < số phần tử của score thì tiếp tục bước 27, không thì chuyển đến
- Bước 34: Nếu tmp <= 1 thì sinh viên thứ i + 1 xếp loại “Rớt” và chuyển đến bước
40, không thì tiếp tục bước 35;
- Bước 35: Nếu tmp <= 3 thì sinh viên thứ i + 1 xếp loại “Yếu” và chuyển đến bước
40, không thì tiếp tục bước 36;
- Bước 36: Nếu tmp <= 5 thì sinh viên thứ i + 1 xếp loại “Trung bình” và chuyển
đến bước 40, không thì tiếp tục bước 37;
- Bước 37: Nếu tmp <= 6.5 thì sinh thứ i + 1 viên xếp loại “Khá” và chuyển đến
bước 40, không thì tiếp tục bước 38;
- Bước 38: Nếu tmp <= 8 thì sinh viên thứ i + 1 xếp loại “Giỏi” và chuyển đến bước
40, không thì tiếp tục bước 39;
- Bước 39: Sinh viên thứ i + 1 xếp loại “Xuất sắc”;- Bước 40: j = 0;
- Bước 41: Nếu tmp = deScore[j] thì sinh viên thứ i + 1 có thứ hạng “j+1” và
chuyển đến bước 43, không thì tiếp tục bước 42;
Trang 20- Bước 42: j = j + 1, quay lại bước 41;- Bước 43: i = i + 1, quay lại bước 32;- Bước 44: Thông báo kết quả; Kết thúc;
b) Mã Nguồn
// BÀI 6
// Hàm nh pậ thông tin m tộ sinh viên
static void NhapTT1SV(object[] sv) {
Console.WriteLine("\nNh pậ thông tin sinh viên "); Console.Write("Nh pậ họ tên: ");
sv[ ] = Console.ReadLine(); 0
// Nh pậ năm sinh do
{ for (; ; ) { try {
Console.Write("Nh pậ năm sinh: "); sv[ ] = Parse(Console.ReadLine()); 1 int
break; } catch {
Console.WriteLine("Vui lòng nh pậ s nguyên"ố ); }
}
} while int (( )sv[1] < ); 0
// Nh pậ đi mể trung bình do
{ for (; ; ) { try {
Console.Write("Nh pậ ĐTB: "); sv[ ] = 2 float.Parse(Console.ReadLine()); break;
} catch {
Console.WriteLine("Vui lòng nh pậ s "ố); }
}
} while float (( )sv[2] < || (0 float)sv[2] > ); 10
// X pế lo iạ
sv[ ] = ; 3 ""
// Th h ngứ ạ sv[ ] = ; 4 0
}
// Hàm xác đ nhị x pế lo iạ và thứ h ngạ sinh viên
static void XLTH(object[][] ds) {
[] score = [ds.Length];
float newfloat
for int ( i = ; i < ds.Length; i++) 0
{
score[i] = (float)ds[i][2]; }