Chuyên đề Tin học 12 Bài 4 (Cánh diều): Dự án học tập: Xây dựng chương trình sử dụng kiểu dữ liệu hàng đợi và ngăn xếp
Với giải bài tập Chuyên đề Tin học 12 Bài 4: Dự án học tập: Xây dựng chương trình sử dụng kiểu dữ liệu hàng đợi và ngăn xếp sách Cánh diều hay nhất, chi tiết giúp học sinh dễ dàng làm bài tập Chuyên đề học tập Tin học 12 Bài 4.
Giải Chuyên đề Tin học 12 Bài 4: Dự án học tập: Xây dựng chương trình sử dụng kiểu dữ liệu hàng đợi và ngăn xếp
Dự án 1 trang 24 Chuyên đề Tin học 12: Xây dựng ứng dụng kiểm tra lỗi cú pháp
a) Em hãy viết chương trình nhập vào một xâu kí tự chỉ gồm các dấu mở ngoặc và đóng ngoặc sau [, ], {, }, (, ). Sau đó, kiểm tra xem xâu kí tự đó có cân bằng hay không. In ra màn hình thông báo “Cân bằng” nếu xâu đó là cân bằng, ngược lại in ra “Không cân bằng”.
b) Mở rộng chương trình ở câu a): đọc tập có tên test.py chứa chương trình viết bằng ngôn ngữ Python, và kiểm tra xem chương trình có lỗi cú pháp về thứ tự xuất hiện của các cặp ngoặc [, ], {, }, (, ) hay không. In ra màn hình thông báo “Không có lỗi” nếu chương trình không có lỗi về các cặp ngoặc này, ngược lại in ra “Có lỗi cú pháp”.
Lời giải:
a) Em hãy viết chương trình nhập vào một xâu kí tự chỉ gồm các dấu mở ngoặc và đóng ngoặc sau [, ], {, }, (, ). Sau đó, kiểm tra xem xâu kí tự đó có cân bằng hay không. In ra màn hình thông báo “Cân bằng” nếu xâu đó là cân bằng, ngược lại in ra “Không cân bằng”.
Chương trình như sau:
def is_balanced(s):
stack = []
opening = {'(', '{', '['}
closing = {')': '(', '}': '{', ']': '['}
for char in s:
if char in opening:
stack.append(char)
elif char in closing:
if not stack or stack[-1] != closing[char]:
return "Không cân bằng"
stack.pop()
return "Cân bằng" if not stack else “Không cân bằng”
# Test the function
s = "[{()}]()"
print(is_balanced(s))
# Output: Cân bằng
b) Mở rộng chương trình ở câu a): đọc tập có tên test.py chứa chương trình viết bằng ngôn ngữ Python, và kiểm tra xem chương trình có lỗi cú pháp về thứ tự xuất hiện của các cặp ngoặc [, ], {, }, (, ) hay không. In ra màn hình thông báo “Không có lỗi” nếu chương trình không có lỗi về các cặp ngoặc này, ngược lại in ra “Có lỗi cú pháp”.
def check_syntax_balance(filename):
try:
with open(filename, 'r') as file:
content = file.read()
except FileNotFoundError:
return “Không thể mở file”
stack = []
opening = {'(', '{', '['}
closing = {')': '(', '}': '{', ']': '['}
for char in content:
if char in opening:
stack.append(char)
elif char in closing:
if not stack or stack[-1] != closing[char]:
return "Có lỗi cú pháp"
stack.pop()
return "Không có lỗi" if not stack else “Có lỗi cú pháp”
# Test the function with a sample file name
filename = 'test.py'
print(check_syntax_balance(filename))
# Output will depend on the content of test.py
Dự án 2 trang 26 Chuyên đề Tin học 12: Kí pháp nghịch đảo Ba Lan và phương pháp tính giá trị của biểu thức toán học
Hãy viết chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan dưới dạng một xâu kí tự chỉ bao gồm: năm toán tử cộng, trừ, nhân, chia, luỹ thừa (+, -,*, /, "), các toán hạng đều chỉ là các số nguyên có một chữ số từ 0 đến 9. Sau đó, tính giá trị của kí pháp này và in kết quả ra màn hình.
Lời giải:
Chương trình yêu cầu nhập vào một kí pháp nghịch đảo Ba Lan (Reverse Polish Notation - RPN) chỉ bao gồm các toán tử cộng, trừ, nhân, chia, lũy thừa (+, -, *, /, ^) và các toán hạng là các số nguyên có một chữ số từ 0 đến 9. Chương trình sẽ tính giá trị của biểu thức đó và in kết quả ra màn hình:
Chương trình như sau:
def evaluate_rpn(expression):
stack = []
# Define operations
operators = {
'+': lambda b, a: a + b,
'-': lambda b, a: a - b,
'*': lambda b, a: a * b,
'/': lambda b, a: a // b if b != 0 else float('inf'), # Using integer division for single-digit integers
'^': lambda b, a: a ** b
}
# Process each character in the expression
for char in expression:
if char.isdigit():
stack.append(int(char))
elif char in operators:
b = stack.pop()
a = stack.pop()
result = operators[char](b, a)
stack.append(result)
else:
raise ValueError(f"Invalid character in expression: {char}")
# The final result should be the only element left in the stack
if len(stack) != 1:
raise ValueError("The input RPN expression is invalid.")
return stack[0]
# Input the RPN expression
expression = input("Nhập biểu thức ký pháp nghịch đảo Ba Lan: ")
# Evaluate the expression
try:
result = evaluate_rpn(expression)
print(f"Kết quả: {result}")
except Exception as e:
print(f"Lỗi: {e}")
Dự án 3 trang 28 Chuyên đề Tin học 12: Đổi màu một vùng bức tranh
Em hãy viết chương trình yêu cầu nhập vào lần lượt các thông tin sau:
- Hai giá trị M và N tương ứng với số dòng và số cột của lưới ô vuông.
- Các giá trị màu ở mỗi ô trong lưới ô vuông kích thước M N theo thứ tự hết dòng này đến dòng khác.
- Ba giá trị r, c, m lần lượt là toạ độ dòng, toạ độ cột và màu mới của ô muốn đổi màu. In ra màn hình lưới ô vuông sau khi đã đổi màu các ô theo đúng yêu cầu của An.
Lời giải:
Bài toán yêu cầu ta nhập vào một lưới ô vuông có kích thước M×NM \times NM×N, nhập vào màu sắc của các ô và sau đó thay đổi màu của một ô và các ô liên thông cùng màu với nó, chúng ta sẽ sử dụng một kỹ thuật tương tự như "flood fill" trong đồ họa máy tính:
Chương trình như sau:
def flood_fill(grid, r, c, new_color):
rows = len(grid)
cols = len(grid[0])
original_color = grid[r][c]
if original_color == new_color:
return grid
def dfs(x, y):
if x < 0 or x >= rows or y < 0 or y >= cols:
return
if grid[x][y] != original_color:
return
grid[x][y] = new_color
# Go to neighboring cells
dfs(x + 1, y)
dfs(x - 1, y)
dfs(x, y + 1)
dfs(x, y - 1)
dfs(r, c)
return grid
# Input the dimensions of the grid
M = int(input("Nhập số dòng M: "))
N = int(input("Nhập số cột N: "))
# Input the grid values
print("Nhập giá trị màu của từng ô trong lưới:")
grid = []
for i in range(M):
row = list(map(int, input().split()))
grid.append(row)
# Input the row, column and new color
r = int(input("Nhập tọa độ dòng r: "))
c = int(input("Nhập tọa độ cột c: "))
new_color = int(input("Nhập màu mới m: "))
# Perform the flood fill
updated_grid = flood_fill(grid, r, c, new_color)
# Print the updated grid
print("Lưới sau khi đổi màu:")
for row in updated_grid:
print(" ".join(map(str, row)))
Xem thêm các chương trình khác:
- Soạn văn 12 Cánh diều (hay nhất)
- Văn mẫu 12 - Cánh diều
- Tóm tắt tác phẩm Ngữ văn 12 – Cánh diều
- Tác giả tác phẩm Ngữ văn 12 - Cánh diều
- Bố cục tác phẩm Ngữ văn 12 – Cánh diều
- Nội dung chính tác phẩm Ngữ văn 12 – Cánh diều
- Giải sgk Toán 12 – Cánh diều
- Giải Chuyên đề học tập Toán 12 – Cánh diều
- Lý thuyết Toán 12 – Cánh diều
- Giải sbt Toán 12 – Cánh diều
- Giải sgk Tiếng Anh 12 - ilearn Smart World
- Trọn bộ Từ vựng Tiếng Anh lớp 12 ilearn Smart World đầy đủ nhất
- Trọn bộ Ngữ pháp Tiếng Anh lớp 12 ilearn Smart World đầy đủ nhất
- Giải sbt Tiếng Anh 12 – iLearn Smart World
- Giải sgk Vật lí 12 – Cánh diều
- Giải Chuyên đề học tập Vật lí 12 – Cánh diều
- Lý thuyết Vật lí 12 – Cánh diều
- Giải sbt Vật lí 12 – Cánh diều
- Giải sgk Hóa học 12 – Cánh diều
- Giải Chuyên đề học tập Hóa 12 – Cánh diều
- Lý thuyết Hóa 12 – Cánh diều
- Giải sbt Hóa 12 – Cánh diều
- Giải sgk Sinh học 12 – Cánh diều
- Giải Chuyên đề học tập Sinh học 12 – Cánh diều
- Lý thuyết Sinh học 12 – Cánh diều
- Giải sbt Sinh học 12 – Cánh diều
- Giải sgk Lịch sử 12 – Cánh diều
- Giải Chuyên đề học tập Lịch sử 12 – Cánh diều
- Giải sbt Lịch sử 12 – Cánh diều
- Giải sgk Địa lí 12 – Cánh diều
- Giải Chuyên đề học tập Địa lí 12 – Cánh diều
- Giải sbt Địa lí 12 – Cánh diều
- Giải sgk Công nghệ 12 – Cánh diều
- Giải sgk Kinh tế pháp luật 12 – Cánh diều
- Giải Chuyên đề học tập Kinh tế pháp luật 12 – Cánh diều
- Giải sbt Kinh tế pháp luật 12 – Cánh diều
- Giải sgk Giáo dục quốc phòng 12 – Cánh diều
- Giải sgk Hoạt động trải nghiệm 12 – Cánh diều