Thứ Bảy, 14 tháng 3, 2015

C/C++ nhập vào 1 ngày, tìm ngày kế tiếp và xuất kết quả

  1. C/C++ nhập vào 1 ngày, tìm ngày kế tiếp và xuất kết quả
  2. // Viet chuong trinh nhap vao 1 ngay. Tim ngay ke tiep va xuat ket qua.
  3. #pragma region +Declaration.
  4.  
  5. #pragma region _Library
  6. #include <iostream>
  7. using namespace std;
  8. #pragma endregion
  9.  
  10. #pragma region _Data Struct
  11. typedef struct Date
  12. {
  13.         int dd;
  14.         int mm;
  15.         int yyyy;
  16. } D;
  17. #pragma endregion
  18.  
  19. #pragma region _Prototype.
  20. void InputDate (D&);
  21. void OutputDate (D);
  22. D NextDate(D&);
  23. #pragma endregion
  24.  
  25. #pragma endregion
  26.  
  27. #pragma region +Main Function.
  28. void main ()
  29. {
  30.         D a;
  31.  
  32.         cout << "Input Date:" << endl;
  33.         InputDate (a);
  34.         cout << "\n\nNext Date: ";
  35.         OutputDate (NextDate(a));
  36.  
  37.         system("pause");
  38. }
  39. #pragma endregion
  40.  
  41. #pragma region +Define Function
  42. void InputDate (&a)
  43. {
  44.         int x;
  45.         do
  46.         {
  47.                 cout << "Day: ";
  48.                 cin >> a.dd;
  49.                 cout << "Month: ";
  50.                 cin >> a.mm;
  51.                 cout << "Year: ";
  52.                 cin >> a.yyyy;
  53.  
  54.                 switch (a.mm)
  55.                 {
  56.                 case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  57.                         x = 31;
  58.                         break;
  59.                 case 4: case 6: case 9: case 11:
  60.                         x = 30;
  61.                         break;
  62.                 case 2:
  63.                         if ((a.yyyy % 400 == 0) || (a.yyyy % 4 == 0 && a.yyyy % 100 != 0))
  64.                                 x = 29;
  65.                         else
  66.                                 x = 28;
  67.                         break;
  68.                 default: x = 0;
  69.                 }
  70.                 if (== 0 || a.dd <= 0 || a.dd > x)
  71.                         cout << "\nEror! Please Input Date." << endl;
  72.         }while (== 0 || a.dd <= 0 || a.dd > x);
  73. }
  74. void OutputDate (D a)
  75. {
  76.         cout << a.dd << " / " << a.mm << " / " << a.yyyy << endl;
  77. }
  78. D NextDate (&a)
  79. {
  80.         int x;
  81.         switch (a.mm)
  82.                 {
  83.                 case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  84.                         x = 31;
  85.                         break;
  86.                 case 4: case 6: case 9: case 11:
  87.                         x = 30;
  88.                         break;
  89.                 case 2:
  90.                         if ((a.yyyy % 400 == 0) || (a.yyyy % 4 == 0 && a.yyyy % 100 != 0))
  91.                                 x = 29;
  92.                         else
  93.                                 x = 28;
  94.                         break;
  95.                 }
  96.         if (a.dd == x)
  97.         {
  98.                 a.dd = 1;
  99.                 if (a.mm == 12)
  100.                 {
  101.                         a.mm = 1;
  102.                         a.yyyy ++;
  103.                 }
  104.                 else
  105.                         a.mm ++;
  106.         }
  107.         else
  108.                 a.dd ++;
  109.         return a;
  110. }
  111. //TÁC GIẢ CODE: TRẦN MINH AN

Thứ Năm, 12 tháng 3, 2015

tìm các cặp số thân thiết trong lập trình c/c++

lập trình c/c++ tìm các cặp số thân thiết. các cặp số thân thiết là số:
ví dụ:
220 có ước số là: 1,2,4,5,.....220
284 có ước số là: 1,2,....284
tổng các ước số của 220 (trừ chính nó ra) = 284;
tổng các ước số của 284( trừ chính nó ra) = 220;
như vậy trong anh có tôi và trong tôi có anh là cặp số thân thiết.
chương trình chạy hơi lâu vì các cặp số thân thiết là rất ít nhưng rất lớn, ví dụ như 220-284, 1184-1210,... 
bạn đọc hay suy ngẫm cải tiến thuật toán để việc tìm nhanh hơn



#include<iostream>
using namespace std;
int thanthiet(unsigned long a,unsigned long b)
{
long x=0,y=0;
for(int i=1;i<a;i++) if(a%i==0) x+=i;
for(int i=1;i<b;i++) if(b%i==0) y+=i;
if(x==b && y==a) return 1;
return 0;
}
void main()
{
unsigned long a,b;
for(a=220;a<=4000000000;a++)
for(b=a+10;b<1.5*a;b++)
if(thanthiet(a,b)) cout<<a<<" - "<<b<<endl;
system("pause");
}

Thứ Tư, 11 tháng 3, 2015

5. Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả.

#include<iostream>
using namespace std;
struct hs
{
char ten[100];
float toan,van;
};
void nhap(hs &x);
float dtb(hs x);
void main()
{
hs x;
nhap(x);
cout<<"\ndiem trung binh la: "<<dtb(x);
system("pause");
}
void nhap(hs &x)
{
int kt;
cout<<"\nnhap ten: ";
fflush(stdin);gets(x.ten);
do{
kt=0;
cout<<"\ndiem toan: ";cin>>x.toan;
if(x.toan<0 || x.toan>10)
{
kt=1;cout<<"\nkhong hop le!";
}
}while(kt);
do{
kt=0;
cout<<"\ndiem van: ";cin>>x.van;
if(x.van<0 || x.van>10)
{
kt=1;cout<<"\nkhong hop le!";
}
}while(kt);
}
float dtb(hs x)
{
return (x.toan+x.van)/2;
}

4. Viết chương trình nhập vào một ngày. Tìm ngày kế tiếp và xuất kết quả.

#include<iostream>
using namespace std;
struct day
{
int d,m,y;
};
void nhap(day &x);
void nextday(day x);
void main()
{
day x;
cout<<"\nNHAP NGAY, THANG, NAM:\n";
nhap(x);
cout<<"\nngay tiep theo la: ";
nextday(x);
system("pause");
}
void nextday(day x)
{
int k=0;
x.d++;
switch(x.m)
{
case 1:case 3: case 5: case 7: case 8: case 10:
if(x.d>31)
{
x.d=1;x.m++;
}
break;
case 4: case 6: case 9: case 11:
if(x.d>30)
{
x.d=1;x.m++;
}
break;
case 12:
if(x.d>31)
{
x.d=1;x.m=1;x.y++;
}
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && x.d>29)
{
x.d=1;x.m++;
}
if(k==0 && x.d>28)
{
x.d=1;x.m++;
}
}
cout<<x.d<<"/"<<x.m<<"/"<<x.y;
}
void nhap(day &x)
{
int kt,k=0;
do{
kt=0;
cout<<"\nngay:";cin>>x.d;
cout<<"\nthang: ";cin>>x.m;
cout<<"\nnam: ";cin>>x.y;
switch(x.m)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(x.d<=0 || x.d>31) kt=1;
break;
case 4: case 6: case 9: case 11:
if(x.d<=0 || x.d>30) kt=1;
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && (x.d<=0 || x.d>29)) kt=1;
if(k==0 && (x.d<=0 || x.d>28)) kt=1;
break;
default: kt=1; break;
}
if(kt==1) cout<<"\nkhong hop le!";
}while(kt);
}

Viết chương trình nhập vào hai phân số, tìm phân số lớn nhất và xuất kết quả.

//tìm phân số lớn nhất
#include<iostream>
using namespace std;
struct phanso
{
int tu,mau;
};
void nhap(phanso &x);
void xuat(phanso x);
phanso max(phanso x,phanso y);
void main()
{
phanso x,y,z;
cout<<"\nNHAP 2 PHAN SO:\nnhap phan so 1:";
nhap(x);
cout<<"\nnhap phan so 2:";
nhap(y);
cout<<"\nphan so lon nhat la: ";
z=max(x,y);
xuat(z);
system("pause");
}
phanso max(phanso x,phanso y)
{
int a,b;
a=x.tu*y.mau;
b=y.tu*x.mau;
if(a>b) return x;
return y;
}
void xuat(phanso x)
{
cout<<x.tu<<"/"<<x.mau;
}
void nhap(phanso &x)
{
char s[100],c[100];
int i,j,kt,d,dem;
do{
kt=0;
cout<<"\nnhap phan so dang a/b: ";
gets(s);
dem=0;d=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='/' || (s[i]>='0' && s[i]<='9')) dem++;
if(s[i]=='/') d++;
}
if(dem!=strlen(s) || d!=1)
{
kt=1;
cout<<"\nloi dinh dang!";
continue;
}
i=0;
while(s[i]!='/') c[i]=s[i++];
c[i]='\0';
x.tu=atoi(c);
d=0;
for(j=i+1;j<strlen(s);j++) c[d++]=s[j];
c[d]='\0';
x.mau=atoi(c);
if(x.mau==0)
{
kt=1;
cout<<"\nloi toan hoc!";
}
}while(kt);
}

Thứ Hai, 9 tháng 3, 2015

một số chú ý đáng nhớ trong lâp trình c về chuỗi và file

một số chú ý đáng nhớ trong lâp trình c về chuỗi và file
  • fread(biến địa chỉ, bộ nhớ, số cấu trúc cần đọc, file); //trả về số cấu trúc  đọc được, nếu hết file có nghĩa là trả về 0.
  • fwrite(biến đại chỉ, bộ nhớ, số cấu trúc cần ghi, file);//trả về số cấu trúc ghi được, trả về 0 nếu ghi không được hay lên file thất bại.
    /* các cấu trúc có thể mảng, 1 biến bình thường hay biến dữ liệu kiểu cấu trúc, thay thế được các vòng for trong việc đọ hay ghi thông thường */
  • fscanf(file, kiểu, biến địa chỉ); //trả về giá trị EOF nếu quét đến cờ hiệu kết thúc file EOF (-1).
  • feof(file); //trả về giá trị là vị trí của con trỏ nếu con trỏ file đang đứng ở vị trí cờ hiệu kết thúc file. chưa kết thúc file thì trả về 0.
  • getc(file);//nếu quét đến cờ hiệu kết thúc file thì trả về giá trị char tương ứng là EOF hay (-1).
  • fopen("tên file/ có thể là đường dẫn file","kiểu mở"); //trả về địa chỉ FILE trên bộ nhớ nếu thành công, và trả về giá trị NULL nếu thất bại.
  • fgets(chuỗi nhận, số kí tự, file) trả vê địa chỉ của chuỗi s nếu get được thành công, trả về NULL hay 0 nếu không get được, địa chỉ của ô nhớ của chuỗi luôn là sô dương.
  • strstr(chuỗi s1, chuỗi s2);  trả về địa chỉ ô nhớ chứa chuỗi, là chuỗi con của s1 bắt đầu từ vị ví xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1, nếu không có chuỗi s2 trong s1 thì chuỗi để copy không có, trả về giá trị 0 hay NULL

Thứ Tư, 4 tháng 3, 2015

rút gọn phân số trong lập trình c/c++

rút gọn phân số trong lập trình c/c++

//rút gọn phân số
#include<iostream>
using namespace std;
struct phanso
{
int tu,mau;
};
void nhap(phanso &x)
{
char s[100],c[100];
int i,j,kt,d,dem;
do{
kt=0;
cout<<"\nnhap phan so dang a/b: ";
gets(s);
dem=0;d=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='/' || (s[i]>='0' && s[i]<='9')) dem++;
if(s[i]=='/') d++;
}
if(dem!=strlen(s) || d!=1)
{
kt=1;
cout<<"\nloi dinh dang!";
continue;
}
i=0;
while(s[i]!='/') c[i]=s[i++];
c[i]='\0';
x.tu=atoi(c);
d=0;
for(j=i+1;j<strlen(s);j++) c[d++]=s[j];
c[d]='\0';
x.mau=atoi(c);
if(x.mau==0)
{
kt=1;
cout<<"\nloi toan hoc!";
}
}while(kt);
}
void xuat(phanso x)
{
cout<<x.tu<<"/"<<x.mau;
}
void rutgon(phanso &x)
{
int a=abs(x.tu),b=abs(x.mau);
if(a==0) return;
while(a!=b)
if(a>b) a-=b;
else b-=a;
x.tu/=a;
x.mau/=a;
}
void main()
{
phanso a;
nhap(a);
xuat(a);
rutgon(a);
cout<<"=";
xuat(a);
system("pause");
}