Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Kiểm tra lỗi bài cầu thủ bóng đá giúp em với!!!

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    5

    Unhappy Kiểm tra lỗi bài cầu thủ bóng đá giúp em với!!!

    Mới vô là cái Lớp Date
    Code:
    #include "Date.hpp"
    #include <iostream>
    using namespace std;
    class Date
    {
        private : 
            int ngay, thang, nam;
        public : 
            Date();
            Date(int,int,int);
            void Nhap();
            void In();
            int HopLe();
            Date Cong();
            Date operator + (int n);
            Date operator + (Date d);
            int operator > (Date d);    
    };
    Date::Date(){
        ngay = 1;
        thang = 1;
        nam = 2000;
    }
    Date::Date(int d,int m,int y)
    {
        ngay = d;
        thang = m; 
        nam = y;
    }
    void Date::Nhap(){
        while(1){
            cout <<"Nhap ngay : ";cin >> ngay;
            cout <<"Nhap thang : "; cin >> thang;
            cout <<"Nhap nam : ";cin >> nam;
            if(HopLe()) break;
            cout << "Ngay khong hop le - Nhap lai";
            cout << endl;
        }
    }
    void Date ::In()
    {
        cout << ngay << "/" << thang << "/" << nam;
    }
    int Date::HopLe(){
        if(ngay < 0 || thang < 0 || thang > 12)
            return 0;
        if(thang == 2 && nam % 4 ==0)
            return (ngay <30);
        int ngaymax[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        return (ngay <=ngaymax[thang]);
            
    }
    Date Date::Cong(){
        Date kq= *this; //this o day chi den doi tuong chuan bi goi ham; 
                        //va kq dc tao ra thay doi tuong do
        if(kq.ngay == 28 && kq.thang == 2 && kq.nam % 4 == 0)
            return Date(29,2,kq.nam);
        kq.ngay++;
        int ngaymax[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(kq.ngay > ngaymax[kq.thang])
        {
            kq.ngay = 1; 
            kq.thang++;
        }
        if(kq.thang == 13)
        {
            kq.nam++;
            kq.thang =1;
        }
        return kq;
    }
    Date Date::operator +(int n){
        Date kq = *this;
        for(int i=0; i<n; i++)
            kq = kq.Cong();
        return kq;
    }
    Date Date::operator + (Date d){
        Date kq = *this;
        kq.nam +=d.nam;
        while(d.thang>0){
            kq.thang++;
            d.thang--;
            if(kq.thang>12){
                kq.nam++;
                kq.thang =1;
            }
        }
        kq = kq + d.ngay;
        return kq;
    }
    int Date:: operator > (Date d){
        return  ( nam>d.nam || (nam==d.nam && thang>d.thang) ||(nam==d.nam && thang==d.thang && ngay>d.ngay)); 
    }
    Sau đó là tới cái lớp CauThu
    Code:
    #include <iostream>
    #include <conio.h>
    #include "Date.cpp"
    
    using namespace std;
    
    /*************************************
        Khai bao lop Cauthu
    **************************************/
    class Cauthu
    {
    private:
        char maso[7];
        char *hoten;
        char *clb;
        Date ngaysinh;
        float chieucao;
        
    public:   
        Cauthu();
        Cauthu(char* ms, char* ht, char* club, Date ns, float cao);
        Cauthu(const Cauthu&);
        Cauthu& operator= (const Cauthu&);
        ~Cauthu()           { delete[] hoten;  delete[] clb; }
        
        int sinhsau(Date d);
      
        friend ostream& operator<< (ostream&, const Cauthu&);
        friend istream& operator>> (istream&, Cauthu&);
    
        char* laymaso()     { return maso; }
        char* layhoten()    { return hoten; }
        char* layclb()      { return clb; }
        Date layngaysinh()     { return ngaysinh; }
        float laychieucao() { return chieucao; }
    };
    
    /*-----------------------------------------------------
        Dinh nghia cac ham thanh vien cua lop Cauthu
    ------------------------------------------------------*/
    Cauthu::Cauthu() 
        : ngaysinh()        // "goi" ham XD mac nhien cho d.tuong ngaysinh 
    {
        strcpy(maso, "");
        hoten = new char[50];
        strcpy(hoten, "");
        clb = new char[50];
        strcpy(clb, "");
        chieucao = 0;
    }
    
    Cauthu::Cauthu(char* ms, char* ht, char* club, Date ns, float cao) 
        : ngaysinh(ns)      //  <-- truyen ns cho ham XDSC cua ngaysinh
    {
        strcpy(maso, ms);
        hoten = strdup(ht);
        clb = strdup(club);
        chieucao = cao;
    }
    
    Cauthu::Cauthu(const Cauthu& ct) 
        : ngaysinh(ct.ngaysinh)     //  <-- truyen ct.ngaysinh cho ham XDSC cua ngaysinh
    {
        strcpy(maso, ct.maso);
        hoten = strdup(ct.hoten);
        clb = strdup(ct.clb);
        chieucao = ct.chieucao;
    }
    
    Cauthu& Cauthu::operator= (const Cauthu& ct)
    //    : ngaysinh(ct.ngaysinh)       // <-- khong the goi the nay vi d.tuong ngaysinh
                                        // da ton tai, khong goi ham XDSC cho no duoc
    {
        strcpy(maso, ct.maso);
        hoten = strdup(ct.hoten);
        clb = strdup(ct.clb);
        ngaysinh = ct.ngaysinh;         // phai gan the nay
        chieucao = ct.chieucao;   
        
        return *this;
    }
    
    //-------------------------------------------------------
    // Ham test, return 1 neu cau thu sinh sau ngay d
    //-------------------------------------------------------
    int Cauthu::sinhsau(Date d)
    {
        return ngaysinh > d;
    }
    
    ostream& operator << (ostream& os, const Cauthu& ct)
    {
        os << "Ma so CT: " << ct.maso << endl;
        os << "Ho ten: " << ct.hoten << endl;
        os << "CLB: " << ct.clb << endl;
        os << "Ngay sinh: "; 
        ct.ngaysinh.In(); // Sai chỗ này nè 
        os << endl << "Chieu cao: " << ct.chieucao;
        
        return os;
    }
    
    istream& operator >> (istream& is, Cauthu& ct)
    {
        cout << "Nhap ma so: ";
        is >> ct.maso;
        cout << "Nhap ho ten: ";
        is.ignore(100, '\n');//công dụng của hàm này ?
        is.getline(ct.hoten, '\n');
        cout << "CLB :";
        is.getline(ct.clb, '\n');
        cout << "Ngay sinh: " << endl;
        fflush(stdin);
        ct.ngaysinh.Nhap();
        cout << "Chieu cao: ";
        cin >> ct.chieucao;
    
        return is;
    }
    
    int main()
    {
        int n;
        cout << "Nhap so cau thu: ";
        cin >> n;
        
        //tao danh sach gom n cau thu
        Cauthu dsCauthu[n];
     
        //nhap thong tin cho cac cau thu trong danh sach
        for (int i=0; i<n; i++)
        {
            cout << endl << "--- Nhap thong tin cho cau thu " << i+1 << endl;
            cin >> dsCauthu[i];     //do ta da tai DN toan tu nhap >> nen co the 
                                    //dung cu phap nhu the nay
        }
        
        //tim cau thu cao nhat trong danh sach
        float maxChieucao=dsCauthu[0].laychieucao();
        for (int i=1; i<n; i++)
        {
            if (dsCauthu[i].laychieucao() > maxChieucao)
                maxChieucao = dsCauthu[i].laychieucao();
        }
        
        cout << "-----------------------" << endl;
        cout << "Cau thu cao nhat la: " << endl;
        for (int i=0; i<n; i++) 
        {
            if (dsCauthu[i].laychieucao() == maxChieucao)
                cout << dsCauthu[i] << endl;
        }
        
        //dem so cau thu con co the thi dau cho doi U23
        Date d1(7, 3, 2008), d2(0, 0, -23);
        d1 = d1 + d2; 
    
        int soCauthuU23=0;
        for (int i=0; i<n; i++) 
        {
            if (dsCauthu[i].sinhsau(d1))
                soCauthuU23++;
        }
        cout << "------------------------------------------" << endl;
        cout << "So cau thu co the thi dau cho U23 la: " << soCauthuU23;
        cout << endl;
    
        //---------------------------------------------------
        // Tim CLB co nhieu cau thu thi dau nhat
        //  1. Tao danh sach cac CLB
        //  2. Tinh so cau thu dang thi dau cho moi CLB
        //  3. Tim so CT nhieu nhat thi dau cho 1 CLB
        //  4. Hien thi DS cac CLB co nhieu CT nhat
        //---------------------------------------------------
    
        // 1. Tao danh sach cac CLB
        char dsCLB[n][50];
        int soCLB=0;
        for (int i=0; i<n; i++)
        {
            int j=0;
            //duyet qua danh sach cac CLB de ktra CLB cua cau thu 
            //hien tai da co trong danh sach hay chua
            while ((j<=soCLB) && (strcmp(dsCauthu[i].layclb(), dsCLB[j])!=0))
                j++;
    
            // j>soCLB  => CLB cua cau thu chua co trong ds
            //          => them CLB vao danh sach
            if (j>soCLB)
                strcpy(dsCLB[soCLB++], dsCauthu[i].layclb());
        }
        
        //hien thi danh sach cac CLB
        /*
        cout << "---------------------------------" << endl;
        cout << "Danh sach cac CLB: " << endl;
        for (int i=0; i<soCLB; i++)
            cout << "  - " << dsCLB[i] << endl;
        */
            
        // 2. Dem so cau thu cua moi CLB
        int soCT[soCLB];
        for (int i=0; i<soCLB; i++)        //khoi tao so CT cho moi CLB la 0
            soCT[i] = 0;
            
        for (int i=0; i<soCLB; i++)        //dem so cau thu
        {
            for (int j=0; j<n; j++) 
            {
                //cout << dsCauthu[j].layclb() << ", " << dsCLB[i] << endl;
                if (strcmp(dsCauthu[j].layclb(), dsCLB[i]) == 0)
                    soCT[i]++;            
            }
        }
        cout << endl;
        
        //hien thi so CT cua moi CLB
        /*
        cout << "---------------------------------" << endl;
        cout << "Danh sach cac CLB: " << endl;
        for (int i=0; i<soCLB; i++)
            cout << "  - " << dsCLB[i] << ": " << soCT[i] << endl;
        */
        
        // 3. Tim so cau thu nhieu nhat thi dau cho cung 1 CLB
        int maxCT=soCT[0];
        for (int i=1; i<soCLB; i++)
        {
            if (maxCT < soCT[i])
                maxCT = soCT[i];
        }
         
        // 4. Hien thi cac CLB co nhieu CT nhat
        cout << "--------------------------------" << endl;
        cout << "Cac CLB co nhieu cau thu nhat: " << endl;
        for (int i=0; i<soCLB; i++) 
        {
            if (soCT[i] == maxCT)
                cout << "  - " << dsCLB[i] << ": " << soCT[i] << endl;
        }
         
        //--------------
        getch();
        return 0;
    }
    Như vậy đấy bấm chạy thì nó báo 1 lỗi thôi (chạy bằng Dev-C nha)
    Cũng không biết là lỗi gì nữa. Các bác sữa hộ em với
    Đã được chỉnh sửa lần cuối bởi thongcam87 : 20-11-2008 lúc 02:15 AM.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Chưa cần coi tiếp :
    strdup + delete[] -> undefined behavior

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    5

    Hình như gởi nhầm chỗ rồi . Hay bạn trả lời rõ hơn đi

Các đề tài tương tự

  1. Giúp mình BT Quản lý các trận đấu bóng
    Gửi bởi hai991dk trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 15-11-2012, 01:59 PM
  2. Tư vấn du học Mỹ - Khuôn viên giành cho thể thao rộng lớn: bơi lôi, bóng đá, bóng rổ, bóng chuyền,….
    Gửi bởi ctvlinh92 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 23-05-2011, 04:19 PM
  3. Giúp mình đề tài quản lý đội bóng với
    Gửi bởi NguyenDuyQuang trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 9
    Bài viết cuối: 30-05-2010, 02:36 PM
  4. Chu trình hamilton, sắp xếp đội bóng. Giúp mình sửa lỗi?
    Gửi bởi thanhtri_100188 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 11-05-2009, 12:49 PM
  5. Giúp Dệ Bài Tập Về Quản Lý Danh Sách đội Bóng.
    Gửi bởi hoangc5 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 21-11-2008, 01:01 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn