thắc mắc Giúp đỡ Đồ án Nhập môn lập trình C#

Chắc chủ ý người ra đề bắt sinh viên phải tự cài đặt List, mà quái lạ thường sẽ dùng C++ để có cơ hội đụng đến pointer chứ nhỉ?
C# cũng có pointer nhưng không có lí do gì lại tìm hiểu pointer bằng C# cả :eek::eek:
Cách chuối nhất nếu dùng C# là dùng mảng, mỗi khi hết mảng thì cấp phát lại mảng mới có độ dài gấp đôi rồi copy các phần tử có sẵn qua. Dùng 2 biến Length và MaxLength để theo dõi.
Nói thế chứ nhiều thứ phải xử lý phết đó. Search k cẩn thận time out luôn. Bài chắc 1 bảng chính lưu data. Vài cái mảng link list hash map bọn value kia lại để search cho nhanh. K là search đến mùa quý bảng hai chiều chắc mà max Szie rồi.
 
Ban đầu em tạo 1 mảng 2 chiều MatHang[,] kiểu chuỗi rồi tạo biến cho từng mục mã hàng, tên hàng... để user nhập vào mảng.

Nhưng nhập tiếp mặt hàng thứ 2 trở đi thì dữ liệu nhập sau nó đè lên cái trước đó chứ nó không add tiếp vào mảng như em tưởng @@. Hay là mảng nó chỉ được như vậy thôi ạ?

Hàm tìm kiếm em thử tạo biến bool k = MatHang[i,j].Contains(biến user nhập vào - chỗ này em hỏi nhập mã hàng), nếu k == true thì chạy vòng lặp xuất mảng, nhưng nó chỉ xuất mỗi cái biến mã hàng, mấy cái khác như tên hàng, hạn dùng thì lại không xuất.

Còn lại xoá với sửa thì em bó tay.
bài này chỉ cần mảng 1 chiều thôi.
tạo 1 struct lưu thông tin hàng,
add dữ liệu thì check mảng có dữ liệu chưa thì mới add.
nếu add element mới mà vượt quá độ dài mảng ban đầu thì tạo 1 mảng mới có độ dài lớn hơn rồi copy mảng cũ qua, sau đó add element mới vào
 
Nói thế chứ nhiều thứ phải xử lý phết đó. Search k cẩn thận time out luôn. Bài chắc 1 bảng chính lưu data. Vài cái mảng link list hash map bọn value kia lại để search cho nhanh. K là search đến mùa quý bảng hai chiều chắc mà max Szie rồi.
Là sao bác, chỉ được xài array, chứ có cho xài hash map đâu?
Muốn tối ưu search thì cần phải xác định search theo trường nào, mã hay tên mặt hàng. Lúc thêm vào thì thêm theo thứ tự một thuộc tính nào đó để áp dụng được binary search là ok.
 
Là sao bác, chỉ được xài array, chứ có cho xài hash map đâu?
Muốn tối ưu search thì cần phải xác định search theo trường nào, mã hay tên mặt hàng. Lúc thêm vào thì thêm theo thứ tự một thuộc tính nào đó để áp dụng được binary search là ok.
Tự hash lấy chứ. Muốn áp dụng Binary Search cho case có thêm sửa xóa thì cần triển khai link-list thật tốt.Nhưng bạn chỉ sort theo 1 thuộc tính. Bạn định cho user chỉ search theo 1 thuộc tính à? Nếu bài tập cho search theo 1 thuộc tính nào đó bất kỳ thì sao?
P/s nhầm fen vs ông đi hỏi bài nhé. T viết gợi ý cho e nó ở dưới. Chả hiểu đi học làm sao mà bài tập lớn mới thế đã bảo k biết làm từ đâu.
 
Last edited:
lâu rồi ko đụng C, nhớ trong C struct nó giống đối tượng mà nhỉ, cứ khai báo cái struct hàng hóa, nhét thuộc tính vào, rồi đẩy nó vào mảng , hoặc danh sách liên kết đơn thôi nhỉ
 
1 - Dùng struct tạo object (mã hàng, tên hàng, công ty sản xuất, năm sản xuất, hạn sử dụng, loại hàng) 6 thuộc tính => dễ
2 - Dùng Array tạo danh sách hàng hóa => dễ
3 - Thêm Mặt Hàng vào => dễ (nếu kích thước bài toán k vượt quá giới hạn Array thì k cần tận dụng lại index) còn nếu k giới hạn thì khó thậm trí là cần 2,3 Array
4 - Sửa => cần Tìm đc mới sửa.
5 - Xóa => Cần Tìm đc mới xóa đc. Ngoài ra phải lưu ý như "Thêm"
6 - Tìm => Cái này sẽ rất dễ nếu yêu cầu chỉ tìm theo Mã Hàng.
- Case 1 Tìm theo Mã Hàng => Sort theo mã hàng ngay lúc thêm vào và xóa đi. Để đảm bảo tính sort này và search nhanh thì dùng link list.
- Case 2 Tìm theo mọi thuộc tính: khó nhé (vẫn có thể triển khai cái như case 1 trước để tăng kỹ năng).
-> giờ search theo từng thuộc tính => cần số mảng Hash tương ứng cho số thuộc tính. Nhưng cần lưu Hash này dễ trùng nhau => Mỗi Hash là 1 link-list tiếp.
ví dụ :
+ thuộc tính thuộc tính Tên Hàng : ABCD XYZ gì đó đề ra Hash là XXX
+ nhưng mình sẽ lưu [XXX] -> index của ABCD -> index XYZ (XXX tưng ứng là index trong mảng Hash này)
+ Khi này search Tên Hàng mình chỉ cần Hash nó ra rồi counting search là ra ngay nó trong mảng hash. => mình chỉ cần duyệt cho link-list này lấy ra các index của mảng Mặt Hàng và check lại value.

Mình viết bằng Notepad++ bạn copy ra nhìn line cho rõ. Step by step thiếu đâu gg tự implement nhé.
Thân.
 
Mình là dân chuyển ngành không học CNTT . Mấy tháng trước có pv cty Mecury cũng yêu cầu làm bài toán mà chỉ được dùng Array, không được dùng List, LinQ :LOL: Lúc đó ngồi suy nghĩ một hồi thấy lười quá, thấy độ ông pv cũng khó chịu nên thôi bảo không biết làm luôn. Giờ mà gặp mấy bài kiểu này chắc ngồi làm + google cả ngày mới ra :LOL:
 
Mình là dân chuyển ngành không học CNTT . Mấy tháng trước có pv cty Mecury cũng yêu cầu làm bài toán mà chỉ được dùng Array, không được dùng List, LinQ :LOL: Lúc đó ngồi suy nghĩ một hồi thấy lười quá, thấy độ ông pv cũng khó chịu nên thôi bảo không biết làm luôn. Giờ mà gặp mấy bài kiểu này chắc ngồi làm + google cả ngày mới ra :LOL:
Code cả ngày thật ấy chứ. Mấy cái này lỗi vặt mà fix khó mà :D
 
List thật ra cũng chỉ là Array thôi, nhưng lúc thêm vô mà quá giới hạn của Array thì nó sẽ copy sang một mảng Array mới bự hơn. Mà mảng 2 chiều để làm gì nhỉ?
 
bài này chỉ cần mảng 1 chiều thôi.
tạo 1 struct lưu thông tin hàng,
add dữ liệu thì check mảng có dữ liệu chưa thì mới add.
nếu add element mới mà vượt quá độ dài mảng ban đầu thì tạo 1 mảng mới có độ dài lớn hơn rồi copy mảng cũ qua, sau đó add element mới vào
1 - Dùng struct tạo object (mã hàng, tên hàng, công ty sản xuất, năm sản xuất, hạn sử dụng, loại hàng) 6 thuộc tính => dễ
2 - Dùng Array tạo danh sách hàng hóa => dễ
3 - Thêm Mặt Hàng vào => dễ (nếu kích thước bài toán k vượt quá giới hạn Array thì k cần tận dụng lại index) còn nếu k giới hạn thì khó thậm trí là cần 2,3 Array
4 - Sửa => cần Tìm đc mới sửa.
5 - Xóa => Cần Tìm đc mới xóa đc. Ngoài ra phải lưu ý như "Thêm"
6 - Tìm => Cái này sẽ rất dễ nếu yêu cầu chỉ tìm theo Mã Hàng.
- Case 1 Tìm theo Mã Hàng => Sort theo mã hàng ngay lúc thêm vào và xóa đi. Để đảm bảo tính sort này và search nhanh thì dùng link list.
- Case 2 Tìm theo mọi thuộc tính: khó nhé (vẫn có thể triển khai cái như case 1 trước để tăng kỹ năng).
-> giờ search theo từng thuộc tính => cần số mảng Hash tương ứng cho số thuộc tính. Nhưng cần lưu Hash này dễ trùng nhau => Mỗi Hash là 1 link-list tiếp.
ví dụ :
+ thuộc tính thuộc tính Tên Hàng : ABCD XYZ gì đó đề ra Hash là XXX
+ nhưng mình sẽ lưu [XXX] -> index của ABCD -> index XYZ (XXX tưng ứng là index trong mảng Hash này)
+ Khi này search Tên Hàng mình chỉ cần Hash nó ra rồi counting search là ra ngay nó trong mảng hash. => mình chỉ cần duyệt cho link-list này lấy ra các index của mảng Mặt Hàng và check lại value.

Mình viết bằng Notepad++ bạn copy ra nhìn line cho rõ. Step by step thiếu đâu gg tự implement nhé.
Thân.
Em cảm ơn 2 bác đã tận tình chỉ dẫn :adore: ,nãy giờ ngồi mò cái struct mà quên thời gian luôn.
Để sáng mai em nghiên cứu rồi làm luôn :beauty:. Giờ đi ngủ cái đã :sleep:
 
Bài hay nhỉ. Rảnh code thử phát xem thế nào :))
Bài hay mà
Ông nào google rồi làm được xong bài này mà vẫn không biết lập trình thì tôi cũng chịu đấy
Chứ cái thể loại code monkey dùng lib và stack over flow quen tay đố làm nổi bài này :shame:
 
Dạ vâng để em nghiên cứu thử.

Mà bác cho em hỏi là có cách nào cho phép user nhập nhiều chuỗi phần tử vào mảng không ạ? Chứ mỗi lần muốn thêm chuỗi phần tử mới chẳng lẽ cứ phải tạo thêm biến mới ạ? Hay là phải hỏi ngay từ đầu luôn?
Em có thể init mảng với phần tử biết trước:
string[] array = new string[] { "A", "B" };
 
Không rành c# nên ko biết array với list khác gì nhau nhỉ []. Nếu là t thì t dùng struct tạo linked list xong xử lý tiếp :D
 
Không rành c# nên ko biết array với list khác gì nhau nhỉ []. Nếu là t thì t dùng struct tạo linked list xong xử lý tiếp :D
List bản chất nó là Array, nhưng có lớp bọc bên ngoài để tạo thành dynamic array thôi, hỗ trợ xóa, sửa, thêm mới. Còn Array thì fixed size, không thêm mới được nếu quá giới hạn. Cái Array trong List khi quá giới hạn thì nó đơn giản là copy sang một Array mới với size bự hơn. Bởi vậy nên dùng list thì có thể dùng list[0], list[1] được.
List best cho việc khởi tạo 1 lần rồi lấy dữ liệu từ nó, còn perf cho việc thêm xóa sửa thì hơi tệ. Còn LinkedList thì ngược lại, best cho việc thêm xóa nhưng lấy dữ liệu thì lại không nhanh bằng List.
 
Back
Top