BÀI TẬP LUYỆN THUẬT GIẢI1.. Viết chương trình: a Nhập vào 3 số nguyên tương ứng ngày, tháng, năm của một ngày nào đó.. Viết chương trình thực hiện các công việc sau: a Khai báo mảng 10 s
Trang 1BÀI TẬP LUYỆN THUẬT GIẢI
1 Lệnh if Giải phương trình bậc 2 với 3 hệ số a, b, c được nhập từ bàn phím.
2 Lệnh switch Viết chương trình:
a) Nhập vào 3 số nguyên tương ứng ngày, tháng, năm của một ngày nào đó
b) Kiểm tra xem ngày nhập vào có hợp lệ hay không?
Ví dụ: Nhập ngày: 30, tháng: 2, năm 2009 -> In ra: Tháng 2 năm 2009 tối đa 29 ngày
3 Lệnh lặp Viết chương trình:
a) Nhập một số nguyên n
b) In ra giai thừa của n (n! = 1.2.3….n) bằng:
1 Lệnh for
2 Lệnh do … while
3 Lệnh while
4 Dùng đệ quy (recursive)
4 Mảng Viết chương trình thực hiện các công việc sau:
a) Khai báo mảng 10 số nguyên, các phần tử mảng được lấy ngẫu nhiên (1 <= giá trị mỗi phần tử <=100), không lặp lại (Tìm hiểu lớp Math)
b) In các phần tử vừa lấy theo thứ tự ngược với thứ tự gán
c) In mảng đã sắp xếp theo thứ tự tăng và giảm
d) Kiểm tra mảng có đối xứng?
5 Chuyển đổi hệ đếm
a) Nhập vào một số nguyên dương
In ra biểu diễn nhị phân và Hexa Decimal của số đó
Ví dụ: Nhập n =65; In ra: 65 = (1000001)2 65 = (41)16
b) Nhập một số nhị phân, in ra số thập phân tương ứng VD: (1010)2 = (10)10
6 String Viết chương trình thực hiện các công việc sau:
a) Nhập vào một chuỗi
b) Đếm sô từ trong chuỗi nhập
c) In chuỗi đã chuẩn hóa
Ví dụ: Chuỗi nhập: “ nGuyEN vAN biNh “ Chuỗi chuẩn hóa: “Nguyen Van Binh”
d) Kiểm tra xem chuỗi nhập có phải là một danh hiệu (identifier) hợp lệ hay không?
Trang 2HƯỚNG DẪN GIẢI THUẬT CÁC BÀI TẬP LUYỆN THUẬT GIẢI
1 GIẢI THUẬT GIẢI PTB2 a*x2 + b*x + c = 0
BEGI N double a, b, c, d, x, x1, x2
Input(a, b, c)
a = 0?
b = 0?
c = 0?
Y
Y
N
N
N
Y
d = b*b– 4*a*c d < 0?
N
d = 0?
N Out(“PT VN”)
x = - c / b
Out(“PT VSN”)
Y Out(“PT VN”)
x = - b / (2*a)
Out(x) Out(x)
x1 = (-b + sqrt(d)) / (2*a) x2 = (-b - sqrt(d)) / (2*a)
Out(x1, x2)
END
Y
1 a = 0, b = 0, c = 0 => PTVSN - OK
2 a = 0, b = 0, c = 2 => PTVN - OK
3 a = 0, b = 2, c = 4 => x = - 2 - OK
4 a = 1, b = 2, c = 2 => PTVN (d < 0)
5 a = 1, b = 2, c = 1 => x = -1 (d = 0)
6 a = 1, b = 4, c = 1 => x1 = … (d > 0)
x2 = …
Trang 32 GIẢI THUẬT KIỂM TRA NGÀY NHẬP
BEGI N
byte (char) day, month, dmax; int year;
dmaxlưu giữ số ngày max của 1 tháng trong năm
Input (year); // year > 0 Input (month); // 0 < month < 13 Input (day); // 0 < day < 32
month
month = 1, 3, 5, 7, 8, 10 , 12 month = 4, 6, 9, 11 month = 2
dmax = 29
year % 4 ==
0 Y
dmax = 28
N Y
day >
dmax N Y
Y Y
Output (“Input Date is invalid”)
Output (“Input Date is valid”)
Trang 43 GIẢI THUẬT TÍNH GIAI THỪA
BG
int i = 0, n;
long int result = 1;
Input (n)
i = 1
i <= n
Output (result)
i++
Y N
EN
D
n == 0 || 1 result = 1
Y
N
result = result * i
Trang 54 GIẢI THUẬT VỀ CÁC THAO TÁC TRÊN MẢNG
Trang 65 GIẢI THUẬT CHUYỂN ĐỔI HỆ THỐNG SỐ
BG
int i = 0, n, m, r;
int arr_bin[64];
Input (n)
m == 0
m = n
Y
N
r = m %2;
arr_bin[i++] = r;
m = m / 2;
i
i >= 0
Output (arr_bin[i])
i
Y
N EN
D
Trang 76 GIẢI THUẬT VỀ CÁC THAO TÁC TRÊN CHUỖI
6.4 Kiểm tra xem chuỗi nhập có phải là một danh hiệu (identifier) hợp lệ hay không?
BEGI N
char id[50] , c; int i = 0; String id;
char keywords[ ][30] = {“include”, “main”, “if”, “else”, “for”, “do”, “while”, …};
Input (id); //
c = id[0];
i = 1; c = id[i];
i++; c = id[i];
(c >= ‘A’ && c <= ‘Z’)
|| (c >= ‘a’ && c <= ‘z’)
||
c == ‘_’ || c ==
Y
Y Y
N Y
Y Y Output (“id is invalid”); //
i < length(id)
(c >= ‘A’ && c <= ‘Z’)
|| (c >= ‘a’ && c <= ‘z’)
||
(c >= ‘0’ && c <= ‘9’) ||
c == ‘_’
N Y
Output (“id is invalid”);
id == any key words
N
Y
Y
END END
Trang 8// Program writen in c#
public bool CheckId(string st)
{
string [] keywords = {"if", "else", "class", "interface", "for",
"do", "final"};
if((c <= 'Z' && c >= 'A')||(c <= 'z' && c >= 'a')||(c ==
'_')||(c == '$'))
{
if((c <= 'Z' && c >= 'A')||(c <= 'z' && c >=
'a')||(c == '_')||(c == '$')||(c <= '9' && c >= '0'))
// Kiem tra xem co trung voi keywords?
khoa.");
}
else{
}
}
Trang 9Giải thích giải thuật in ra tam giác vuông các ‘*’:
Số hàng nhập vào h = 4
Biến lặp mỗi lần thay đổi hàng r = 1 -> 4
- Trên mỗi hàng,dùng biến lưu trữ giá trị cột c, lặp với số lần lặp bằng số thứ tự của hàng r, thực hiện in ‘*’
- Khi đến cuối hàng, di chuyển con trỏ xuống hàng dưới
int h = 4, r, c;
for(r = 1; r < = h; r++)
{
for(c = 1; c <= r; c++)
{
printf(“* ”);
}
printf(“\n”);
}
*
* *
* * *
* * * *
Số hàng nhập vào h = 4
Biến lặp mỗi lần thay đổi hàng r = 1 -> h
- Trên mỗi hàng,dùng biến lưu trữ giá trị cột c, lặp với số lần lặp bằng số thứ tự của hàng r, thực hiện in: giá trị của cột c (STT cột)
- Khi đến cuối hàng, di chuyển con trỏ xuống hàng dưới
int h = 9, r, c;
for(r = 1; r < = h; r++)
{
for(c = 1; c <= r; c++)
{
printf(“%d ”, c);
}
printf(“\n”);