Project I Giải thuật lập trình C Project I CHỦ ĐỀ: GIẢI THUẬT VÀ LẬP TRÌNH C Lớp: KTMT&TT1-K54 Thời gian: 15 tuần (Tuần 2-16) Bài Giải thuật Sắp xếp (Sorting Algorithms) Tìm hiểu giải thuật xếp dãy (8 giải thuật): - Sắp xếp kiểu chọn (Selection Sort) - Sắp xếp bọt (Bubble Sort) - Sắp xếp kiểu chèn (Insertion Sort) - Sắp xếp kiểu phân đoạn (Quick sort) - Sắp xếp kiểu vun đống (Heap Sort) - Sắp xếp trộn (Merge Sort) - Sắp xếp phép đếm phân phối (Distribution Counting) - Sắp xếp số (Radix Sort): Theo kiểu hoán vị khóa (Radix Exchange Sort) xếp số trực tiếp (Straight Radix Sort) Cài đặt giải thuật xếp (Viết chương trình C) - Dữ liệu vào file văn SORT.INP chứa không nhiều 106 khoá giá trị khoá số tự nhiên không 106 Kết ghi file văn SORT.OUT chứa dãy khoá sắp, khố dòng - Chương trình có giao diện dạng menu, chức tương ứng với thuật tốn xếp (Gọi chương trình con) - Đánh giá, nhận xét độ phức tạp giải thuật xếp Bộ môn Kỹ thuật Máy tính – Viện CNTT&TT Project I Giải thuật lập trình C Bài Cấu trúc liệu danh sách Tìm hiểu cấu trúc liệu danh sách (nối đơn, nối kép, nối vòng) Các kỹ thuật xử lý (duyệt, thêm/bớt phần tử, tìm kiếm) Thực hành viết chương trình C giải tốn sau: Lập chương trình quản lý danh sách sinh viên, tuỳ chọn loại danh sách cho phù hợp, chương trình có chức sau: (Hồ sơ sinh viên giả sử có: Tên, lớp, số điện thoại, điểm TB …) - Cho phép nhập danh sách sinh viên từ bàn phím hay từ file - Cho phép in danh sách sinh viên gồm có tên xếp loại - Cho phép in danh sách sinh viên gồm thông tin đầy đủ - Cho phép nhập vào từ bàn phím tên sinh viên tên lớp, tìm xem có sinh viên có tên nhập vào lớp khơng ? Nếu có in số điện thoại sinh viên - Cho phép vào hồ sơ sinh viên từ bàn phím, bổ sung sinh viên vào danh sách sinh viên, in danh sách - Cho phép nhập vào từ bàn phím tên lớp, loại bỏ tất sinh viên lớp khỏi danh sách, in danh sách - Có chức xếp danh sách sinh viên theo thứ tự giảm dần điểm trung bình - Cho phép nhập vào hồ sơ sinh viên từ bàn phím, chèn sinh viên vào danh sách mà không làm thay đổi thứ tự xếp, in danh sách - Cho phép lưu trữ lại đĩa danh sách sinh viên thay đổi Bộ môn Kỹ thuật Máy tính – Viện CNTT&TT Project I Giải thuật lập trình C Bài Cấu trúc liệu ngăn xếp (stack) hàng đợi (queue): Tìm hiểu cấu trúc liệu ngăn xếp, hàng đợi Các kỹ thuật xử lý ngăn xếp, hàng đợi Vận dụng viết chương trình C giải tốn sau: - Hình vẽ mơ tả di chuyển toa tàu ga xe lửa: - Ban đầu đường ray A chứa toa tàu đánh số từ tới n theo thứ tự từ trái qua phải, người ta muốn chuyển toa sang đường ray C để thứ tự hoán vị (1, 2, …, n) theo quy tắc: đưa toa tàu chạy theo đường ray theo hướng mũi tên, dùng đoạn đường ray B để chứa tạm toa tàu trình di chuyển a) Hãy nhập vào hốn vị cần có, cho biết có phương án chuyển hay khơng, có đưa cách chuyển: Ví dụ: n = 4; Thứ tự cần có (1, 4, 3, 2) 1)A → C; 2)A → B; 3)A → B; 4)A → C; 5)B → C; 6)B → C b) Những hoán vị thứ tự toa tạo thành đoạn đường ray C với luật di chuyển Bài Cấu trúc liệu (Tree) Biểu thứ tiền tố, hậu tố - Tìm hiểu cấu trúc liệu (Tree) kỹ thuật xử lý - Tìm hiểu ký pháp tiền tố, trung tố, hậu tố - Viết chương trình C tính giá trị biểu thức: Input: File văn CAL.INP gồm dòng có không 255 ký tự, biểu thức số học dạng trung tố chứa số thực toán tử {(, ), +, -, *, /} Output: File văn CAL.OUT chứa: - Dạng hậu tố biểu thức - Dạng tiền tố biểu thức - Kết biểu thức Bài Kỹ thuật nhánh cận, toán người du lịch Cho n thành phố đánh số từ đến n m tuyến đường giao thông hai chiều chúng, mạng lưới giao thông cho bảng C cấp nxn, C[i, j] = C[j, i] = Chi phí đoạn đường trực tiếp từ thành phố i đến thành phố j Giả thiết C[i, i] = với ∀i, C[i, j] = +∞ khơng có đường trực tiếp từ thành phố i đến thành phố j Một người du lịch xuất phát từ thành phố 1, muốn thăm tất thành phố lại thành phố lần cuối quay lại thành phố Hãy cho người hành trình với chi phí Bài tốn gọi tốn người du lịch hay tốn hành trình thương gia (Traveling Salesman) Bộ môn Kỹ thuật Máy tính – Viện CNTT&TT Project I Giải thuật lập trình C Viết chương trình C giải tốn với yêu cầu: Input: file văn TOURISM.INP Dòng 1: Chứa số thành phố n (1 ≤ n ≤ 100) số tuyến đường m mạng lưới giao thơng m dòng tiếp theo, dòng ghi số hiệu hai thành phố có đường trực tiếp chi phí qng đường (chi phí số nguyên dương ≤ 10000) Output: file văn TOURISM.OUT, ghi hành trình tìm Minh họa: Bài Bài toán qui hoạch động, toán túi Trong siêu thị có n gói hàng (n ≤ 100), gói hàng thứ i có trọng lượng W[i] ≤ 100 trị giá V[i] ≤ 100 Một tên trộm đột nhập vào siêu thị, tên trộm mang theo túi mang tối đa trọng lượng M ( M ≤ 100) Hỏi tên trộm lấy gói hàng để tổng giá trị lớn Viết chương trình giải tốn với yêu cầu: Input: file văn BAG.INP Dòng 1: Chứa hai số n, M cách dấu cách n dòng tiếp theo, dòng thứ i chứa hai số nguyên dương W[i], V[i] cách dấu cách Output: file văn BAG.OUT Dòng 1: Ghi giá trị lớn tên trộm lấy Dòng 2: Ghi số gói bị lấy Bài Thuật tốn Dijkstra tìm đường ngắn Có n thành phố (đánh số 1,2,…n) Sơ đồ mạng lưới giao thông n thành phố cho ma trận A[i,j] đó: - A[i,j] độ dài đường từ thành phố i đến thành phố j - A[i,j] = ∞ khơng có đường từ thành phố i đến thành phố j - A[i,j] ngun, khơng âm Bộ mơn Kỹ thuật Máy tính – Viện CNTT&TT Project I Giải thuật lập trình C - Có thể tồn đường chiều chiều thành phố i, j (Nếu chiều từ i đến j A[i,j]= ∞, có chiều từ j đến i A[j,i] = c) Hãy xác định đường ngắn từ thành phố s đến thành phố f Input: File văn MINPATH.INP với nội dung: - Dòng đầu ghi số n thành phố (0