@Vibi: Cậu bị sai từ tư tưởng tẩu hỏa nhập ma giữa c và c++ yêu cầu xem lại ý thuyết C++.
"Xây dựng lớp Date. Dữ liệu thành phần bao gồm ngày, tháng, năm. Các hàm thành phần bao gồm: hàm tạo, hàm truy cập dữ liệu, hàm normalize() để chuẩn hóa dữ liệu nằm trong khoảng quy định của ngày ( 1<= ngày < dáyIn(tháng)), tháng (1<= tháng <12), năm (năm >=1), hàm daysIn(int_ trả về số ngày trong tháng, hàm advance(int y, int m, int d) để tăng ngày hiện lên các năm y, tháng m, ngày d của đối tượng đang tồn tại, hàm reset(int y, int m, int d) để đặt lại ngày cho một đối tượng đang tồn tại và một hàm print() để hiển thị dữ liệu"
Bác nào cho em hỏi là cái hàm advance(int y, int m, int d) trong đầu bài là nó yêu cầu gì thế ?
Ai có lòng hảo tâm làm giúp để em tham khảo với. Thanks.
C++ Code:
#include<stdio.h> #include<conio.h> #include<iostream.h> #include<iomanip.h> class Date { private: int Day; int Month; int Year; static int Days[]; public: Date() { int D=1; int M=1; int Y=1900; }; // Gia Tri Gan Mac Dinh Cho Doi Tuong void Normalize(int, int, int); void Advance(); void Reset(int, int , int); void Print(); int daysIn(int); int ktrnhuan(int); }; // Ham Days -- Chua So Ngay Trong Thang int Date::Days[]={31,28,31,30,31,30,31,31,30,31,30,31}; // Ham ktrnhuan -- Kiem Tra Xem Co Phai Nam Nhuan Ko ? int Date::ktrnhuan(int Y) { if (Y %4==0&&Y %100!=0) return 1; if (Y %400==0) return 1; return 0; } // Ham Normalize -- Chuan Hoa Du Lieu Ngay Thang Nam void Date::Normalize(int DD, int MM, int YY) { Month=(MM>=1&&MM<=12)?MM:1; Year=(YY>=1900&&YY<=2100)?YY:1900; if(Month==2 && ktrnhuan(Year)) Day=(DD>=1&&DD<=29)?DD:1; else Day=(DD>=1&&DD<=Days[Month-1])?DD:1; }; // Han daysIn -- Tra Ve So Ngay Trong Thang int Date::daysIn(int D) { if(Month==2 && ktrnhuan(Year)==0) return D==29; return D==Days[Month-1]; } // Ham Advance -- Tang ngay thang nam void Date::Advance() { if( Day=daysIn(Day)) // Het Nam { Day=1; Month=1; ++Year; } else if(daysIn(Day)) //Het Thang { Day=1; ++Month; } else ++Day; } // Ham Print -- De Hien Thi Du Lieu void Date::Print() { } void main() { Date D1, D2(30,12,2006); }
Tớ làm sơ sơ được thế này, ngồi viết hàm reset + print + main nó cứ lỗi tung trời lên, chẳng sửa được. Nên đành xóa đi, vào 4rum nhờ bà con vít giùm nốt, bổ sung giùm cái j thiếu với. Thank !!
.....Đừng Trách Em Gà Vì Em Đúng Là Gà....
@Vibi: Cậu bị sai từ tư tưởng tẩu hỏa nhập ma giữa c và c++ yêu cầu xem lại ý thuyết C++.
Mình có một bài class date vừa làm song các bạn dúp mình tối ưu mã nguồn
Bài này mình làm dài quá
C++ Code:
// class date Vu Thanh Nam KTV 6.2A #include <iostream.h> #include <conio.h> #include <math.h> #include <stdlib.h> int songay(int m,int y); class date { private: int d; int m; int y; public: void setdate(int ngay); int getdate(); void setmonth(int thang); int getmonth(); void setyear(int nam); int getyear(); int sosanh(date s)const; date cong1ngay()const; int tinhsongay(date); }; void date::setdate(int ngay) //////////////////// { d = ngay; }; int date::getdate() //////////////// { return d; }; void date::setmonth(int thang) /////////////////// { m = thang; }; int date::getmonth() //////////////////// { return m; }; void date::setyear(int nam) ///////////////////////// { y = nam; } int date::getyear()////////////////////// { return y; }; int date::sosanh(date s)const// ham so sanh ///////////////// { if(y < s.y || (y == s.y && m < s.m )||(y == s.y && m == s.m && d < s.d)) return -1; else { if(y > s.y ||(y == s.y && m > s.m) ||(y == s.y && m == s.m && d > s.d)) return 1; else return 0; } }; date date::cong1ngay()const//ham cong mot ngay///////////////// { date kq; if(d == songay(m,y)) { kq.d = 1; if(m == 12) { kq.y = y + 1; kq.m = 1; } else { kq.m = m +1; kq.y = y; } } else { kq.d = d + 1; kq.m = m; kq.y = y; } return kq; }; int date::tinhsongay(date t2) // ham tinh so ngay/////////////////////// { date t1; date min,max; int date,month,year; do { t2.setdate(date); }while(date < 1 || date> 31); do { t2.setmonth(month); }while(month < 1 || month>12); t2.setyear(year); do { t1.setdate(date); }while(date < 1 || date> 31); do { t1.setmonth(month); }while(month < 1 || month>12); t1.setyear(year); if(t1.sosanh(t2) == -1) { min = t1; max = t2; } else { max = t1; min = t2; } int dem = 0; while(min.sosanh(max)== -1) { min = min.cong1ngay(); dem++; } return dem; }; int songay(int m,int y) //ham tinh so ngay trong 1 thang trong 1 nam bat ky { switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: if((y%4==0&&y%100!=0)||(y%400==0)) return 29; else return 28; case 4: case 6: case 9: case 11: return 30; } return 0; } void main() { date d; char chon; do { system("cls"); }while(chon == 'y'); getch(); } //Phu` cuoi cung` cung da~ song met qua
Đã được chỉnh sửa lần cuối bởi vtniam : 01-08-2007 lúc 06:07 PM.
gửi các bạn mới bước chân lập trình OOP:
C++ Code:
#include<iostream> #include<conio.h> using namespace std; class Date { private : int ngay; int thang; int nam; public: Date(); Date(int); Date(int,int); Date(int,int,int); void Nhap(); void In(); void Nam(); int HopLe(); Date Cong(); Date Cong(int); }; Date::Date(){ ngay=1; thang=1; nam=1900; } Date::Date(int x){ ngay=0; thang=0; nam=x; } Date::Date(int x,int y){ ngay=0; thang=x; nam=y; } Date::Date(int x,int y,int z){ ngay=x; thang=y; nam=z; } void Date::Nhap(){ while(1) { if(HopLe()) break; } } void Date::In(){ } void Date::Nam(){ if(nam%4==0) } int Date::HopLe(){ if(ngay<=0||thang<=0||thang>12) return 0; int maxngay1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int maxngay2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(nam%4==0) { //int maxngay[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; return (ngay<=maxngay1[thang]); } else{ // int maxngay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; return (ngay<=maxngay2[thang]); } } Date Date::Cong() { Date kq(ngay, thang, nam); if(nam%4==0 && thang==2 &&ngay==28) return Date(29,2,nam); int maxngay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; kq.ngay++; if(kq.ngay>maxngay[kq.thang]) { kq.ngay=1; kq.thang++; } if(kq.thang>12) { kq.thang=1; kq.nam++; } return kq; } Date Date::Cong(int n) { Date kq=*this; for(int i=0; i<n; i++) kq = kq.Cong(); return kq; } int main() { int n; Date day; day.Nhap(); //if(day.HopLe()) day.In(); day.Nam(); day.Cong().In(); day.Cong(n).In(); // day.In(); getch(); return 0; }
nếu muốn có ngày mai thì hãy cố gắng từ bjo thay vì ngồi đóthan phiền
Có ai biết chuyển đổi kiểu date sang kieu char (Quy ước ngày 2 kí tự, tháng 2 kí tự và năm 4 kí tự) không, giúp mình với
Mình không biết đổi sang char, nhưng theo mình biết cách để hiện ngày tháng dưới dạng xx/xx/xxxx
thì dùng cách:
cout<<ngay/10<<ngay%10<<"/"<<thang/10<<thang%10<<"/"<<nam;
Năm thì mình đã để 4 chữ số rồi, còn cách nào để mặc định luôn thì chưa rành..
Mới học OOP dc 1 tháng
bạn dùng ham có sẵn trong C/C++: itoa(int,char*,int) chuyển int->char[]
hoặc
#include<iostream.h>
#include<stdlib.h>
int main(){
int i,n = 12345;
char a[8]=" ",c;
//itoa(n,a,10);
i = 0;
while(n>0){
a[i] = n%10 + '0';
n = n/10;
i++;
}
int j = i - 1;
i = 0;
while(i<j){
c = a[i];
a[i] = a[j];
a[j] = c;
i++;
j--;
}
cout<<a;
return 0;
}