cần giúp đỡ về C++

  • Thread starter Thread starter tvt123
  • Ngày gửi Ngày gửi

tvt123

Youtube Master Race
mình học môn này đc 1 tuần rùi và tuần sau phải thi rùi vì học wa nhanh nên mình chưa hiểu nhìu lắm mà sách thì wa ít vi dụ mà mình thì lại ko muốn tốn mấy trăm ngàn để học lại môn này nên các bác ai có lòng giúp mình giải mấy bài ôn tập này với


cái này ko biết nên dùng mircosoft C++ hay dev C++ nữa


Đề ôn thi thực hành môn CTDL
Lớp TH2007-KG

Đề 1:
Một phân số a/b (với a,b là số nguyên và b khác 0) được biểu diễn như một bản ghi có hai trường: Tử số và mẫu số. Hãy viết các khai báo thích hợp để cài đặt một danh sách liên kết chứa các phần tử là phân số. Dùng các khai báo đó để viết chương trình cho phép:
 Tạo danh sách L rỗng.
 Nhập một số phần tử (phân số) vào danh sách, lưu trữ theo thứ tự nhập vào.
 In ra các tất cả phần tử trong danh sách.
 Tìm kiếm và xóa các phần tử của danh sách có giá trị lớn hơn 1.
 In lại danh sách sau khi xóa các phần tử nói trên.

Đề 2:
Một điểm trong mặt phẳng là một cặp giá trị thực (x,y). Một điểm được biểu diễn như một bản ghi có hai trường: x,y. Hãy viết các khai báo thích hợp để cài đặt một danh sách liên kết chứa các phần tử là điểm. Dùng các khai báo đó để viết chương trình cho phép:
 Tạo danh sách rỗng.
 Nhập một số phần tử (điểm) vào danh sách, lưu trữ theo thứ tự nhập vào.
 In ra các tất cả phần tử trong danh sách.
 Tìm kiếm và xóa các phần tử của danh sách là các điểm một tọa độ là 0.
 In lại danh sách sau khi xóa các phần tử nói trên.

Đề 3:
Một điểm trong mặt phẳng là một cặp giá trị thực (x,y). Một điểm được biểu diễn như một bản ghi có hai trường: x,y. Hãy viết các khai báo thích hợp để cài đặt một danh sách liên kết chứa các phần tử là điểm. Dùng các khai báo đó để viết chương trình cho phép:
 Tạo danh sách rỗng.
 Nhập một số phần tử (điểm) vào danh sách, lưu trữ theo thứ tự ngược với thứ tự nhập vào.
 In ra các tất cả phần tử trong danh sách.
 Tìm kiếm và xóa các phần tử của danh sách là các điểm thuộc đường thẳng y=2x.
 In lại danh sách sau khi xóa các phần tử nói trên.

Đề 4:
Hãy viết các khai báo và các thủ tục/hàm thích hợp để cài đặt một ngăn xếp chứa các kí tự. Dùng cấu trúc ngăn xếp đó để viết chương trình kiểm tra một chuỗi kí tự xem có phải là “chuỗi dấu ngoặc đúng” hay không. Chuỗi dấu ngoặc đúng là chuỗi mà các dấu mở khớp với các dấu đóng như trong biểu thức toán học.
Để đơn giản giả sử chuỗi nhập chỉ chứa các kí tự đóng, mở ngoặc. Ví dụ:
• Nhập vào ()() kết quả là: chuỗi dấu ngoặc đúng.
• Nhập vào (()) kết quả là: chuỗi dấu ngoặc đúng.
• Nhập vào )( kết quả là: không phải chuỗi dấu ngoặc đúng.
Gợi ý giải thuật kiểm tra: đọc lần lượt từng kí tự; khi gặp dấu ‘(‘ thì đưa vào stack; gặp dấu ‘)’ và stack không rỗng thì bỏ trên stack một phần tử. Nếu đọc hết chuỗi và stack rỗng thì đó là chuỗi dấu ngoặc đúng.

Đề 5:



Đề 6:
Hãy viết các khai báo thích hợp để cài đặt một cây tìm kiếm nhị phân chứa các khóa là số nguyên. Dùng các khai báo đó để viết chương trình cho phép:
 Nhập vào một dãy khóa số nguyên, lưu trữ vào cây TKNP.
 In ra biểu thức duyệt trung tự của cây.
 Nhập vào một khóa x, thực hiện tìm kiếm x trên cây và thông báo kết quả tìm kiếm. Nếu tìm thấy thì thông báo “tìm thấy” và in ra giá trị của nút tại chổ tìm thấy. Nếu không tìm thấy thì thông báo “không tìm thấy”.
 In ra số nút có hai nút con (không rỗng) trên cây.
 In chiều cao của cây.

Đề 7:
Một điểm trong mặt phẳng được biểu diễn bằng một cặp tọa độ (x,y), với x,y là số thực. Như vậy, có thể cài đặt điểm như là một bản ghi có hai trường x,y. Hãy cài đặt hàng ưu tiên chứa các phần tử là điểm với độ ưu tiên theo tọa độ x.
Chương trình phải cho phép:
- Nhập vào các điểm, lưu trữ trong hàng ưu tiên
- In ra các điểm dạng (x,y) theo thứ tự DeleteMin.

Đề 8:
Một điểm trong mặt phẳng là một cặp giá trị thực (x,y). Một điểm được biểu diễn như một bản ghi có hai trường: x,y. Hãy viết các khai báo thích hợp để cài đặt một bảng băm đóng phần tử là điểm. Hàm băm là hàm x mod B, B là số phần tử của bảng băm. Hàm băm lại là phép thử cầu phương. Dùng các khai báo đó để viết chương trình cho phép:
 Tạo bảng băm rỗng.
 Nhập một số phần tử (điểm) vào bảng băm.
 In ra các tất cả phần tử trong bảng băm.
 Tìm kiếm một phần tử (x,y) trong bảng băm, nếu tìm thấy trả ra vị trí lưu trữ phần tử, không tìm thấy thì trả kết quả -1.
 
xin lỗi các bác vì bài 5 em ko dùng nick của em đem lên đc nên nhờ nick của 1 người bạn em đem lên giùm

và em cũng quên nói với các bác là môn này là môn cấu trúc dữ liệu


attachment.php
 

Attachments

  • untitled.JPG
    untitled.JPG
    49.1 KB · Đọc: 122
trong trường sài cái complier nào sài visual c++ cho nó đẹp đi. Giờ bạn úp đề bài lên để làm gì nhờ người giải hộ àh. Bạn tự làm rùi post cái source lên đây xem có sai th2i có người giúp chứ ai đâu lại ngồi code cho bạn.
 
mình cũng đang cố giải những bài này vì bài mới cho cách đây 1 ngày nên hôm nay CN đang lôi ra giải thử nhung7 mình vẫn chưa biết giải sao đang suy nghĩ

mình đem lên trc xem mọi người có ý kiến gì ko vì mình cũng chỉ mới biết đến cái này đc 1 tuần a` nên vẫn đang coi lại 1 bài vậy cấu trúc nó nhưng thế nàogio72 mình mới biết đc #include <stdio.h> là để gọi hàm::)
 
Tôi chỉ nói 1 câu là tôi rất ghét những thằng mà thầy cho đề, quăng toàn bộ đề lên hỏi cách làm
 
Tôi chỉ nói 1 câu là tôi rất ghét những thằng mà thầy cho đề, quăng toàn bộ đề lên hỏi cách làm

làm gì mà nặng lời dữ vậy, có khi bạn ấy cũng ngồi nghĩ cả ngày mà hok làm được nên mới hỏi
 
Tôi chỉ nói 1 câu là tôi rất ghét những thằng mà thầy cho đề, quăng toàn bộ đề lên hỏi cách làm

tại tui ko hỉu lắm cái này nên mới hỏi chớ bộ, đây chỉ là để ôn tập có phải đề kiểm tra đâu lấy điểm đâu mình chỉ học cái này đúng 1 tuần lễ sáng chiều vậy là xong môn này rùi, học lý thuyết ông nói cái hàm đó mình hiu có công dụng gì nhưng phải lắp vào đâu?, học thực hành mình làm sai hỏi bị sao ông chỉ nói tại vì thiếu dấu , hay thiếu hàm viết sao chữ hoa với chữ thường nhưng ko chỉ phải chỉ lại chỗ nào nói vậy bố ai biết đường đâu thêm vô mà sữa nên mình mới đem lên đây xem có ai có lòng tốt giúp mình vài đc ko thui ::(
 
rùi tối nay mình rãnh mình làm giúp bạn bài dễ nhất bài 1 có comment cho bạn ok giúp thế thui nhá.
 
sau 1 tiếng ko kiếm ra link dơn cái visual c++ 6.0 rồi, dev ko biết sài thế nên gơii5 ý bạn làm bài 1 như vầy:

1> tạo 1 cái struct cho Phân số gồm 2 trường tử và mẫu ( yếu cầu là mẫu ko được bằng ko)
2> tạo các hàm cho S phân số bao gồm: Nhập,Hiển thị
3> Tạo 1 cái struct L với các hàm của nó : Struct này gồm 2 trường(Phấn Số và Con trỏ)

Thế là xong bài nào mà danh sách cũng cứ như vậy mà làm
 
dev khá dễ xài mà nhấp F9 để chạy cái bài đó cũng tìm chỗ save lại trc rui mới chạy CT đc. cảm ơn đã giúp mình :'> bạn có thể chỉ cần làm 2 ý trong bài vì ông thầy nói bài thi cũng cho mấy dạng đó thui làm bao nhiu ý ko cần biết chỉ cần làm đc 1 ý mà CT chạy đc là đậu thực hành

bạn có thể pót lên 1 bải mẫu đc ko những bài khác nếu tương tự mình xem tự làm nếu ko đc mình hỏi tiếp::)
 
ồ hóa ra bạn học môn CTDL giống mình rồi.......có gì tham khảo đề thi vậy.........:'>
 
Mã:
 struct PhanSo
{
	int tu;
	int mau;

};
void KhoiTao(PhanSo &ps)
{
	ps.tu=0;
	ps.mau=0;
}
void Xuat(const PhanSo &ps)
{
	cout<<ps.tu;
	if(ps.mau!=1)
		cout<<"/"<<ps.mau;
	cout<<"\n";
}
void ToiGian(PhanSo &ps)
{
	int a=abs(ps.tu);
	int b=abs(ps.mau);
	while(a!=b)
	{
		if(a>b)
		{
			a=b-b;
		}
		if(a<b)
		{
			b=b-a;
		}
	}
	ps.tu /=a;
	ps.mau /=a;
	if(ps.mau<0)
	{
		ps.tu=-ps.tu;
		ps.mau=-ps.mau;
	}
}
void Nhap(PhanSo &ps)
{
	int t,m;
	char tmp;
	cout<<" Nhap PhanSo (a/b)";
	cin>>t>>tmp>>m;
	while(m==0)
	{
		cout<<"Nhap Lai PhanSo (a/b) :";
		cin>>t>>tmp>>m;
		
	}
	ps.mau=m;
	ps.tu=t;
	ToiGian(ps);
}
//Tạo list để chứa phân số.
struct Node
{
	PhanSo ps;
	Node *pnext;
};
typedef Node * List;
void InitList(List &l)
{
	l=0;
}
Node * NewNode(const PhanSo &ps)
{
	Node *pnew= new Node;
	pnew->pnext=0;
	pnew->ps=ps;
	return pnew;
}
void ThemSau(List &l, const PhanSo &ps)
{
	Node *pnew=NewNode(ps);
	if(l==0)
	{
		l=pnew;
	}
	else
	{
		Node *p=l;
		while(p->pnext!=0)
		{
			p=p->pnext;
		}
		p->pnext=pnew;
	}
}
void Duyet(List l)
{
	Node *p=l;
	while(p!=0)
	{
		Xuat(p->ps);
		p=p->pnext;
	}
}
làm sơ sài vậy thui hà, xem thử cho ý kiến
 
Mã:
int _tmain(int argc, _TCHAR* argv[])
{
	PhanSo ps1,ps2,ps3;
	Nhap(ps1);
	Nhap(ps2);
	Nhap(ps3);
	//Tạo vòng lập để test th2i hay hơn.
	List l;
	InitList(l);
	ThemSau(l,ps1);
	ThemSau(l,ps2);
	ThemSau(l,ps3);
	Duyet(l);
	return 0;
}
cái hàm main test với 3 cái phân số, tất nhiên khi cần nhập nhiều thì sài vòng lập cho nó khỏe.

Lưa ý khi tạo danh sách liên kết thì phài có hàm khời tạo, nếu ko có hàm khời tạo thì coi như out luôn.
Khi định nghĩa struct thì phài có dấu ";" nếu hem nó báo lỗi dã man lém, ko phài cái lỗi kiều như thiếu dấu ";" đâu mà lỗi tè le hột me luôn.


Với các hàm thêm thì bao gồm 3 hàm: Thêm Sau list, Thêm đầu list, thêm sau 1 nốt---> khi viết cần quan tâm tới cái pnext của nơi cần thêm chì cần 1 cái pnext bị sai là toàn bộ bị sai.
Nếu truyền 1 đối tượng vào hàm thì tránh truyền trị vì nó sẽ tạo bản sao rất tốn kém bộ nhớ, nên truyền tham chiếu hằng như vầy "void Xuat(const PhanSo &p)" đừng sài loại này "void Xuat(PhanSo p)"
 
em vời mới làm xong các bác xem có gì khác ko:hug:

hình như bài số 7 em làm sai rui
 

Attachments

tôi thấy có quyển bài tập ở ngoài hiệu sách có 10k hay sao ý hay phết quyển :"Hướng dẫn học C++" trong 10 tiếng đó
 
cho tui hỏi là với bài toán tìm số lớn nhất trong 5 số thì mình dùng hàm nào so sánh để tìm ra số lớn nhất không ?
ý tưởng thì mình có như là lấy 1 số so sánh với những số còn lại , số nào lớn thì lấy số đó ss tiếp cho đến khi ra số lớn nhất . Nhưng lại không biết dùng lệnh nào để viết =((.bạn nào chỉ mình với nhé . thanks . mình mới học C++ dc có 1 tuần thôi :p
 
viết hàm getMax
giả sử 5 số a,b,c,d,e
getMax(getMax((getMax(getMax(a,b),c),d),e);
Đấy là nếu bạn muốn viết cách lọc 2 số lớn 1 :))
 
diễn giải cái phần ở trên getmax gì đó:
Mã:
int Max(int a, int b ,int c, int d, int e)
{
	int kq=a;
	if(kq<b)
		kq=b;
	if(kq<c)
		kq=c;
	if(kq<d)
		kq=d
	id(kq<e)
		kq=e;
return kq;	
}
//cứ thế mà làm, nếu kiếm số lớn nhất trong 1 trăm số thì cứ paste vào cái mảng rùi chơi cái vòng lặp for mà duyệt như thế là ok
 
ý tưởng thì mình có như là lấy 1 số so sánh với những số còn lại , số nào lớn thì lấy số đó ss tiếp cho đến khi ra số lớn nhất . Nhưng lại không biết dùng lệnh nào để viết .bạn nào chỉ mình với nhé . thanks . mình mới học C++ dc có 1 tuần thôi
ý tưởng của bạn ấy là thế này cơ mà. Vì vậy làm 1 hàm getMax thế kia nó ko hợp lí.
PHP:
int getMax(int x,int y){
     if (x>y) return x;
     return y;
}
Gọi 5 số thì thế này getMax(getMax((getMax(getMax(a,b),c),d),e);
 
Back
Top