Nhờ chỉ về code sử dụng con trỏ

Nhờ mọi người chỉ giáo em phần sử dụng con trỏ trong bài này được không ạ?

Hi there,

Cậu đã thử code chưa? Ném code cho bọn tớ trước được không?
Ngoài ra, phần con trỏ nào cậu gặp vấn đề thế? :smile:

Topic này sẽ được đóng lại sau 1 ngày, nếu như không có thông tin gì thêm.

4 Likes
#include<iostream.h>
#include<iomanip.h> 
using namespace std; 
struct NS
{
	int ngay;
	int thang;
	int nam; 
}; 
class VDV
{
	protected: 
		char hoten[20];
		NS ns;
	 	float namtd; 	
	public:
		VDV(char a[], NS b, float c)
		{
			strcpy(hoten,a);
			ns=b; 
			namtd=c; 
		}
		~VDV()
		{
			
		}
		void nhap()
		{
			cout<<"-Nhap ho ten: ";cin.getline(hoten,30);
			cout<<"\n-Nhap lan luot ngay thang nam sinh: ";cin>>ns.ngay>>ns.thang>>ns.nam;
			cout<<"\n-Nhap so nam thi dau: ";cin>>namtd;	
		}
		void xuat()
		{
			cout<<setw(30)<<hoten<<setw(30)<<ns.ngay<<"/"<<ns.thang<<"/"<<ns.nam<<setw(20)<<namtd; 
		}
};
class VDVB: public VDV
{
	protected: 
		int sohc;
		string nd;
	public:
		VDVB(char a[], NS b, float c, int d, string e): VDV(a,b,c)
		{
			sohc=d;
			nd=e; 
		} 
		~VDVB()
		{
			
		} 
		friend istream& operator>>(istream &is, VDVB a)
		{
			a.nhap(); 
			cout<<"\n-Nhap so huy chuong: ";cin>>a.sohc;
			cout<<"\n-Nhap noi dung thi dau: ";fflush(stdin);getline(cin,a.nd); 
			return is; 
		}
		float tinhtienthuong() 
		{
			return (sohc*5000000+ namtd*6000000); 
		}
		friend bool operator <(VDVB a,VDVB b)
		{
			if(a.sohc< b.sohc)
			return true;
			else 
			return false; 
		} 
		friend ostream& operator<<(ostream &os, VDVB a)
		{
			a.xuat();
			cout<<setw(10)<<a.sohc<<setw(20)<<a.nd;
			return os; 
		} 
		char* gethoten()
		{
			return hoten; 
		} 
		float getnamtd()
		{
			return namtd; 
		} 
		int getngaysinh()
		{
			return ns.ngay; 
		} 
		int getthangsinh()
		{
			return ns.thang; 
		}
		int getnamsinh()
		{
			return ns.nam; 
		}  
};
void menu()
{
	cout<<"-------------------------------------MENU-----------------------------------------------"<<endl;
	cout<<"1.IN DANH SACH CAC VAN DONG VIEN BOI DA NHAP DANG BANG----------------------------------"<<endl;
	cout<<"2.IN RA DANH SACH VAN DONG VIEN BOI CO HO TEN LE VAN MINH-------------------------------"<<endl;
	cout<<"3.IN RA DANH SACH CAC VAN DONG VIEN BOI THEO THU TU GIAM DAN CUA SO HUY CHUONG DAT DUOC-"<<endl;
	cout<<"4.TIM TRONG DS CO VDV NAO CO SO NAM THI DAU LA 10 CHUA----------------------------------"<<endl;
	cout<<"5.XOA KHOI DANH SACH CAC VDV BOI SAU NGAY 10/10/1996------------------------------------"<<endl; 
	cout<<"----------------------------------------------------------------------------------------"<<endl; 
} 
int main()
{
	int n,k=-1;
	cout<<"Nhap so van dong vien boi: ";
	cin>>n;
	VDVB *a[100];
	for(int i=0;i<n;i++)
	{
		cin>>*a[i]; 
	}
	menu();
	while(k!=0)
	{
		cout << "\nMoi chon menu:";
        cin >> k;
	} 
	switch (k)
        {
        	case 1:
        	{
        		cout<<setw(30)<<"HO TEN"<<setw(20)<<"NGAY SINH"<<setw(20)<<"SO NAM THI DAU"<<setw(10)<<"SO HUY CHUONG"<<setw(20)<<"NOI DUNG THI DAU"<<endl; 
        		for(int i=0;i<n;i++)
				{
					cout<<a[i]; 
				} 
				break;
        	}
        	case 2:
        	{
        		int dem=0; 
				char t[100]="Le Van Minh";
				for(int i=0;i<n;i++)
				{
					if(strcmpi(a[i]->gethoten(),t)==0)
					{
					cout<<a[i]; 
					dem++; 
					}
				} 
				if(dem=0)
				cout<<"Khong xuat hien VDV ten LE VAN MINH"<<endl; 
				break; 
        	}
        	case 3:
        	{ 
        		for(int i=0;i<n;i++)
        		{
        			for(int j=i+1;j<=n;j++)
        			if(a[i]<a[j])
					swap(a[i],a[j]);
		        }
		        cout<<"\nDANH SACH SAU KHI SX GIAM DAN THEO HUY CHUONG LA:"<<endl; 
		        for(int i=0;i<n;i++)
		        {
        			cout<<a[i]; 
        		}
        	}
        	case 4:
        	{
        		int k; 
        		int dem=0; 
      			for(int i=0;i<n;i++)
      			{
			      if(a[i]->getnamtd()==10)
			      dem++; 	
     			}
     			if(dem==0)
     			{
			     	cout<<"\nNhap vao vi tri can them: ";cin>>k; 
					if(k>=n){
					break; 
					}
					if(k<0){
						k=0; 
					} 
					if(k>n){
						k=n;
					}
					for(int i=n;i>k;i--)
					{
						a[i]=a[i-1]; 
					}
					cin>>*a[k];
					++n;	
     			} 
     			else
				 	cout<<"\nDa xuat hien vdv co so nam thi dau bang 10"<<endl; 
        	}
			case 5:
 			{
		        	for(int i=0;i<n;i++)
		        	{
	        			if(a[i]->getnamsinh()>1996)
						{
							for (int j = i; j < n; j++) {
                			a[j] = a[j+1];
                			n--; 
						}
						}
						if(a[i]->getnamsinh()==1996&&a[i]->getthangsinh()>10)
						{
							for (int j = i; j < n; j++) {
                			a[j] = a[j+1];
                			n--; 
						}
						}
						if(a[i]->getnamsinh()==1996&&a[i]->getthangsinh()==10&&a[i]->getngaysinh()>10)
						{
							for (int j = i; j < n; j++) {
                			a[j] = a[j+1];
                			n--; 
						}
						}
							
	        		}
	        		for(int i=0;i<n;i++)
	        		{
		        		cout<<*a[i]; 
		        	}
 			}
        	case 6:
        	{
            	cout << "Thoat!!\n";
            	k = 0;
            	break;
        	}
       		default:
        	{
            	cout << "Chuc nang ban chon khong co, moi nhap lai:\n";
            	break;
        	}
        }
}

b xem giúp mình với mik đang gặp vấn đề khi sử dụng con trỏ

Con trỏ nào thế cậu? Và cậu gặp vấn đề gì? Cậu có thể nói rõ hơn được không?
Nó cũng giúp các bạn khác hiểu được vấn đề nhanh hơn và dễ giúp cậu hơn.

À, viết tiếng Việt cẩn thận nhé cậu :smile:

5 Likes

trong phần main tôi đang muốn sử dụng con trỏ để quản lý mảng vận động viên bơi nhưng khi chạy chương trình thì chỉ xuất hiện nhập số vận đông viên bơi và không cho nhập tiếp. Tôi đoán mình đang bị sai khi sử dụng con trỏ trong phần main

1 Like

Bạn đã dùng đến 1 thứ nguy hiểm: con trỏ.
Bạn khai báo mảng con trỏ 100 phần tử có nghĩa là: mảng đó chỉ chứa 100 con trỏ có giá trị NULL (null_ptr).
Mà bạn nên biết (hoặc đã biết), thao tác với NULL thì sẽ lỗi lắm đấy.

Trong C++ thì tạo con trỏ mới cho 1 lớp bằng từ khóa new.

5 Likes

Cảm ơn bạn nhé. Bạn có thể hướng dẫn mình cách khắc phục lại lỗi này được không. Mình hơi yếu về phần con trỏ này

Nếu bạn đã học con trỏ trong C++ thì chắc chắn từ khóa này bạn phải học qua rồi chứ.

4 Likes

ok cảm ơn b đã chie giúp mình nhé. Bạn cho mình hỏi thêm chút về cách đọc file text trong đề bài dược không ak

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