BÀI TẬP CHƢƠNG

Một phần của tài liệu Bài giảng Các kĩ thuật lập trình: Phần 2 (Trang 41 - 45)

LI R RL IR

BÀI TẬP CHƢƠNG

4.1. Xâu thuận nghịch độc là xâu bít nhị phân có độ dài n mà khi đảo xâu ta vẫn nhận đƣợc chính xâu đó. Hãy liệt kê tất cả các xâu thuận nghịch độc có độ dài n và ghi lại những xâu đó vào File thuang.out theo từng dòng, dòng đầu tiên ghi lại giá trị của n, các dòng tiếp theo là những xâu thuận nghịch độc có độ dài n. Ví dụ: với n=4, ta có đƣợc những xâu thuận nghịch độc có dạng sau:

4

0 0 0 0

0 1 1 0

1 0 0 1

1 1 1 1

4.2. Viết chƣơng trình quản lý điểm thi của sinh viên bằng single (double) link list bao gồm những thao tác sau:

- Nhập dữ liệu;

- Hiển thị dữ liệu theo lớp, xếp loại . . .;

- Sắp xếp dữ liệu;

- Tìm kiếm dữ liệu;

- In ấn kết quả.

Trong đó, thông tin về mỗi sinh viên đƣợc định nghĩa thông qua cấu trúc sau: typedef struct {

int masv; // mã sinh viên;

char malop[12]; //mã lớp

char hoten[30]; //họ tên sinh viên float diemki; // điểm tổng kết kỳ 1 float diemkii;// điểm tổng kết kỳ 2 float diemtk; // điểm tổng kết cả năm char xeploai[12]; // xếp loại

} sinhvien;

4.3. Biểu diễn biểu thức theo cú pháp Ba Lan. Biểu thức nguyên là một dãy đƣợc thành lập từ các biến kiểu nguyên nối với nhau bằng các phép toán hai ngôi ( cộng: + , trừ : - , lập từ các biến kiểu nguyên nối với nhau bằng các phép toán hai ngôi ( cộng: + , trừ : - , nhân : *) và các dấu mở ngoặc đơn „(„, đóng ngoặc đơn „)‟. Nguyên tắc đặt tên biến và thứ tự thực hiện các phép toán đƣợc thực hiện nhƣ sau:

Qui tắc đặt tên biến: Là dãy các kí tự chữ in thƣờng hoặc kí tự số độ dài không quá 8, kí tự bắt đầu phải là một chữ cái.

Qui tắc thực hiện phép toán: Biểu thức trong ngoặc đơn đƣợc tính trƣớc, phép toán nhân „*‟ có độ ƣu tiên cao hơn so với hai phép toán cộng và trừ. Hai phép toán cộng „+‟ và trừ có cùng độ ƣu tiên. Ví dụ : a * b + c phải đƣợc hiểu là: (a * b) + c.

Dạng viết không ngoặc Ba Lan cho biểu thức nguyên được định nghĩa như sau:

Nếu e là tên biến thì dạng viết Ba Lan của nó chính là e,

Nếu e1 và e2 là hai biểu thức có dạng viết Ba Lan tƣơng ứng là d1 và d2 thì dạng viết Ba Lan của e1 + e2 là d1 d2+, của e1 - e2 là d1 d2-, của e1*e2 là d1 d2* ( Giữa d1 và

d2 có đúng một dấu cách, trƣớc dấu phép toán không có dấu cách),

Nếu e là biểu thức có dạng viết Ba Lan là d thì dạng viết Ba Lan của biểu thức có ngoặc đơn (e) chính là d ( không còn dấu ngoặc nữa) . Ví dụ: Biểu thức (c+b*(f-d)) có dạng viết Ba Lan là : c b f d-*+.

Cho file dữ liệu balan.in đƣợc tổ chức thành từng dòng, mỗi dòng không dài quá 80 ký tự là biểu diễn của biểu thức nguyên A. Hãy dịch các biểu thức nguyên A thành dạng viết Ba Lan của A ghi vào file balan.out theo từng dòng. Ví dụ: với file balan.in dƣới đây sẽ cho ta kết quả nhƣ sau:

balan.in balan.out a+b a b+ a-b a b- a*b a b* (a - b) +c a b- c+ (a + b) * c a b+ c* (a + (b-c)) a b c-+ ( a + b*(c-d)) a b c d-*+ ( (a + b) *c- ( d + e) * f) a b+c* d e+f*-

4.4. Tính toán giá trị biểu thức Ba Lan. Cho file dữ liệu balan.in gồm 2 * n dòng trong đó, dòng có số thứ tự lẻ (1, 3, 5, . . ) ghi lại một xâu là biểu diễn Ba Lan của biểu thức đó, dòng có số thứ tự lẻ (1, 3, 5, . . ) ghi lại một xâu là biểu diễn Ba Lan của biểu thức nguyên A, dòng có số thứ tự chẵn (2,4,6, . .) ghi lại giá trị của các biến xuất hiện trong A. Hãy tính giá trị của biểu thức A, ghi lại giá trị của A vào file balan.out từng dòng theo thứ tự: Dòng có thứ tự lẻ ghi lại biểu thức Ba Lan của A sau khi đã thay thế các giá trị tƣơng ứng của biến trong A, dòng có thứ tự chẵn ghi lại giá trị của biểu thức A.

Ví dụ với file balan.in dƣới đây sẽ cho ta kết quả nhƣ sau:

balan.in balan.out

a b+ 3 5+ (adsbygoogle = window.adsbygoogle || []).push({});

3 5 8

7 3 4

a b* 4 3 *

4 3 12

c a b-+ 3 4 5-+

3 4 5 2

4.5. Lập lịch với mức độ ƣu tiên. Để lập lịch cho CPU đáp ứng cho các quá trình đang đợi của hệ thống, ngƣời ta biểu diễn mỗi quá trình bằng một bản ghi bao gồm những đợi của hệ thống, ngƣời ta biểu diễn mỗi quá trình bằng một bản ghi bao gồm những thông tin : số quá trình(Num) là một số tự nhiên nhỏ hơn 1024, tên quá trình (Proc) là một xâu ký tự độ dài không quá 32 không chứa dấu trống ở giữa, độ ƣu tiên quá trình là một số nguyên dƣơng (Pri) nhỏ hơn 10, thời gian thực hiện của quá trình (Time) là một số thực. Các quá trình đang đợi trong hệ đƣợc CPU đáp ứng thông qua một hàng đợi đƣợc gọi là hàng đợi các quá trình, hàng đợi các quá trình với độ ƣu tiên đƣợc xây dựng sao cho những điều kiện sau đƣợc thoả mãn:

- Các quá trình đƣợc sắp theo thứ tự ƣu tiên;

- Đối với những quá trình có cùng độ ƣu tiên thì quá trình nào có thời gian thực hiện ít nhất đƣợc xếp lên trƣớc nhất.

Cho file dữ liệu lich.in đƣợc tổ chức nhƣ sau:

- Dòng đầu tiên ghi lại một số tự nhiên n là số các quá trình;

- n dòng kế tiếp, mỗi dòng ghi lại thông tin về một quá trình đang đợi.

Hãy xây dựng hàng đợi các quá trình với độ ƣu tiên. Ghi lại thứ tự các quá trình mà CPU đáp ứng trên một dòng của file lich.out, mỗi quá trình đƣợc phân biệt với nhau bởi một hoặc vài ký tự trống, dòng kế tiếp ghi lại số giờ cần thiết mà CPU cần đáp ứng cho các quá trình. Ví dụ với file lich.in dƣới đây sẽ cho ta kết quả nhƣ sau:

lich.in 7 1 Data_Processing 1 10 2 Editor_Program 1 20 3 System_Call 3 0.5 4 System_Interative 3 1 5 System_Action 3 2 6 Writing_Data 2 20 7 Reading_Data 2 10 lich.out 3 4 5 7 6 1 2

63.5

Một phần của tài liệu Bài giảng Các kĩ thuật lập trình: Phần 2 (Trang 41 - 45)