:: Quên mật khẩu ::
77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41] 5 5 3
Share | 

 

 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Sat Feb 06, 2010 2:12 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài giải chi tiết 77 Bài tập [update tới bài 43]

 
Hum bữa trước Regulus post tài liệu 77 bài tập C++ trong box này luôn nè . Đây là link đến 2pic đó
Code:
http://cnttdhsupham.forumotion.com/forum-f56/topic-t1111.htm
Ai có tài liệu đó rồi thì đọc tiếp, chưa có thì chịu khó down về hén.
77 bài tập C++ đó hình như là tài liệu lưu hành nội bộ của trường ta thì phải! Rất đáng để đọc vì có thể gặp các bài tương tự trong đề thi (suy nghĩ chủ quan Rolling Eyes ).


Nhằm giúp các bạn dễ dàng tiếp cận với môn học này hơn. Mình mạn phép dùng kiến thức ít ỏi về lập trình của bản thân viết một loạt bài giải + hướng dẫn chi tiết . Bằng cách này bạn sẽ ít phải gặp khó khăn hơn khi học và thực hành bởi lập trình là một môn rất khó xơi.

Một số lưu ý:

1.Code mình tự viết và test xong rồi mới post vì thế không thể chắc chắn những vấn đề phái sinh ngoài ý muốn trong lúc chạy chương trình và càng không đảm bảo tính hoàn hảo của code.

2.Code viết trong Borland C++ 5.02, khuyến khích các bạn đang xài bản cũ nâng cấp từ bản 4.0 trở lên để hạn chế tối đa lỗi.

3.Bạn nào có bất cứ thắc mắc gì cứ comment tại topic này. Mình hổng dám chắc trả lời được hết nhưng biết chắc sẽ có những ACE khác biết và giải đáp được cho bạn.

4.Người ta nói "Sức người có hạn - Lựu đạn có chốt". Hơ hơ mong được sự giúp đỡ từ những Bro đang ẩn mình trong lớp ta viết giùm vài bài giải nhé.


Chúc các bạn học tốt !

Bài tập 1:
Viết chương trình hiện ra màn hình dòng chữ " CHAO MUNG CAC BAN DEN VOI MON HOC C++"


Đây là bài giải có sẵn trong tài liệu
Code:

#include 
        using namespace std; 
         
        int main() 
        { 
                  cout<<” CHAO MUNG CAC BAN DEN VOI MON HOC C++”; 
                  return 0 ; 
        } 

Bài giải trên đúng không có gì sai nhưng lại sử dụng thư viện iostream.h đã cũ và lỗi thời. Khi chạy chương trình thì hiện lên cái màn hình đen rồi tắt cái phụt chưa kịp thấy dòng chữ đâu hết Surprised

Hiện nay , đa số các lập trình viên sử dụng thư viện stdio.h có chức năng xuất nhập dữ liệu tương tự. Khuyến khích các bạn nên chuyển sang dùng thư viện này bởi nó tốt hơn nhiều. Mọi thông tin về thư viện stdio.h bạn có thể xem lại cuốn sách này.

Lập trình C căn bản 107 trang
Code:
http://maichoi.vuicaida.com/ebook.here.vn/Member/8-1/Page_6/C_canban_GT_PDF.rar

Bài tập 1 được viết lại như sau:

Code:

#include
#include
void main() {
  printf("CHAO MUNG CAC BAN DEN VOI MON HOC C++");
  getch();
}

+Phần khai báo, dùng thư viện conio.h để sử dụng lệnh getch() làm cho màn hình đứng lại chờ nhập kí tự từ bàn phím mục đích là để thấy được dòng chữ trên màn hình.Các bạn cứ nhấn Enter là được rồi chương trình sẽ tự động thoát do không phải làm gì nữa tiếp theo.
+Theo quy định chuẩn của C thì phải khai báo int main(...) và phải có giá trị trả về return x , nhằm mục đích chương trình phải trả về một giá trị nào đấy sau khi thực thi xong, báo cho hệ thống biết có lỗi xảy ra hay không hoặc cái gì đó đại loại như vậy. Tuy nhiên,đó là nếu dịch trên window thì luôn phải trả về giá trị! Mấy bạn xài C++ chạy trên DOS thì ta muốn làm sao cũng được nên mình xài void main() tức tự động trả về giá trị rỗng. Lần sau sẽ dùng int main() cho nó đúng chuẩn hen, cái này còn xa lắm chưa cần hiểu bây giờ đâu, cứ xem nó như là cú pháp đi.



Số lần được cảm ơn : Message reputation : 100% (1 vote)




Sat Feb 06, 2010 3:14 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 2

 
Bài tập 2: Viết chương trình xuất ra màn hình hình vuông đặc kí tự '*' có cạnh bằng a (với a nhập từ bàn phím)

Code:

#include<conio.h>
#include<stdio.h>
int main() {
  int a,i,j;
  printf("Nhap a");
  scanf("%d",&a); \\Có vấn đề nhỏ, xem giải thích bên dưới
  for(i=1;i<=a;i++)
    {
       for(j=1;j<=a;j++) printf("*");
        printf("\n");
    }
  getch();
  return 0;
}

+ Bài tập này dễ không có gì khó. Bạn nào còn mập mờ mấy cấu trúc lệnh trong bài giải có thể xem lại quyển Lập trình C căn bản mình post link ở trên.

+ Có bạn sẽ hỏi ở dòng scanf tại sao trước biến a lại đặt dấu '&' ? Nếu không đặt dấu đó thì sao ?
Dấu '&' là để bổ sung đối số cho biến. Mỗi khi gọi biến đến một đối tượng trong chương trình theo kiểu được chỉ định tương ứng của nó mà bạn đã định dạng sẽ theo thứ tự như nhau. Hiểu cho đơn giản là như thế này nè! Nguyên nhân là do sự quá cao cấp của C++ chứ trong Pascal thì không có vụ này đâu nha! Trong chương trình trên biến a bị gọi đến 2 đối tượng (đem so sánh với i và j ).Như vậy có sự lẫn lộn qua lại giữa 2 đối tượng này trong khi thực hiện chương trình do C++ không bảo đảm thứ tự của việc so sánh i với a và j với a trong phạm vi số nguyên dẫn đến một số lỗi nhẹ thì sai hỏng kết quả nặng thì Crash Program. Tốt nhất thì khi dùng hàm scanf bạn nhớ thêm dấu '&' trước biến nhé. Trình độ của chúng ta chưa đến mức độ bỏ cái dấu ấy đâu. Shocked



Số lần được cảm ơn : Message reputation : 100% (1 vote)




Sat Feb 06, 2010 3:40 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 3

 
Bài tập 3:
*Viết chương trình nhập vào bán kính của hình tròn; xuất ra diện tích và chu vi của hình tròn đó.
*Diện tích của hình tròn biết trước bằng cách nhập vào từ bàn phím, tính và in ra bán kính của hình tròn đó.


Chu vi CV=2*Pi*r
Diện tích S=Pi*r*r



Code:

#include<conio.h>
#include<stdio.h>
int main() {
  int r;
  float CV,S,Pi=3.14;
  printf(" Nhap r");
  scanf("%d",&r);
  CV=2*Pi*r;
  S=Pi*r*r;
  printf("\n Chu vi =%.2f",CV);
  printf("\n Dien tich=%.2f",S);
  getch();
  return 0;
}

Code:

#include<conio.h>
#include<stdio.h>
#include<math.h>
int main() {
  float r,S,Pi=3.14;
  printf(" Nhap S");
  scanf("%5f",&S);
  r=sqrt(S/3.14);
  printf("\n Ban kinh=%.2f",r);
  getch();
  return 0;
}





Sat Feb 06, 2010 4:01 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 4,5

 
Bài tập 4: Viết chương trình nhập vào đáy lớn, đáy nhỏ, chiều cao của hình thang; xuất ra diện tích của hình thang đó

S=(đáy lớn + đáy nhỏ)*chiều cao/2

Tương tự bài 3 thui bỏ qua cho rồi :lol!:

Bài tập 5: Chương trình tính giá trị biểu thức y= 3*exp(cos(t+1))

Code:

#include<conio.h>
#include<stdio.h>
#include<math.h>
int main() {
   double t,y;
  printf("Nhap so thuc t");
  scanf("%f",&t);
  y=3*exp(cos(t+1));
  printf("Gia tri cua y la %.2f",y);
  getch();
  return 0;
}



Số lần được cảm ơn : Message reputation : 100% (1 vote)




Sat Feb 06, 2010 4:27 pm

UserRegulus™ Người này hiện đang:
Level: Tổng điều hành
Danh vọng:758


Tổng điều hành

Regulus™

Tổng điều hành

http://itk35.tk
Giới tính: Nam
Đến từ: ...
Join: 06/11/2009
Bài gửi: 758
HUMOR: Nghe nhạc.. Computer

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
mình thấy bạn hơi nhầm lẫn về các câu lệnh trên C và C++:
Tuy các câu lệnh trên C có thể chạy trên nền C++ và ngược lại nhưng chúng ta nên chú ý sử dụng câu lệnh C++ cho đúng chuẩn Very Happy...

Đối với C: thư viện nhập xuất và đồ họa là conio.h và stdio.h
Đối với C++: Đó là iostream.h

Câu lệnh nhập xuất trong C: printf và scanf ( hoặc printf_s và scanf_s nếu bạn sử dụng VS >=2005 )
Câu lệnh nhập xuất trong C++: cin và cout

Đối với thư viện chuẩn iostream.h vẫn có thể hiển thị kết quả trên màn hình..
Chỉ cần nhấn phím Ctrl + F5 là xong


Các bài tập ở trên phần lớn bạn làm theo phong cách C Very Happy ...
Nên làm theo C++ sẽ hay hơn :d

Đó là góp ý nho nhỏ của mình ... Rất cảm ơn bạn đã share code cho mọi người tham khảo .... Mong bạn tích cực phát huy Very Happy...
Thanks




[center]
&lt;font size=10&gt;Tin học là phải tin mới học&lt;/font size&gt;

Copy- Paste -&gt; Copy- Paste-Hiểu-Đánh giá-Phát triển Cải tiến.
&lt;br&gt;


Email: plkhanhhai1991@gmail.com
k35104017@student.hcmup.edu.vn


Sat Feb 06, 2010 4:59 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Regulus đã viết:
mình thấy bạn hơi nhầm lẫn về các câu lệnh trên C và C++ :
Tuy các câu lệnh trên C có thể chạy trên nền C và ngược lại nhưng chúng ta nên chú ý sử dụng câu lệnh C cho đúng chuẩn Very Happy...

Đối với C: thư viện nhập xuất và đồ họa là conio.h và stdio.h
Đối với C++ : Đó là iostream.h

Câu lệnh nhập xuất trong C: printf và scanf ( hoặc printf_s và scanf_s nếu bạn sử dụng VS >=2005 )
Câu lệnh nhập xuất trong C++ : cin và cout

Đối với thư viện chuẩn iostream.h vẫn có thể hiển thị kết quả trên màn hình..
Chỉ cần nhấn phím Ctrl F5 là xong


Các bài tập ở trên phần lớn bạn làm theo phong cách C Very Happy ...
Nên làm theo C++ sẽ hay hơn Very Happy

Đó là góp ý nho nhỏ của mình ... Rất cảm ơn bạn đã share code cho mọi người tham khảo .... Mong bạn tích cực phát huy Very Happy...
Thanks

Thật là hâm mộ PRO quá đi Shocked Giúp tui mở mang đầu óc nhiều lắm nha !
Rút kinh nghiệm, từ bài tập thứ 6 trở đi, mình sẽ viết code theo phong cách C++ như bạn Regulus đã nhắc nhở.
5 bài tập ở trên chắc không cần phải viết lại đâu nhỉ ? Các bạn ITK35 của chúng ta đầu óc thông minh, sáng lạng chắc chắn biết tự sửa lại đúng hông nè! Mà cho dù không sửa lại làm y chang như thế thầy cũng cho 9.5 điểm ò
Crying or Very sad





Sat Feb 06, 2010 5:07 pm

UserRegulus™ Người này hiện đang:
Level: Tổng điều hành
Danh vọng:758


Tổng điều hành

Regulus™

Tổng điều hành

http://itk35.tk
Giới tính: Nam
Đến từ: ...
Join: 06/11/2009
Bài gửi: 758
HUMOR: Nghe nhạc.. Computer

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài 2:
Code:

#include <iostream>
using namespace std;

void main()
{
   int a, i, j;
cout<<"Ban hay nhap do dai canh: ";
cin>>a;
for (i = 1; i<= a; i++)
{
for (j =1; j<= a; j++)
cout<<"* ";
cout<<"\n";
}
}



Bài 3:
Code:


#include <iostream>
using namespace std;
const float pi=3.14;
void main()
{
   
int r;
cout<<"Nhap vao ban kinh hinh tron : ";
cin>>r;
float s=pi*pi*r;
cout<<"Dien tich hinh tron co ban kinh "<<r<<" la "<<s<<endl;
}

Bài 5:
Code:

#include<iostream>
using namespace std;
#include<cmath>
int main()
{
double t, y;
cout<<"Moi ban nhap 1 so thuc t: ";
cin>>t;
y= 3*exp(cos(t+1));
cout<<"Gia tri cua bieu thuc can tinh la: "<< y<<endl;
return 0;
}


Bài 13
Code:

#include<iostream>
using namespace std;


void main()
{
int a;
cout<<"Nhap vao mot so nguyen ";
cin>>a;
if (a%2==0) cout<<"So chan";
else cout<<"So le";
cout<<"\n";
}

Qua tết làm tiếp Smile) .. năm nay ko làm nữa Smile) .. up




[center]
&lt;font size=10&gt;Tin học là phải tin mới học&lt;/font size&gt;

Copy- Paste -&gt; Copy- Paste-Hiểu-Đánh giá-Phát triển Cải tiến.
&lt;br&gt;


Email: plkhanhhai1991@gmail.com
k35104017@student.hcmup.edu.vn


Mon Feb 08, 2010 11:03 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 6,7

 
Bài tập 6: Viết chương trình nhập vào 2 số nguyên và các phép toán , -, *, /. In ra kết quả phép toán đó.
Code:
Bài giải trong tài liệu


Bài tập 7: Viết chương trình nhập vào thông tin của một sinh viên bao gồm : Mã số sinh viên, họ tên, quê quán, năm sinh, điểm trung bình các năm học; xuất ra thông tin của sinh viên vừa nhập.

Code:

#include <iostream>  using namespace std;
#include <conio>
int main() {
  char MS[20],HT[100],QQ[100]; \\Chú ý 1
  int NS;
  float DTB;
  cout<<"Nhap ma so sinh vien \n";
  cin.getline(MS,20); \\Chú ý 2
  cout<<"Nhap Ho Ten \n";
  cin.getline(HT,100);
  cout<<"Nhap que quan \n";
  cin.getline(QQ,100);
  cout<<"Nhap nam sinh \n";
  cin>>NS;
  cout<<"Nhap diem trung binh cac nam hoc \n";
  cin>>DTB;
  cout<<"**** Thong tin sinh vien ****";
  cout<<"\n MSSV: "<
  cout<<"\n Ho ten: "<
  cout<<"\n Que quan: "<
  cout<<"\n Nam sinh: "<
  cout<<"\n Diem trung binh cac nam hoc: "<
  getch();
  return 0;
}

Chú ý 1:Có thể khai báo biến chuỗi kí tự theo kiểu char biến[độ rộng(tối đa 255)] . Nhược điểm là chuỗi chỉ được tối đa 255 kí tự thôi .

Chú ý 2: Dùng hàm cin.getline(biến,độ rộng) để có thể đánh được khoảng trắng khi nhập tên hoặc quê quán. Cái này phải sử dụng riêng do tính chất của hàm cin không nhập được chuỗi kí tự có khoảng trắng





Mon Feb 08, 2010 11:29 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 8, 9

 
Bài tập 8: Viết chương trình nhập vào ba cạnh của một tam giác, tính và xuất ra diện tích của tam giác đó

Code:

#include <iostream>  using namespace std;
#include <conio>
#include <math>
int main() {
  float a,b,c,p,S;
  cout<<"Nhap 3 canh tam giac ";
  cin>>a>>b>>c;
  p=(a+b+c)/2;
  S=sqrt(p*(p-a)*(p-b)*(p-c));
  cout<<"Dien tich tam giac la: "<
  getch();
  return 0;
}


Bài tập 9: Một đoạn thẳng được biểu diễn bởi 2 điểm trong mặt phẳng. Viết chương trình nhập vào hai điểm của một đoạn thẳng và xuất ra trung điểm của đoạn thẳng đó.

Code:

#include <iostream> using namespace std;
#include <conio>
#include <math>
int main() {
  float xA,xB,yA,yB;
  cout<<" Nhap xA,yA,xB,yB ";
  cin>>xA>>yA>>xB>>yB;
  cout<<"\n Trung diem co toa do la I("<<float((xA+xB)/2)<<","<<float((yA+yB)/2)<<")"; \\Chú ý
  getch();
  return 0;
}

+Chú ý:Để rút ngắn bài giải và khỏi phải khai báo thêm biến x1, x2. Ta có thể dùng hàm cout đưa ra màn hình giá trị của x1 hay x2 thông qua biểu thức tính của nó và đặt biểu thức trong float() để đưa ra màn hình giá trị thực






Được sửa bởi blackrose4s ngày Mon Feb 08, 2010 11:52 pm; sửa lần 1.


Mon Feb 08, 2010 11:47 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 10,11

 
Bài tập 10: Viết chương trình nhập vào ba đỉnh của một tam giác. Xuất ra trọng tâm của tam giác đó

Giống bài 9 ghê có điều thêm 2 biến nữa. Các bạn tự giải nhé :flower:


Bài tập 11: Xét tam thức bậc 2 có dạng ax2 + bx + c. Viết chương trình nhập vào các hệ số của một tam thức bậc 2 và giá trị của biến số x; xuất ra giá trị của tam thức bậc 2 đó.

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  float a,b,c,x;
  cout<<"Nhap a,b,c,x ";
  cin>>a>>b>>c>>x;
  cout<<"f= "<<float(a*x*x+b*x+c);
  getch();
  return 0;
}

+Bài này đáng ra mà cho hay một chút phải thêm code ngăn không cho nhập số 0 ở biến a thì mới đúng là tính giá trị của tam thức bậc 2. Mà thôi mệt ! Nhiu đó là đủ gòi, muốn nhập số phức cũng được Rolling Eyes





Tue Feb 09, 2010 1:31 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 12: Hãy tìm biểu thức đúng trong các biểu thức dưới đây:

(i=j)++
i+j ++
++(i+j)
++i+++j

Đầu tiên cần biết rằng một biểu thức phải trả về giá trị có thể là kiểu số nguyên, số thực, kiểu kí tự hay kiểu boolean. Nhìn sơ qua 4 biểu thức trên không có kí tự , không có các toán tử quan hệ nên không thể là kiểu kí tự hay kiểu boolean

Đây là một bài khó. Để làm được mà không ngồi máy test thì phải thuộc thứ tự ưu tiên của các toán tử. Thui thì ngồi ôn lại bài một chút:


Khi viết các biểu thức phức tạp với nhiều toán hạng các bạn có thể tự hỏi toán hạng nào được tính trước, toán hạng nào được tính sau. Ví dụ như trong biểu thức sau:

a = 5 + 7 % 2

có thể có hai cách hiểu sau:

a = 5 + (7 % 2) với kết quả là 6,

hoặc
a = (5 + 7) % 2 với kết quả là 0

Câu trả lời đúng là biểu thức đầu tiên. Vì nguyên nhân nói trên, ngôn ngữ C đã thiết lập một thứ tự ưu tiên giữa các toán tử, không chỉ riêng các toán tử số học mà tất cả các toán tử có thể xuất hiện trong C . Thứ tự ưu tiên của chúng được liệt kê trong bảng sau theo thứ tự từ cao xuống thấp.


Thứ tựToán tửMô tảAssociativity
1::scopeTrái
2() [ ] -> . sizeof
Trái
3 --tăng/giảmPhải
~Đảo ngược bit
!NOT
& *Toán tử con trỏ
(type)Chuyển đổi kiểu
-Dương hoặc âm
4* / %Toán tử số họcTrái
5 -Toán tử số họcTrái
6<< >>Dịch bitTrái
7< <= > >=Toán tử quan hệTrái
8== !=Toán tử quan hệTrái
9& ^ |Toán tử thao tác bitTrái
10&& ||Toán tử logicTrái
11?:Toán tử điều kiệnPhải
12= = -= *= /= %=
= <<= &= ^= |=
Toán tử gánPhải
13,Dấu phẩyTrái

Associativity định nghĩa trong trường hợp có một vài toán tử có cùng thứ tự ưu tiên thì cái nào sẽ được tính trước, toán tử ở phía xa nhất bên phải hay là xa nhất bên trái.Nếu bạn muốn viết một biểu thức phức tạp mà lại không chắc lắm về thứ tự ưu tiên của các toán tử thì nên sử dụng các ngoặc đơn. Các bạn nên thực hiện điều này vì nó sẽ giúp chương trình dễ đọc hơn

Bây giờ giải thích từng biểu thức :

Để cho dễ hiểu, giả bộ mình gán i=3 ; j=5 và toàn bộ biểu thức gán cho biến a

a=(i=j)++

Ưu tiên trong ngoặc và bên trái trước -> Đầu tiên gán giá trị của biến j cho i -> do i nằm bên trái nên là nhân vật chính, j có nhiệm vụ phải truyền giá trị của mình cho i.
"++" được ưu tiên hơn dấu gán "=" nhưng do "++" nằm phía bên phải (i=j) chứ không nằm liền kề với dấu gán "=" nên phải ưu tiên dấu gán "=" nằm bên trái trước.
Ra khỏi cặp dấu ngoặc (), i có giá trị là 5 lập tức truyền giá trị (hay gán giá trị) cho a rồi sau đó i tăng lên một đơn vị. Sau khi xong toàn bộ thì a = 5 , i =6 , j=5

Kiểm tra lại qua đoạn mã sau

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  float i=3,j=5,a,b,c;
  a=i+j++;
  cout<<a<<i<<j;
  getch();
  return 0;
}

Nói chung là cứ xem lại bảng thứ tự ưu tiên rồi xét. Chú ý Associativity mấy toán tử ưu tiên kiểu bên phải khi chúng nằm liền kề nhau, còn tổng thể thì vẫn là ưu tiên bên trái trước.

a=i+j++ với i=3,j=5

Đầu tiên i+j=8 . Sau đó a=i+j=8 . Cuối cùng j+1=6


a=++(i+j) với i=3,j=5

Đầu tiên i+j=8. Sau đó không tính được tiếp do toán tử ++ chỉ sử dụng được khi nó đứng trước hay đứng sau 1 biến. Ở đây, trước và sau nó là dấu gán"=" và dấu ngoặc "(" =>Biểu thức sai.

a=++i+++j với i=3,j=5

Trình dịch sẽ hiểu như thế này
a=++i++ +j (do ++ ưu tiên hơn nên được hiểu trước)
Trước và sau biến i đều có toán tử tăng "++". Điều này vi phạm quy tắc sử dụng của toán tử tăng/giảm trong C ( Mình không rõ lắm chỗ này hình như là có liên quan đến con trỏ gì ấy) Trình dịch sẽ báo lỗi => Biểu thức sai





Fri Feb 19, 2010 6:45 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 15*

 
Bài tập 15: Viết chương trình thể hiện trò chơi oẳn tù tì với quy ước: Búa = 'B'; Bao ='O'; Kéo = 'K'. Nhập vào hai kí tự đại diện cho hai người chơi. Xuất ra màn hình câu thông báo người chơi nào thắng hoặc hoà

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  char a,b;  //B1
  int c,d;
  cout<<"Anh ra cai \n";  //B2
  cin>>a;
  if (a=='B') c=1;
  else if (a=='O') c=2;
        else c=3;
  cout<<"Em ra cai \n";
  cin>>b;
  if (b=='B') d=1;
  else if (b=='O') d=2;
        else d=3;
  switch(c^d) {  //B3
    case 0: // draw  //B4
    cout<<"Hoa roi!";
    break;
    case 1:    // KEO vs BAO
    if(a=='K')
        cout<<"Anh thang - Em thua";
    else
        cout<<("Anh thua - Em thang");
    break;
    case 2:      // BUA vs KEO
    if(a=='B')
        cout<<"Anh thang - E thua";
    else
        cout<<"Anh thua - Em thang";
    break;
    case 3:      // BUA vs BAO
    if(a=='B')
        cout<<"Anh thua - Em thang";
    else
        cout<<("Anh thang - Em thua");
    break;
    }
   getch();
   return 0;
}

Giải thích từng bước làm:

B1: Khai báo 2 biến a,b kiểu char để nhận 3 kí tự B O K tương ứng với Búa Bao Kéo . Tiếp đó khai báo thêm 2 biến c,d kiểu int (c đại diện cho a, d đại diện cho b) để quy ước 3 kí tự B O K tương ứng sang 3 số 1 2 3 cho dễ tính toán.

B2: Giả sử 2 người chơi là anh với em . Nhiệm vụ của bước này là nhận các kí tự từ bàn phím vào 2 biến a,b rồi dựa vào đó quy ra được c với d

B3: XOR là toán tử thao tác trên bit nhưng do tính chất đơn giản của bài toán nên ta có thể lợi dụng toán tử này để rút ngắn bài giải lại. Trước hết xin giới thiệu về toán tử XOR và cách sử dụng:

XOR

Cũng giống OR, toán tử thao tác bit XOR (còn gọi là OR có loại trừ - exclusive OR) cũng là một toán tử hai ngôi, có nhiệm vụ thực hiện tính toán (trên từng bit) với hai chuỗi bit có cùng độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi bit ban đầu. Tuy nhiên, trên mỗi cặp bit tương ứng nhau của hai toán hạng, toán tử XOR sẽ trả về 1 nếu chỉ có một trong hai bit là 1 (và bit còn lại là 0), ngược lại, XOR trả về bit 0.Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng kí hiệu "^" (dấu mũ) Ví dụ:

0101
^
0011
---------
0110

Ôi! Cái này mệt nhức đầu lắm, trình độ mới học chưa dám nghĩ đến.Đơn giản chỉ cần hiểu như thế này: 2 chuỗi bit trên có cùng độ dài, ta xếp chúng lại song song với nhau sau đó so sánh số trên và dưới cứ giống nhau thì kết quả ở dưới điền số 0, khác nhau thì điền số 1 .

Bây giờ liên quan đến bài toán của chúng ta: c và d chỉ có thể nhận 1 trong 3 giá trị là 1, 2 và 3 tương ứng trong hệ nhị phân là 01, 10 và 11 . Ta thực hiện c^d ( c xor d ) nghĩa là đã thực hiện phép toán XOR chúng trong hệ nhị phân. Làm cái ví dụ cho dễ hiểu:

Giả sử c=1; d=2
01
^
10
--------------
11 -----> số 3 trong hệ thập phân

Giả sử c=3; d=1
11
^
01
--------------
10 ------> số 2 trong hệ thập phân

Nếu 2 số giống nhau thì tất nhiên trả về 00 tức là số 0. Hơ hơ và cũng hổng hiểu tại sao trong phạm vi 1 đến 3 thì cứ 2 số khác nhau thì trả về số còn lại. Không biết tới đây còn ai chưa hiểu nữa nhỉ

B4: Bước còn lại thì đơn giản, nó trả về số nào thì ta biết kí tự tương ứng với số đó Anh và Em đều không oẳn ra, ta dùng If giải quyết ngon ơ phần còn lại .

Bài này tốn nhiều mồ hôi Rolling Eyes và nước mắt Crying or Very sad của tui lắm đó nha !





Fri Feb 19, 2010 8:47 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Bài tập 16,17

 
Bài tập 16: Viết chương trình tính lương của nhân viên dựa theo thâm niên công tác (TNCT) như sau; Lương=hệ số*lương căn bản, trong đó lương căn bản là 650000 đồng
+Nếu TNCT <12 tháng: hệ số =1.92
+Nếu TNCT 12 <= TNCT < 36 tháng : hệ số = 2.34
+Nếu 36<= TNCT <60 tháng: hệ số = 3
+Nếu TNCT >= 60 tháng: hệ số = 4.5


Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  const int luongcb=650;
  int tnct;
  double heso,luong;
  cout<<" Cho biet tham nien cong tac \n";
  cin>>tnct;
  if (tnct < 12) heso = 1.92;
    else if (tnct < 36) heso = 2.34;
          else if (tnct < 60) heso = 3;
                else heso = 4.5;
  luong=luongcb*heso;
  cout<<"Luong = "<<luong<<"000 ngan dong";
  getch();
  return 0;
}


Bài tập 17: Một điểm KARAOKE tính tiền khách hàng theo công thức sau:
+Mỗi giờ trong 3 giờ đầu tiên tính 30 000 đồng/giờ
+Mỗi giờ tiếp theo có đơn giá giảm 30% so với đơn giá trong 3 giờ đầu tiên.
Ngoài ra nếu thời gian thuê phong từ 8 - 17 giờ thì được giảm giá 10%. Viết chương trình nhập vào giờ bắt đầu, giờ kết thúc và in ra số tiền khách hàng phải trả biết rằng 8 <= giờ bắt đầu <= 24.




Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  int giobd,giokt,thoigian,tien;
  do {
      cout<<"Nhap gio bat dau \n";
      cin>>giobd;
      cout<<"Nhap gio ket thuc \n";
      cin>>giokt;
      } while((giobd < 8)||(giokt > 24)||(giobd > giokt));
  thoigian=giokt-giobd;
    if (thoigian > 3)
        tien = 3 * 30000 + (thoigian - 3) * 30000 * 0.7;
    else tien = thoigian * 30000;
      if (giokt <= 17)
        tien *= 0.9;
  cout<<"So tien la "<<tien<<" ngan dong";
  getch();
  return 0;
}





Fri Mar 05, 2010 11:31 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 18: Nhập vào ngày tháng của một năm hiện tại. Bạn hãy viết chương trình
+ Kiểm tra tính hợp lệ của ngày tháng nhập
+ Cho biết tháng này thuộc quý mấy trong năm
+ Cho biết tháng nhập có bao nhiêu ngày
+ Cho biết ngày hôm sau của ngày đã nhập là ngày nào
+ Cho biết ngày hôm trước của ngày đã nhập là ngày nào



Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
    int mth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int ngay,thang,nam;
    cout <<"Nhap ngay, thang, nam: \n";
    cin >> ngay >> thang >> nam;
    if (((nam%4==0)&&(nam%100!=0))||(nam%400==0))
        mth[1]++;
    if ((ngay>0)&&(ngay<=mth[thang-1])&&(thang>0)&&(thang<13)&&(nam>0))
    {
        if ((thang==1)||(thang==2)||(thang==3))
            cout<<"Thang "<<thang<<" thuoc quy I \n";
        else if ((thang==4)||(thang==5)||(thang==6))
                  cout<<"Thang "<<thang<<" thuoc quy II \n";
              else if ((thang==7)||(thang==8)||(thang==9))
                        cout<<"Thang "<<thang<<" thuoc quy III \n";
                      else cout<<"Thang "<<thang<<" thuoc quy IV \n";
        cout<<"Thang "<<thang<<" co "<<mth[thang-1]<<" ngay \n";
        if (ngay==mth[thang-1]) cout<<"Ngay hom sau la ngay 1 \n";
        else cout<<"Ngay hom sau la ngay "<< ngay+1 <<"\n";
        if (ngay==1) cout<<"Ngay hom truoc la ngay "<<mth[thang];
        else cout<<"Ngay hom truoc la ngay "<<ngay-1;
    }
    else cout << "Ngay thang ban nhap khong hop le";
   getch();
   return 0;
}

+ Tạo mảng mth gồm 12 phần tử với giá trị mỗi phần tử tương ứng với số ngày các tháng từ 1 đến 12. Lưu ý, C++ quy định địa chỉ của phần tử đầu tiên là mth[0]
+ Nhập ngày tháng năm
+ Kiểm tra năm người nhập có phải là năm nhuận hay không? Nếu là năm nhuận thì truy cập đến địa chỉ của tháng 2 ( mth[1] ) tăng nó lên thêm 1 đơn vị tức 1 ngày.
+ Phần còn lại thì xuất ra màn hình thông tin theo yêu cầu của đề .





Fri Mar 05, 2010 11:58 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 19: Viết chương trình nhập vào 3 số, tìm số lớn nhất, nhỏ nhất của 3 số đó.

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  int a[3],i,j,t;
  cout<<"Nhap 3 so \n";
  cin>>a[0]>>a[1]>>a[2];
  for(i=0;i<2;i++)
      for(j=i+1;j<3;j++)
            if(a[i]>a[j])
        {
          t=a[i];
          a[i]=a[j];
          a[j]=t;
        }
  cout<<"Max= "<<a[2]<<endl;
  cout<<"Min= "<<a[0];
  getch();
  return 0;
}



Bài tập 20: Viết chương trình nhập vào 4 số, tìm số lớn nhất, nhỏ nhất của 4 số đó.

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  int a[4],i,j,t;
  cout<<"Nhap 4 so \n";
  cin>>a[0]>>a[1]>>a[2]>>a[3];
  for(i=0;i<3;i++)
      for(j=i+1;j<4;j++)
          if(a[i]>a[j])
        {
          t=a[i];
          a[i]=a[j];
          a[j]=t;
        }
  cout<<"Max= "<<a[3]<<endl;
  cout<<"Min= "<<a[0];
  getch();
  return 0;
}





Fri Mar 05, 2010 12:45 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 22: Viết chương trình giải bất phương trình: ax+b>0

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  double a,b;
  do {
  cout<<"Nhap 2 so \n";
  cin>>a>>b;
  } while (a==0);
  if (a>0) cout<<"Nghiem: x > "<<-b/a;
    else cout<<"Nghiem: x < "<<-b/a;
  getch();
  return 0;
}

Bài tập 23: Viết chương trình nhập vào 2 phân số, xuất ra tổng, hiệu, tích thương của 2 phân số đó. Lưu ý kiểm tra điều kiện nhập mẫu khác 0 ( dùng do...while )

Code:

#include <conio>
#include <math>
int main() {
  double a,b,c,d;
  do {
     cout<<"Nhap tu va mau phan so 1 \n";
      cin>>a>>b;
      } while (b==0);
  do {
     cout<<"Nhap tu va mau phan so 2 \n";
      cin>>c>>d;
      } while (d==0);
  cout<<"Tong = "<<(a/b+c/d)<<endl;
  cout<<"Hieu = "<<abs(a/b-c/d)<<endl;
  cout<<"Tich = "<<(a/b*c/d)<<endl;
  if (c!=0) cout<<"Thuong = "<<((a/b)/(c/d));
    else cout<<"Thuong khong tinh duoc.";
  getch();
  return 0;
}





Sat Mar 06, 2010 10:22 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 24: Viết chương trình nhập vào một kí tự. Hãy xét xem đây có phải là kí tự chữ in? Là kí tự chữ thường? Là kí tự số ? Hay là kí tự khác những loại kí tự trên?

Code:

#include <iostream>  using namespace std;
#include <conio>
int main() {
  char a;
  int b;
  cout<<"Nhap ki tu \n";
  cin>>a;
  b=int(a);
  if ((b>=48)&&(b<=57)) cout<<"La ki tu so";
  else if ((b>=65)&&(b<=90)) cout<<"La ki tu chu in hoa";
        else if ((b>=97)&&(b<=122))
                cout<<"La ki tu chu thuong";
              else cout<<"La ki tu dac biet";
    getch();
    return 0;
}

Tham khảo thêm về bảng mã ASCII tại đây

Code:
http://vi.wikipedia.org/wiki/ASCII#K.C3.AD_t.E1.BB.B1_ASCII_in_.C4.91.C6.B0.E1.BB.A3c


Bài tập 25: Chương trình cho phép bạn nhập vào một số nguyên dương, là lượng điện tiêu thụ (kWh) trong tháng của nhà bạn. Chương trình tính và in số tiền nhà bạn phải trả cho tháng đó được tính theo giá định mức như bảng sau:

100 kwh đầu tiên 50 kwh tiếp 50 kwh tiếp 100 kwh tiếp Từ 300 kwh trở lên
550 VND 900 VND 1250 VND 1450 VND 1700 VND

và phải đóng thuế giá trị gia tăng 10%.

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  unsigned int a;
  long st;
  cout<<"Nhap luong dien tieu thu (kWh) \n";
  cin>>a;
  if (a<=100) st=a*550;
  else if ((a>100)&&(a<=150)) st=100*550+(a-100)*900;
        else if ((a>150)&&(a<=200)) st=100*550+50*900+(a-150)*1250;
            else if ((a>200)&&(a<=300))
                      st=100*550+50*900+50*1250+(a-200)*1450;
                  else st=100*550+50*900+50*1250+100*1450+(a-300)*1700;
  cout<<"So tien phai tra la "<<st*1.1<<" VND.";
  getch();
  return 0;
}





Sat Mar 06, 2010 11:29 am

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài tập 26: Một công ty trả lương cho nhân viên (theo tuần) như sau:
+ Nhà quản lí (mã số 1) nhận một khoản lương cố định X (theo tuần).
+ Công nhân làm theo giờ (mã số 2) nhận một khoản lương cơ bản Y đồng trong 40 giờ đầu trong tuần và 1.5 lần lương cơ bản cho mỗi giờ vượt mức qui định đó.
+ Lương công nhân theo lợi nhuận (mã số 3) được nhận 500.000đ công thêm 7% trị giá doanh số Z mà công nhân ấy bán hàng ra trong tuần.
+ Lương công nhân theo sản phẩm (mã số 4) nhận tiền dựa vào số N sản phẩm mà người đó đã làm ra trong tuần, với mỗi sản phẩm thì người này nhận được S đồng (mỗi người chỉ làm ra một loại sản phẩm nhất định).
Viết chương trình cho nhập vào mã số, tùy theo loại công nhân mà cho phép nhập vào những thông tin cần thiết cho công nhân đó để tính lương. Sau đó tính lương mà công ty phải trả cho nhân viên ấy trong tuần.


Code:
Coming soon





Mon Mar 22, 2010 1:30 am

UserRegulus™ Người này hiện đang:
Level: Tổng điều hành
Danh vọng:758


Tổng điều hành

Regulus™

Tổng điều hành

http://itk35.tk
Giới tính: Nam
Đến từ: ...
Join: 06/11/2009
Bài gửi: 758
HUMOR: Nghe nhạc.. Computer

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bai 29
Code:
#include <iostream>
using namespace std;
int main()
{
    int gt=1,n;
    cout<<"Nhap n=";
    cin>>n;
    for(int i = (n % 2)? 1 : 2; i <= n; i += 2) gt *= i;
    cout<<n<<"!!= "<<gt<<endl;
    return 0;
}

Bai 32
Code:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n, ngto;
    ngto = 1;
    cout << "Nhap gia tri n: ";
    cin >> n;
    for (int i=2; i < n; i++)
    {
        if (n%i == 0)
        {
                ngto = 0;
                break;
        }       
    }
    if (ngto == 1)
                cout << "\n So "<< n << " la so nguyen to.";
    else               
                cout << "\n So " << n << " khong phai la so nguyen to.";
    return 0;
}
Bai 38

Code:
#include <iostream>
using namespace std;
int UCLN(int, int);
void main()
{
    int a,b,u ;
    cout<<"Nhap 2 so a,b : ";
    cin>>a>>b;
    u=UCLN(a,b);
    int BCNN=(a*b)/u;
    cout<<"Uoc chung lon nhat cua  "<<a<<" & "<<b<<" la "<<u<<endl;
    cout<<"Boi chung nho nhat cua  "<<a<<" & "<<b<<" la "<<BCNN<<endl;
}

int UCLN(int a, int b)
{
    while (a!=b)
    {
        if (a>b)
            a=a-b;
        else b=b-a;
    }
    return a;
}

Bai 39
Code:
#include <iostream>
using namespace std;
void main()
{
    for(int i=33;i<=255;i++)
        cout<<i<<" : "<<(char) i<<"\n";
}

Bai 40

Code:
#include <iostream>
using namespace std;

void main()
{
    long tien,t500=0,t200=0,t100=0,t50=0,t20=0,t10=0,t5=0,t2=0,t1=0;
    cout<<"Nhap so tien can doi : ";
    cin>>tien;
    if (tien>=500000)
        {
            t500=tien/500000;
            tien=tien-t500*500000;
        }
    if (tien>=200000)
        {
            t200=tien/200000;
            tien=tien-t200*200000;
        }
    if (tien>=100000)
        {
            t100=tien/100000;
            tien=tien-t100*100000;
        }
    if (tien>=50000)
        {
            t50=tien/50000;
            tien=tien-t50*50000;
        }
    if (tien>=20000)
        {
            t20=tien/20000;
            tien=tien-t20*20000;
        }
    if (tien>=10000)
        {
            t10=tien/10000;
            tien=tien-t10*10000;
        }
    if (tien>=5000)
        {
            t5=tien/5000;
            tien=tien-t5*5000;
        }
    if (tien>=2000)
        {
            t2=tien/2000;
            tien=tien-t2*2000;
        }
    if (tien>=1000)
        {
            t1=tien/1000;
            tien=tien-t1*1000;
        }

    cout<<"Ban doi duoc \n"
        <<t500<<" To 500k \n "
        <<t200<<" To 200k \n "
        <<t100<<" To 100k \n "
        <<t50<<" To 50k \n "
        <<t20<<" To 20k \n "
        <<t10<<" To 10k \n "
        <<t5<<" To 5k \n "
        <<t2<<" To 2k \n "
        <<t1<<" To 1k \n ";
}

Bai 53

Code:
#include <iostream>
using namespace std;
bool ktNgTo(int );
void main()
{
    int n;
    cout<<"n= ";
    cin>>n;
    for (int i=2;i<=n;i++)
        if (ktNgTo(i)) cout<<i<<" ";
   
}

bool ktNgTo(int n)
{
    bool nt=true;
    for (int i=2;i<n;i++)
    {
        if (n%i==0)
        {
            nt=false;
            break;
        }
    }
    return nt;
}

Tìm số đảo ngược của 1 số
Code:
#include <iostream>
using namespace std;

  void main()
  {

  int i,n;
  cout<<"Nhap vao n=";
  cin>>n;
  int k=n;
  int s=0;
  while (n!=0)
  {
  i=n%10;
  s=10*s+i;
  n=n/10;
  }
  cout<<"So dao nguoc : "<<s<<endl;
  if (s==k)
  cout<<"Day la so doi xung ";
  else cout<<"Ko doi xung ";
 
  }

Max n số

Code:

# include <iostream>
using namespace std;

void main()
{
 int day[200];
 int sophantu;
 do
 {
 cout<<"Nhap so phan tu cua mang ";
 cin>>sophantu;
 }
 while ((sophantu<=0)|| (sophantu>200));
 for (int i=1; i<=sophantu;i++)
 {
    cout<<"Nhap phan tu thu "<<i<<"= ";
    cin>>day[i];
 }
 int max=day[1];
 for (int i=1; i<=sophantu;i++)
 {
    if (max<day[i])
            max = day[i];
 }
 cout<<max<<" la so lon nhat trong "<<sophantu<<" so da nhap \n";
}


Vẽ tam giác full

Code:
#include <iostream>
using namespace std;


void tamgiacrong(int);
void tamgiacrongnguoc(int) ;
void tamgiacdac(int);
void tamgiacdacnguoc(int);
void main()
{
   
    int n;
    cout<<"Nhap chieu cao tam giac : ";
    cin>>n;
    cout<<"--------Tam giac dac ------\n";
    tamgiacdac(n);
    cout<<"--------Tam giac dac nguoc ------\n";
    tamgiacdacnguoc(n);
    cout<<"--------Tam giac rong ------\n";
    tamgiacrong(n);
    cout<<endl;
    cout<<"--------Tam giac rong nguoc ------\n";
    tamgiacrongnguoc(n);
   

}



void tamgiacdac(int n)
{
    for (int i=1;i<=n;i++)
    {
    for (int j=1;j<=n-i;j++)
        cout<<" ";
    for (int j=1;j<=2*i-1;j++)
        cout<<"*";
        cout<<"\n";
    }
}


void tamgiacdacnguoc(int n)
{
    for (int i=n;i>=1;i--)
    {
    for (int j=1;j<=n-i;j++)
        cout<<" ";
    for (int j=1;j<=2*i-1;j++)
        cout<<"*";
        cout<<"\n";
    }
}
void tamgiacrong(int n)
{
    for (int i=1;i<=n-1;i++)
    {
    for (int j=1;j<=n-i;j++)
        cout<<" ";
        cout<<"*";
    if (i>1)
    {
    for (int j=1;j<=2*i-3;j++)
        cout<<" ";
    cout<<"*";
    }

        cout<<"\n";
    }
    for (int i=1;i<=2*n-1;i++)
        cout<<"*";
}
void tamgiacrongnguoc(int n)
{
    for (int i=1;i<=2*n-1;i++)
    cout<<"*";
    cout<<"\n";
    for (int i=n-1;i>=1;i--)
    {
    for (int j=1;j<=n-i;j++)
        cout<<" ";
        cout<<"*";
    if (i>1)
    {
    for (int j=1;j<=2*i-3;j++)
        cout<<" ";
    cout<<"*";
    }

        cout<<"\n";
    }

}


Có mấy bài ko có trong bài tập mà thấy hay nên post lun Very Happy


Còn nữa...




[center]
&lt;font size=10&gt;Tin học là phải tin mới học&lt;/font size&gt;

Copy- Paste -&gt; Copy- Paste-Hiểu-Đánh giá-Phát triển Cải tiến.
&lt;br&gt;


Email: plkhanhhai1991@gmail.com
k35104017@student.hcmup.edu.vn


Wed Mar 24, 2010 12:43 am

UserRegulus™ Người này hiện đang:
Level: Tổng điều hành
Danh vọng:758


Tổng điều hành

Regulus™

Tổng điều hành

http://itk35.tk
Giới tính: Nam
Đến từ: ...
Join: 06/11/2009
Bài gửi: 758
HUMOR: Nghe nhạc.. Computer

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài 41: Trò chơi đoán số ...

Làm thử cho dzui.. hok bik còn lỗi j hok... bà kon test thử cái Very Happy:D
Test tốt trên Visual Studio 2005 và C Free.. mấy cái kia hok bik... chắc là good Very Happy
Code:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>

using namespace std;
void nguoivsmay();
void mayvsnguoi();
void game();
void choitiep();
void win();
void lose();

void main()
{   
   system("cls");
   game();   
}

void nguoivsmay()
{
   srand((unsigned)time(NULL));
   int may=rand()%100;
   bool dung=false;
   int   nguoichoi;
   cout<<"Ban co 7 lan doan!!!  CO LEN \n";
   for (int i=1;i<=7;i++)
   {
      cout<<"-------------Lan doan thu "<<i<<"/7------------------------\n";
      
      cout<<"Nhap so ban doan nao : ";
      cin>>nguoichoi;
      if (may>nguoichoi) cout<<"KO DUNG !!! .... So ban chon NHO QUA\n ";
      if (may<nguoichoi) cout<<"KO DUNG !!! .... So ban chon LON QUA\n";
      if (may==nguoichoi)
      {
         dung=true;
         win()   ;
         break;
         
      }
     cout<<"-------------------------------------\n";
   }
   if (dung==false)
      lose();
     choitiep();
   
}
void mayvsnguoi()
{
   bool dung=false;
   srand((unsigned)time(NULL));
   int nguoichoi,solan,may;
   cout<<"Nhap so ban muon may doan ";
   cin>>nguoichoi;
   cout<<"Nhap so lan gioi han : ";
   cin>>solan;
   for (int i=1;i<=solan;i++)
   {
      
      may=rand()%100;
      cout<<"Lan doan thu "<<setw(3)<<i<<" : May doan so "<<may<<endl;
      
      if (may==nguoichoi)
      {
         dung=true;
         lose();
         break;
         
      }
   
   }
   if (dung==false) win();
   choitiep();
}
void game()
{
   system("cls");
   int chon;
   cout<<"------------------ Rex Riddle -----------------------\n";
   cout<<"******************************************************\n"     ;
   cout<<"**************  TRO CHOI DOAN SO  *******************\n"      ;
   cout<<"******************************************************\n"     ;
   cout<<endl;
   cout<<"Vui long chon tro choi  ^^ \n";
   cout<<"1.  Nguoi vs may ! \n";
   cout<<"2.  May vs nguoi ! \n";
   cout<<"3.  Thoat \n";
   do
   {
      
   cin>>chon;
   if ((chon<1)||(chon>3))
      game();
      
   }
   while ((chon!=1)&&(chon!=2)&&(chon!=3));

   system("cls");
   if (chon==1) nguoivsmay();
   if (chon==2) mayvsnguoi();
      
}


void win()
{
   cout<<endl;
   cout<<endl;
   cout<<"      ****      ****    ****      ***    ***\n";
   cout<<"      ***      ***    ********    ***    *** \n";
   cout<<"        **********    ***    ***  ***    ***    \n";
   cout<<"          ****      ***    ***  ***    ***  \n";
   cout<<"          ****      ***    ***  ***    ***    \n";
   cout<<"          ****        ********    **********    \n";
   cout<<"          ****          ****      ********      \n";
   cout<<endl;
   cout<<"  ***      ******      *** ****  ******    ***\n";
   cout<<"  ***    ***  ***    ***  ****  *** ***    ***\n";
   cout<<"    ***  ***    ***  ***  ****  ***  ***  ***\n";
   cout<<"    *** ***      *** ***    ****  ***  ***  ***\n";
   cout<<"      ****        ****      ****  ***    *******\n";
   cout<<"      ****        ****      ****  ***    ******\n";
}



void lose()
{
   cout<<endl;
   cout<<endl;
   cout<<"      ****      ****    ****      ***    ***\n";
   cout<<"      ***      ***    ********    ***    *** \n";
   cout<<"        **********    ***    ***  ***    ***    \n";
   cout<<"          ****      ***    ***  ***    ***  \n";
   cout<<"          ****      ***    ***  ***    ***    \n";
   cout<<"          ****        ********    **********    \n";
   cout<<"          ****          ****      ********        LOSE\n";
   cout<<endl;
   
}



void choitiep()
{
   char choitiep;
   cout<<"Ban co muon choi tiep ko ?? (C/K) ";
   cin>>choitiep;
   if ((choitiep=='C')||(choitiep=='c')) main();
   
}

[i][i]
[/i][/i]


Đoạn code trên có một cái mới về phần tạo số ngẫu nhiên....
mọi người đọc bài này có thể hiểu thêm chút Very Happy


[/i][/i]Những tình huống không thể dự đoán trước được sẽ làm nên sự hấp dẫn cho
game. Chẳng hạn, sự thay đổi chiến thuật bất ngờ của đối thủ trong game
dàn trận, hoặc sự xuất hiện bất ngờ của một con quái vật trong action
game. Tạo nên một con số ngẫu nhiên là một kĩ thuật cơ bản của dạng này.

Giới thiệu chương trình Die Roller: (đổ xúc xắc)

Chương trình Die Roller tái hiện lại việc đổ một con xúc xắc có sáu mặt. Máy tính sẽ tính toán mặt nào sẽ xuất hiện một cách ngẫu nhiên. Hình 2.11 cho thấy kết quả của chương trình:


Hình 2.11: Chương trình tạo ra một con số ngẫu nhiên.
Gọi hàm rand():

Một trong những điều tôi làm đầu tiên là include file mới:

Code:
#include
File cstdlib chứa những hàm tương tác với con số ngẫu nhiên. Vì tôi đã include nó, tôi được phép gọi hàm thuộc file này, cụ thể là hàm rand(), đó là những gì tôi làm ở hàm main():

Code:
int randomNumber = rand(); //tạo một con số ngẫu nhiên
Như bạn đã học ở Chương 1, hàm là một đoạn code có thể làm việc gì đó,
sau đó trả lại một giá trị. Bạn gọi hàm bằng cách sử dụng tên nó, sau
đó là hai dấu ngoặc
đơn, (hyutars: bên trong hai dấu ngoặc đơn có thể có các đổi). Nếu hàm
trả về một giá trị, bạn có thể gán giá trị đó cho một biến. Tôi sử dụng
một câu lệnh gán, gán giá trị trả về của hàm rand() (một con số ngẫu
nhiên) cho biến randomNumber.

Lưu ý: Hàm rand() tạo ra
một con số ngẫu nhiên từ 0 đến ít nhất là 32767. Tôi không thể nói
trước giá trị lớn nhất do hàm rand() tạo ra vì nó phụ thuộc vào sự bổ
sung của bạn trong C++ (nguyên văn: depends on your implementation of
C++). Giá trị lớn nhất được lưu giữ trong hằng số RAND_MAX, được định
nghĩa trong file cstdlib. Cho nên nếu bạn muốn biết giá trị lớn nhất
hàm rand() có thể tạo ra, chỉ cần cout RAND_MAX.

Hàm còn có thể lấy các giá trị tử bên ngoài vào để sử
dụng. Bạn cung cấp các giá trị đó cho hàm bằng cách đặt chúng ở giữa
hai dấu ngoặc đơn, tách biệt các giá trị đó bởi dấu phẩy. Những giá trị
đó được gọi là đối số, và khi đó, bạn đã trao quyền sử dụng chúng cho
hàm. Tôi không để giá trị nào ở hàm rand() vì hàm đó không cần sử dụng
đối số nào cả.

Nhân tố tạo ra số ngẫu nhiên: (Seeding the Random Number Generator)

Hàm rand() tạo ra một số giả ngẫu nhiên (không phải là số ngẫu nhiên
thật) dựa vào một công thức. Để hiểu vấn đề này ta cứ tưởng tượng
rand() đọc một cuốn sách lớn mà nội dung của nó là
các số ngẫu nhiên. Nhưng rand() luôn luôn bắt đầu tại trang đầu của
cuốn sách lúc chương trình chạy. Điều đó có nghĩa là rand() luôn cho ra
những số giống nhau mỗi khi chương trình chạy. (hyutars: bạn có thể
kiểm chứng điều này bằng cách bỏ hàm srand đi)
Bạn có thể sửa lại vị trí bắt đầu của rand() trong cuốn sách bằng cách
dùng hàm srand() (cũng được định nghĩa trong cstdlib). Số ở giữa hai
dấu ngoặc đơn hàm srand() là nhân tố để tạo
ra số ngẫu nhiên, và để chúng ta có những số ngẫu nhiên thực sự, nhân
tố đó phải là một con số khác nhau mỗi khi chương trình chạy. Cách tốt
nhất là sử dụng hàm time() (được định nghĩa trong ctime), nó sẽ trả về
một con số dựa vào thời gian hiện hành.
Để có thể sử dụng hàm time(), tôi include file ctime ở đầu chương trình:

Code:
#include
Sau đó, trong hàm main(), tôi tạo ra số ngẫu nhiên dựa vào thời gian hiện tại:

Code:
srand(time(0)); // seed random number generator based on current time
Trong đoạn code trên, tôi dùng hàm time(0) như là một đối số của hàm srand(). Nghĩa là giá trị trả về của hàm time(0) sẽ được sử dụng bởi hàm srand(). Tổng quát, bạn có thể dùng hàm này để làm đối số cho hàm kia, miễn sao giá trị trả về của hàm làm đối số phải hợp lệ.
Trong hàm time(0), tôi đã đặt đối số là 0 vào. time(0) sẽ trả về một
giá trị dựa vào thời gian hiện hành, sau đó tôi đưa giá trị đó cho hàm
srand() -> tạo ra một số thực sự ngẫu nhiên.

Thu hẹp vùng tạo ra số ngẫu nhiên:

Sau khi tạo ra một số ngẫu nhiên, biến randomNumber giữ một giá trị từ 0 đến 32 767. Nhưng tôi muốn số đó phải từ 1 đến 6 thôi(đang chơi trò đổ xúc xắc mà), do đó tôi dùng câu lệnh này để thu hẹp phạm vi đó lại:

Code:
int die = (randomNumber % 6) + 1; // get a number between 1 and 6
Tất cả những số dương khi chia cho 6 đều có số
dư từ 0 đến 5. Trong câu lệnh trên, tôi lấy số dư và cộng thêm 1, phạm
vi của biến die bây giờ sẽ là 1 đến 6 – đúng như điều chúng ta mong
muốn. Bạn có thể dùng kĩ thuật này để điều chỉnh phạm vi xuất hiện của
số ngẫu nhiên.

Bẫy: Dùng toán tử modulus (chia lấy dư) để điều chỉnh
phạm vi xuất hiện của một số ngẫu nhiên không phải lúc nào cũng đúng
tuyệt đối. Sẽ có những con số xuất hiện nhiều hơn so với các con số
khác. Nhưng dù thế nào đi nữa, đây không phải là vấn đề đối với một
game đơn giản.


Trích dẫn :
Túm lại toàn bộ là muốn tạo 1 số ngẫu nhiên ko trùng nhau

Sử dụng lệnh
Code:
srand((unsigned)time(NULL));
Số cần tạo ngẫu nhiên =rand()%(khoảng giới hạn);
Nhớ phải thêm 2 thư viên
Code:
#include <cstdlib>
#include <ctime>
Code:
srand((unsigned)time(NULL));
n =rand()%(100);

VD: tạo 1 số n ngẫu nhiên từ 0 - 100



To be continued...




[center]
&lt;font size=10&gt;Tin học là phải tin mới học&lt;/font size&gt;

Copy- Paste -&gt; Copy- Paste-Hiểu-Đánh giá-Phát triển Cải tiến.
&lt;br&gt;


Email: plkhanhhai1991@gmail.com
k35104017@student.hcmup.edu.vn


Sun Mar 28, 2010 3:43 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài 26: Đề bài ở phía trên

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  unsigned int MS;
  int X,Y,t;
  do  {
  cout<<"Nhap ma so nhan vien \n";
  cin>>MS;
      } while (MS>4);
  if (MS==1) {
               cout<<"Nhap khoan luong co dinh X \n";
                cin>>X;
                cout<<"Luong cho nha quan li la "<<X<<" VND.";
              }
  else if (MS==2) {
                    cout<<"Nhap khoan luong co ban Y \n";
                    cin>>Y;
                    cout<<"Nhap so h lam duoc trong tuan \n";
                    cin>>t;
                    if (t<=40) X=40*Y;
                    else X=(t-40)*1.5*Y+40*Y;
                    cout<<"Luong cho cong nhan lam theo gio la "<<X<<" VND.";
                  }
        else if (MS==3) {
                            cout<<"Nhap tri gia doanh so Z \n";
                          cin>>Y;
                          cout<<"Luong cong nhan theo loi nhuan la "<<(500000+0.7*Y)<<" VND.";
                          }
            else if (MS==4) {
                               cout<<"Nhap so N san pham lam ra trong tuan \n";
                              cin>>X;
                              cout<<"Nhap so tien S tra cho moi san pham \n";
                              cin>>Y;
                              cout<<"Luong cong nhan theo san pham la "<<X*Y<<" VND.";
                            }
  getch();
  return 0;
}


Bài 27: Nhập vào một số nguyên có 2 chữ số. In ra cách đọc của nó

Code:

#include <iostream> using namespace std;
#include <conio>
#include <stdlib>
const char* chu[10] = {"khong", "mot", "hai", "ba", "bon", "nam", "sau", "bay", "tam", "chin"};
int main() {
  int a,hangchuc,hangdonvi;
  cout<<"Nhap so nguyen 2 chu so \n";
  cin>>a;
   hangchuc = a/10;
  hangdonvi = a - hangchuc*10;
  if (a==10) cout<<"muoi";
  else if (a<20) cout<<"muoi "<<chu[hangdonvi];
        else cout<<chu[hangchuc]<<" muoi "<<chu[hangdonvi];
  getch();
  return 0;
}

Bài này mình không làm theo cấu trúc switch mà tài liệu hướng dẫn bởi nó dài vì thế nên code chưa hay, có vài khiếm khuyết nho nhỏ nhưng chấp nhận được

Bài 28: Nhập vào một số nguyên có 3 chữ số, hãy in ra cách đọc của nó

Code:

Tài liệu đã hướng dẫn rất rõ ràng, các bạn tự làm nhé !





Sun Mar 28, 2010 4:49 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bài 30: Viết chương trình nhập vào số nguyên n. Tính và in ra các tổng sau (trong tài liệu) :

Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  int n,i;
  long int S1=0,S2=0;
  long double S3=1,S4=0;
  cout<<"Nhap so nguyen n \n";
  cin>>n;
   for(i=1;i<=n;i++)
    {
      S1+=i; S3*=i; S4+=(1/((i+1)*(i+2)));
    }
    for (i=1;i<2*n+1;i+=2)
           S2+=i;
  cout<<S1<<endl<<S2<<endl<<S3<<endl<<S4;
  getch();
  return 0;
}

Bài 31: Viết chương trình đếm và in ra số lượng các số nguyên chia hết cho 3 hoặc 7 nằm trong đoạn từ 1 đến 100.


Code:

#include <iostream> using namespace std;
#include <conio>
int main() {
  int dem = 0;
  for (int i = 1; i <= 100; i++)
    {
        if( (i % 3 ==0) || (i % 7 == 0))
            {
                      dem++;
            }
    }
  cout<<dem;
  getch();
  return 0;
}





Sat Jul 16, 2011 8:38 am

Userhieuphysic Người này hiện đang:
Level: Ma Mới
Danh vọng:1


Ma Mới

hieuphysic

Ma Mới

Giới tính: Nam
Đến từ: Galaxy
Join: 16/07/2011
Bài gửi: 1
HUMOR: 123456

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
mình có bài này nhờ bạn giúp! viết trên nền Bordland nhé! Yêu cầu: nhập vào ngày,tháng,năm. xuất ra ngày đó là thứ mấy.
nó k đơn giản vì k cho biết ngày làm mốc là thứ mấy hết! cta có thể lấy ngày 1 tháng 1 năm 1 làm thứ 2 k? đương nhiên tính từ Công Nguyên, chứ trước CN còn mệt nữa ak..



Sat Jul 16, 2011 1:59 pm

Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính: Nam
Đến từ: không gian
Join: 10/11/2009
Bài gửi: 312
HUMOR: không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: 77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

 
Bạn hieuphysic xem tại đây nhé !
Code:
http://forums.congdongcviet.com/showthread.php?t=5831




 

77 bài tập C++. Giải+Hướng dẫn+Gợi mở chi tiết [update tới Bài 41]

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
ITK35Zone :: Học tập :: Lưu trữ (năm 1) :: Tin học đại cương-
 
Free forum | © phpBB | Free forum support | Liên hệ | Report an abuse | To have a free blog