ai cho em biết làm sao để hiện giản đò gantt theo kiểu ngang như thế này không ạ.em đang cần lắm ai biết thì giúp em với
Hỏi cách vẽ giản đồ ganttt
Chắc là bài tập quản lý tiến trình. Cái này để vẽ được cần học đồ họa nếu không làm trên console thế kia được rồi. Bạn có thể tham khảo bài này:
1 Like
- Có chi đâu bác @Ga_Code …nếu làm từ đầu phải tính toán cộng sắp xếp nó mới hơi ngại tí chứ…ở đây bác có sẵn kết quả mô tả lập lịch từng thằng process vào ra như thế nào rồi…thì cứ thế mà vẽ vời trình bày thôi.
- Em không có thời gian nhiều nên nghĩ thế nào là code luôn, bằng những cái hết sức cơ bản (nên có thể nhiều chỗ hơi dài)…ý tưởng là:
- Bác tạo ra 1 hay một số thủ tục vẽ
Draw() - Bác khai báo những đối:
- một biến
step: điếm số lần (số bước) process vào ra. - một mảng
process[]: lưu tên các process lần lượt ở các bước. - một mảng
timein[]: lưu timein lần lượt của từng process trong mỗi bước. - một mảng
timeout[]: lưu timeout lần lượt của từng process trong mỗi bước
- Mấy giá trị này chắc hẳn trong phần tính toán của bác nó đã có, giờ bác cứ thể táng vào cái thủ tục vẽ thôi.
- Cách vẽ thì có nhiều cách nhưng cơ bản nhất là mình chia thành 4 dòng:
- Dòng 1 in ra chỉ số time: giả dụ một cái time là 3 một cái là 13 thì mình dùng cách nào đó là 13-3 cái dấu space…thế là đẹp.
- Dòng 2 in ra khung trên: cái này tùy sở thích em thì thích dùng dấu + ở các góc ô, căn thẳng hàng với mấy số dòng bên trên…còn các cạnh thì dùng - , cũng là theo cách in space dòng bên trên.
- Dòng 3 thì vẽ cái vách ngăn “|” và căn mấy cái tên P1, P2…vào giữa mấy ô.
- Dòng 4 là khung dưới…cũng giống khung trên lên copy lun…có thẻ làm thành 1 cái thủ tục
VeKhung()với các đối là cái biến bên trên để đỡ viết code nhiều lần.
- Cứ thế mà tiến hành…đây là screenshot em táng kết quả của cái ví dụ ở hình của bác:
Vì em không có phần tính toán phía trên nên có thêm một cái thủ tục nhập các mô tả:
http://www.mediafire.com/view/1uog870c5dilhrk/DrawGantt.cpp
1 Like
em khoong hiểu cái
for (int i = TrungBinh(timein[step-1], timeout[step-1]); i < timeout[step-1]; i++) {
cout << " ";
}
để làm gì ạ
thầy bắt hiện theo hàng ngang anh ạ
không tài nào hiện được bác :3
@Ga_Code nói chung là cấu trúc 3 dòng vẽ khá giống nhau…chỉ có dòng giữa (Draw2) là có thêm P1, P2…chèn vào thì để cho ẹp em chỉ tìm cách chia đôi nó ra và chừa ra hai slot khoảng giữa ô cho P1, P2…vào mà vẫn thẳng hàng, thẳng cột.
- Bác để í cái vòng lặp ở giữa mỗi thủ tục
Drawthì em dùngi < timeinvì thế cần có thêm một vòng lặp for để in cái ô cuối cùng (bước cuối cùng) tức là khoảng từtimein[step-1]đếntimeout[step-1](cái đó thi là cơ bản rồi mảng cóstepphần từ thì mảng đi từ0 -> step-1)


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?