Showing posts with label Lập trình căn bản. Show all posts
Showing posts with label Lập trình căn bản. Show all posts

[KTLT C/C++] Chữa bài Test - Kỹ thuật lập trình 280916

[KTLT C/C++] Chữa bài Test - Kỹ thuật lập trình 280916

Câu 1:  Viết chương trình thực hiện
+ Nhập vào từ bàn phím n,m,x (sao cho: n,m là số nguyên thỏa mãn, 2<=n<=m<=10 ; x là số thực thỏa mãn, 1<=x<=5)
+ Tính:
  S1= m!/((m-n)!*n!)
  S2= x^1 / 1! + x^2 / 2! + ... + x^n /n!

--------
Code TC3.0


// Cau 1.
#include<iostream.h>
#include<conio.h>
#include<math.h>
// khai bao bien toan cuc
int m,n;
float x;
// Nhap m,n,x
void Nhap(){
// nhap n
cout<<"\n Nhap n:\n";
do{
cout<<"\n n= "; cin>>n;
if(n<2||n>10) cout<<"\n Nhap lai n!";
}  while (n<2||n>10);
// nhap m
cout<<"\n Nhap m:\n";
do{
cout<<"\n m= "; cin>>m;
if(m<n||m>10) cout<<"\n Nhap lai m!";
}  while (m<n||m>10);
// nhap x
cout<<"\n Nhap x:\n";
do{
cout<<"\n x= "; cin>>x;
if(x<1||x>5) cout<<"\n Nhap lai x!";
}  while (x<1||x>5);
}
// Tinh giai thua
long GiaiThua(int a){
long gt=1;
for(int i=1;i<=a;i++)
gt=gt*i;
return gt;
}
// Tinh S1
long Tinh_S1(int m, int n){
return GiaiThua(m)/(GiaiThua(n)*GiaiThua(m-n));
}
// Tinh S2
float Tinh_S2(int n, float x){
float s=0;
for(int i=1;i<=n;i++)
s=s+(float)pow(x,i)/GiaiThua(i);
return s;
}
// In Ket qua
void InKQ(){
cout<<"\n S1= "<<Tinh_S1(m,n);
cout<<"\n S2= "<<Tinh_S2(n,x);
}
// Ham main
void main(){
clrscr();
Nhap();
InKQ();
getch();
}



-----------------------------------
Câu 2: Viết các hàm thực hiện
+ Nhập từ bàn phím dãy số nguyên có n phần tử ( 3<=n<=100)
+ In dãy vừa nhập
+ Tìm số chẵn đầu tiên trong dãy
+ Đếm tất cả các số là bội của 3 và 5 trong dãy
+ Sắp xếp dãy tăng dần, in dãy đã sắp xếp
+ Loại bỏ các số trùng nhau trong dãy và in ra màn hình


Code TC3.0


// Cau 2.
#include<iostream.h>
#include<conio.h>

// khai bao bien toan cuc
int n,a[100];

// Nhap day so
void Nhap(){
// nhap n
cout<<"\n Nhap n:\n";
do{
cout<<"\n n= "; cin>>n;
if(n<3||n>100) cout<<"\n Nhap lai n!";
}  while (n<3||n>100);
// nhap mang
cout<<"\n Nhap mang:\n";
for(int i=0;i<n;i++)
{
cout<<"\n a["<<i<<"]="; cin>>a[i];
}
}
// In day
void InDay(){
cout<<"\n In day: \n";
for(int i=0;i<n;i++)
cout<<a[i]<<", ";
}
// Tim so chan dau tien trong day
void TimSoChan(){
for(int i=0;i<n;i++)
if(a[i]%2==0) break;
if(i<n) cout<<"\n So chan dau tien la: "<<a[i];
else
cout<<"\n Day khong ton tai so chan.";
}
// Dem boi cua 3,5
void DemBoi(){
int dem=0;
for(int i=0;i<n;i++)
if(a[i]%3==0 &&a[i]%5==0)
dem++;
cout<<"\n So cac so la boi cua 3 va 5: "<<dem;
}
// Sap xep day tang dan
void SapXep(){
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
 if(a[i]>a[j])
  {
int t=a[i]; a[i]=a[j];a[j]=t;
  } // in day
InDay();
}
// Loai bo phan tu trung nhau
void LoaiPhanTuTrung(){
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
 if(a[i]==a[j])
  {
    for(int g=j;g<n-1;g++)
a[g]=a[g+1];
    n--;
  }
// In day
InDay();
}
// Ham main
void main(){
clrscr();
Nhap();
InDay();
TimSoChan();
DemBoi();
SapXep();
LoaiPhanTuTrung();
getch();
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo Trình: Kỹ Thuật Lập Trình C/C++ Căn Bản Và Nâng Cao [Click để xem]

# Khoá học online: Học lập trình C/C++ TỪ A - Z [Click để xem]


* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

[Thuật toán Tìm kiếm tuần tự] Ví dụ sử dụng thuật toán tìm kiếm tuần tự [C\C++]

Thuật toán tìm kiếm tuần tự 

Ví dụ sử dụng thuật toán tìm kiếm tuần tự: Viết các hàm thực hiện
 1. Nhập dãy số nguyên có n số (1<n<100).
 2. In dãy vừa nhập
 3. Tìm giá trị x trong dãy số (x nhập từ bàn phím)
 4. Đếm số lần xuất hiện của y (y nhập từ bàn phím)
 5. Tính giá trị phần trăm các số >=5.
 6. In ra vị trí xuất hiện các số nguyên tố có trong dãy.


[Code Turbo C++]

/*

http://lap-trinh-may-tinh.blogspot.com/

*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

// khai bao
int a[100],n;

// Nhap mang
void Nhap(){
  cout<<"\n + NHAP MANG : ";
  cout<<"\n - Nhap so phan tu: ";
  do{
       cout<<"\n n= "; cin>>n;
       if(n<1||n>100)
             cout<<"\n Nhap lai n!";
  } while (n<1||n>100);

  // Nhap mang
  cout<<"\n - Nhap mang : ";
  for (int i=0;i<n;i++)
   {
       cout<<"\n a["<<i<<"]= ";
       cin>>a[i];
    }
   }

// In day
void InDay(int a[],int n){
  cout<<"\n + IN DAY \n";
  for(int i=0;i<n;i++)
      cout<<a[i]<<"; ";
 }

// Tim x trong day
void Tim_x(int x, int a[], int n){
   cout<<"\n + TIM KIEM "<< x <<" TRONG DAY:";
   int t=0;
   for(int i=0;i<n;i++)
     if(x==a[i])
        t=1;
   if(t==1)
      cout<<"\n Tim thay "<<x<<" trong day ";
   else
      cout<<"\n Khong tim thay "<<x<<" trong day ";
}

// Dem so lan xuat hien cua y trong day
int Dem_y(int y, int a[], int n){
    int dem=0;
   for(int i=0;i<n;i++)
      if(y==a[i]) dem++;
  return dem;
}

// Tinh ty le % cac so lon hon 5
void PhanTram(int a[],int n){
   float pt;
   int count=0;
   for(int i=0;i<n;i++)
     if(a[i]>=5) count++;
        pt=((float)count/n)*100;
        cout<<"\n + TY LE % CAC SO >= 5 :"<<pt<<"%";
 }

// Dem so lan xuat hien cua so nguyen to trong day
void DemSNT(int a[],int n){
   cout<<"\n + IN RA VI TRI SO NGUYEN TO: ";
   for(int i=0;i<n;i++)
   {
      int test=0;
      for(int t=2;t<a[i];t++)
          if(a[i]%t==0) test=1;
      if (test==0) cout<<i<<" ; ";
    }

}

//////////////////////
void main(){
// Nhap day
  Nhap();
// In day
 InDay(a,n);

// tim x
 int x;
 cout<<"\n Nhap gia tri can tim x= ";
 cin>>x;
 Tim_x(x,a,n);
// Dem y trong day
 int y;
 cout<<"\n Nhap gia tri can dem y= ";
 cin>>y;
 cout<<"\n + SO LAN XUAT HIEN SO "<<y<<" LA: "<<Dem_y(y,a,n);
 // Tinh ty le phan tram cac so >=5
 PhanTram(a,n);

 // Dem so nguyen to trong day
 DemSNT(a,n);

 getch();
}

[ C\C++ ] Chuyển đổi từ số thực sang chuỗi kí tự trong C/C++

Như ta đã biết, trong C/C++ có tích hợp một số các hàm chuyển đổi cho phép ta chuyển đổi qua lại giữa các loại dữ liệu. 

Một số hàm thường dùng:
 - atoi (chuyển chuỗi sang số nguyên), 
 - atof (chuyển sang float), 
 - atol (chuyển sang số longint), ...
các hàm này có trong thư viện stdlib.h

Và ngược lại, từ số nguyên ta có thể chuyển đổi về chuỗi một cách dễ dàng dùng hàm itoa(). 



Ví dụ [code C]:
#include <stdlib.h> // for itoa() call
#include <stdio.h> // for printf() call
int main()
{
  int num = 123;
  char buf[5];
// convert 123 to string [buf]
  itoa(num, buf, 10);
// print our string
  printf("%sn", buf);
  return 0;
}

Lưu ý cần đảm bảo buf đủ chỗ chứa số cần chuyển để tránh trường hợp tràn bộ đệm, kích thước cỡ (sizeof(int)*8 + 1).

Chuyển đổi đối với số nguyên là như vậy nhưng đôi khi ta lại gặp trường hợp khó hơn là chuyển đổi float sang chuỗi vì trong thư viện của C/C++ không có hàm nào cho phép ta làm việc này. Thật may mắn, như các bạn biết trong câu lệnh printf() chúng ta khi in ra màn hình có thể ép kiểu các loại dữ liệu để cho ra kết quả đúng như ý muốn. Tương tự như vậy, chúng ta có thể sử dụng hàm sprintf() để chuyển đổi. Hàm này tương tự như hàm printf() nhưng thay vì in ra màn hình thì hàm này đưa vào trong bộ đệm để lưu trữ. Từ đó ta có thể dủng một chuỗi để chứa bộ đệm này. 

Cú pháp hàm này như sau: sprintf(string, “formatting string”, vars). 
Bây giờ hãy xét một ví dụ cụ thể

#include <stdio.h>
int main()
 {
   float pi = 3.141596;
   char halfpie[80];
   pi/=2;
   sprintf(halfpie, "%f", pi);
   printf("Here is the result: %sn", halfpie);
   return 0;
}


Tuy nhiên còn vấn đề ở đây!!

Hàm sprintf() tỏ ra không an toàn vì không có kiểm tra giới hạn của bộ đệm, và hoàn toàn bộ đệm có thể bị tràn và một số vấn đề khác,...

Thay vì dùng hàm sprintf(), chúng ta sử dụng hàm snprintf() , trong đó n chính là giới hạn thông tin bạn đưa vào trong bộ đệm. 

Cú pháp: snprintf(string, size, “format string” , vars)

Hàm snprintf() chỉ cho phép nạp size kí tự vào trong bộ nhớ. 

Ví dụ cụ thể: 

#include <stdio.h> 
int main()
{
  float pi = 3.141596;
  char halfpie[80];
  pi/=2;
  snprintf(halfpie, 79, "%f", pi);
  printf("Here is the result: %sn", halfpie);
  return 0;
}


Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo Trình: Kỹ Thuật Lập Trình C/C++ Căn Bản Và Nâng Cao [Click để xem]

# Khoá học online: Học lập trình C/C++ TỪ A - Z [Click để xem]


* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

Nguồn: Chienuit

[C\C++] Những lỗi thường gặp khi mới bắt đầu lập trình C++ [Common Programming Mistakes]

C++ là một ngôn ngữ mạnh, đa nền tảng. Việc học lập trình C++ không phải là chuyện đơn giản như nói là có thể làm được mà nó là một quá trình tích lũy kinh nghiệm trên cơ sở thực hành thường xuyên. Những người mới bắt đầu với ngôn ngữ này thường gặp phải những lỗi làm họ sớm nản lòng, nhưng thực sự những lỗi đó có quá khó không? Vì vậy bài viết này sẽ cố gắng giải thích một số lỗi cơ bản thường gặp phải đối với những ai mới bắt đầu (beginners) học lập trình C++.


1. Không khai báo biến (Undeclared Variables)
int main()
{
   cin>>x;
   cout<<x;
}
Tại sao chương trình trên lại bị lỗi nhỉ? Confused smile
- Lý do là trình biên dịch của bạn không biết x là cái gì. Bạn cần phải khai báo biến x. 

Ví dụ như:

int main()
{
  int x;
  cin>>x;
  cout<<x;
}
–> Hãy nhớ khai báo biến.

2. Không khởi tạo giá trị cho biến (uninitialized variable)
Hãy xem đoạn chương trình dưới đây:

int count;
while(count<100)
{
  cout<<count;
}
Bạn tự hỏi, tại sao chương trình lại không in ra gì hết vậy?

Lưu ý rằng, ở đoạn chương trình trên, biên count chưa được khởi tạo giá trị. Vì vậy khi chương trình chạy nó có thể là giá trị bất kỳ nào trong dãy các số nguyên (int). Có thể nó sẽ có giá trị là 586 chẳng hạn, vậy thì nó sẽ không vào trong vòng lặp while khiến cho kết quả chương trình bị sai, có thể chương trình sẽ in ra kết quả là các giá trị rác từ –1000 đến 99.
–> Nên nhớ khởi tạo giá trị cho biến.

3. Thiết lập một biết với một giá trị chưa khởi tạo
int a, b;
int sum=a+b;
cout<<"Enter two numbers to add: ";
cin>>b;
cout<<"The sum is: "<<sum;
Khi chạy (RUN):
Enter two numbers to add:
 1
 3
The sum is: -1393
Có gì sai với chương trình trên?

Thông thường các lập trình viên mới bắt đầu tin rằng các biến làm việc giống như phương trình (equations). Nếu bạn chỉ định một biến bằng kết quả của một toán tử trên nhiều biến khác mà bất cứ khi nào những thay đổi biến số (ở đây là a và b), giá trị của biến cũng sẽ thay đổi. Trong C++, phép gán (assignment) không làm việc trong trường hợp này: đó là một cách đối phó. Khi bạn gán giá trị cho một biến, nó có có giá trị đó cho đến khi bạn gán cho nó một giá trị khác. Trong chương trình ví dụ trên, bởi vì a, b không được khởi tạo giá trị nên tổng của chúng sẽ là một giá trị rác ngẫu nhiên.

Có thể sửa chương trình trên như sau:
int a, b;
int sum;
cout<<"Enter two numbers to add: ";
cin>>b;
cin>>a;
sum=a+b;
cout<<"The sum is: "<<sum;

4. Sử dụng một dấu bằng trong phép so sánh (Using the single equal sign to check equality)

char x='Y';
while(x='Y')
{
  //...
  cout<<"Continue? (Y/N)";
  cin>>x;
}
Tại sao vòng lặp của tôi không bao giờ kết thúc?

Nếu bạn sử dụng một dấu bằng trong phép so sánh, chương trình của bạn thay vì so sánh giá trị bên trái có đúng với giá trị bên phải hay không thì nó sẽ thực hiện phép gán giá trị bên phải cho bên trái, và phép gán này tất nhiên trả về giá trị TRUE. Do đó vòng lặp không bao giờ kết thúc. Do đó bạn nên nhớ sử dụng == cho phép so sánh của mình. Và lời khuyên trong trường hợp này là nên đặt biến phía bên phải giá trị để cho chương trình báo lỗi thay vì thực hiện một vòng lặp vô hạn. Chương trình có thể viết lại như sau:

char x='Y';
while('Y'==x)
{
  //...
  cout<<"Continue? (Y/N)";
  cin>>x;
}
5. Không khai báo hàm (Undeclared function)
int main()
{
  menu();
}
void menu(){ //...}
Chương trình trên đã xảy ra lỗi gì?

Trình biên dịch không biết hàm menu() được khai báo trong hàm main() là cái gì. Lý do là bạn đã định nghĩa hàm menu() phía dưới hàm main(). Do đó bạn nên viết hàm menu() phía trên hàm main(), hoặc sử dụng một khai báo nguyên mẫu (prototype ) cho hàm menu() của bạn nếu bạn muốn định nghĩa nó bên dưới hàm main(), giống như:
void menu();
int main()
{
  menu();
}
void menu(){ ...}
6. Thừa dấu chấm phẩy (Extra semicolons)
int x;
for(x=0; x<100; x++);
cout<<x;
Output chương trình của bạn là bao nhiêu? Có thực sự là tổng từ 0 – 99?

Tất nhiên kết quả chương trình đưa ra không phải theo ý bạn muốn. Bởi vì trong chương trình trên bạn đã thừa một dấu chấm phẩy (;) sau vòng lặp for. Nếu bạn đặt thừa một dấu chấm phẩy ở bất kỳ nơi nào trong chương trình thì thì rất có thể chương trình của bạn sẽ báo lỗi. Đoạn chương trình trên đúng sẽ là:

int x;
for(x=0; x<100; x++)
cout<<x;

7. Vượt quá giới hạn của mảng (Overstepping array boundaries)

int array[10];
//...
for(int x=1; x<=10; x++)
cout<<array[x];
Câu hỏi đặt ra: Tại sao chương trình có chạy ra có kết quả không đúng?

Bạn nên nhớ rằng, một mảng khi khai báo sẽ bắt đầu từ phần tử số 0 chứ không phải là số 1, và kế thúc sẽ là độ dài của mảng khai báo trừ đi 1. Ví dụ, nếu bạn có một mảng 10 phần tử, phần tử đầu tiên trong mảng của bạn là phần tử 0 và phần tử cuối cùng là phần tử thứ 9. Chương trình trên sửa lại như sau:

int array[10];
//...
for(int x=0; x<10; x++)
cout<<array[x];
8. Lạm dụng các toán tử &&, || (Misusing the && and || operator)

int value;
do
{
 //...
 value=10;
}
while(!(value==10) || !(value==20))

Chương trình trên sai, tại sao ? Disappointed smile

Bạn nên nhớ một chút tới công thức của hàm Boolean là: !(A || B) tương đương với !A && !B
Do đó chương trình đúng sẽ là:
int value;
do
{
  //...
  value=10;
}while(!(value==10) && !(value==20))
Đây chỉ là bước khởi đầu trong con đường lập trình. Còn nhiều chướng ngại ở phía trước. Do đó chúng ta phải cố gắng thật nhiều!


[TxT sưu tầm]

[ C\C++ ] Bài tập con trỏ cấu trúc [ Quản lý điểm sinh viên - 29/08/13 ]

Bài tập con trỏ cấu trúc: Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
  + Họ tên
  + Địa chỉ
  + Năm sinh
  + Giới tính
  + Lớp
  + Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình  < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb



[Code Turbo C++]
/**********************************
  http://lap-trinh-may-tinh.blogspot.com/
**********************************/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

// khai bao
struct SV{
char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
int namSinh;
  float dTCC, dTA,dTDC,dTB;
};

SV a[20],*p;
int n;// so sinh vien

// Nhap thong tin sinh vien
void Nhap(){
p=a;
// nhap so sinh vien
do{
cout<<"\n Nhap so sinh vien: "; cin>>n;
if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
}while(n<2||n>20);
// Nhap thong tin sinh vien

cout<<"\n Nhap thong tin sinh vien: ";
for(int i=0;i<n;i++)
{
 fflush(stdin);
 cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
 cout<<"\n - Ho ten: "; gets((p+i)->ht);
 cout<<"\n - Dia chi: "; gets((p+i)->dc);
 cout<<"\n - Gioi tinh: "; gets((p+i)->gioitinh);
 cout<<"\n - Lop: "; gets((p+i)->lop);
 cout<<"\n - Nam sinh: "; cin>>(p+i)->namSinh;
 cout<<"\n - Diem toan cao cap: "; cin>>(p+i)->dTCC;
 cout<<"\n - Diem toan tieng anh: "; cin>>(p+i)->dTA;
 cout<<"\n - Diem tin dai cuong: "; cin>>(p+i)->dTDC;
}
}
// Tinh diem tong ket
void TinhDiem(){
 p=a;
 for(int i=0;i<n;i++)
  (p+i)->dTB=(((p+i)->dTCC)*3+((p+i)->dTA)*4+((p+i)->dTDC)*5)/12;
}
// Dem so sinh vien co diem tb>=8
void DemDTB_LonHon8(){
 p=a;
 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB>=8) dem++;
 cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}
// Dem so sinh vien co diem tb<5
void DemDTB_NhoHon5(){
 p=a;

 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB<5) dem++;
 cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}
// Tim sinh vien co diem cao nhat
void InSV_max(){
 p=a;

 float max=p->dTB;
 for(int i=0;i<n;i++)
  if (max<(p+i)->dTB) { max=(p+i)->dTB;}
 // in sinh vien max
 cout<<"\n * Ten sinh vien co diem cao nhat: ";
 for(i=0;i<n;i++)
  if(max==(p+i)->dTB) cout<<"\n +"<<(p+i)->ht;
}

// Xep loai cho sinh vien
void XepLoai(){
 p=a;
 for(int i=0;i<n;i++)
  {
if ((p+i)->dTB<5) strcpy((p+i)->xepLoai,"Truot");
else if ((p+i)->dTB<6) strcpy((p+i)->xepLoai,"Trung binh");
else if ((p+i)->dTB<7) strcpy((p+i)->xepLoai,"Trung binh kha");
else if ((p+i)->dTB<8) strcpy((p+i)->xepLoai,"Kha");
else if ((p+i)->dTB<9) strcpy((p+i)->xepLoai,"Gioi");
else if ((p+i)->dTB<=10) strcpy((p+i)->xepLoai,"Xuat sac");
  }
}
// In danh sach sinh vien
void InDS(){
 p=a;
 cout<<"\n * In danh sach sinh vien da xep loai:";
 for(int i=0;i<n;i++)
  cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->xepLoai;
}


// doi cho
void DoiCho(SV *a, SV *b){
 char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
 int tns;
 float tdtcc,tdta,tdtdc,tdtb;
 strcpy(tht,a->ht);
 strcpy(a->ht,b->ht);
 strcpy(b->ht,tht);

 strcpy(tdc,a->dc);
 strcpy(a->dc,b->dc);
 strcpy(b->dc,tdc);

 strcpy(tgioitinh,a->gioitinh);
 strcpy(a->gioitinh,b->gioitinh);
 strcpy(b->gioitinh,tgioitinh);

 strcpy(tlop,a->lop);
 strcpy(a->lop,b->lop);
 strcpy(b->lop,tlop);

 strcpy(dxl,a->xepLoai);
 strcpy(a->xepLoai,b->xepLoai);
 strcpy(b->xepLoai,dxl);

 tns=a->namSinh;
 a->namSinh=b->namSinh;
 b->namSinh=tns;

 tdtcc=a->dTCC;
 a->dTCC=b->dTCC;
 b->dTCC=tdtcc;

 tdta=a->dTA;
 a->dTA=b->dTA;
 b->dTA=tdta;

 tdtdc=a->dTDC;
 a->dTDC=b->dTDC;
 b->dTDC=tdtdc;

 tdtb=a->dTB;
 a->dTB=b->dTB;
 b->dTB=tdtb;
}

// sap xep danh sach sinh vien
void SapXep(){
 p=a;
 for(int i=0;i<n-1;i++)
  for(int j=i+1;j<n;j++)
{
 if ((p+i)->dTB>(p+j)->dTB)
{
DoiCho((p+i),(p+j));
}
}
cout<<"\n * Danh sach sinh vien da xep loai: ";
for(i=0;i<n;i++)
 cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->dTB;
}
// ham chinh

void main(){
 clrscr();
 Nhap();
 TinhDiem();
 DemDTB_LonHon8();
 DemDTB_NhoHon5();
 InSV_max();
 XepLoai();
 InDS();
 SapXep();
 getch();

}

/***********************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

[C\C++] Bài tập Lập trình căn bản với C\C++ [Chữa bài tập - 27/08/13]

Một số bài tập môn Lập trình căn bản với C\C++

Bài 1: Viết chương trình in ra màn hình tất cả số nguyên tố có 5 chữ số.

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>

// ham kiem tra so nguyen to
int TestNT(long a){
 for(long k=2;k<a;k++)
  if (a%k==0) return 0;
  return 1;
}
// Ham in ra cac so nguyen to co 5 chu so
void InSoNT(){
 cout<<"\ IN SO NGUYEN TO CO 5 CHU SO:\n";
 for(long i=10000;i<=99999;i++)
  if (TestNT(i)==1)
cout<<i<<"; ";

}

// Ham chinh
void main(){
 InSoNT();
 getch();
}

/***************************************************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

Bài 2: Viết các hàm thực hiện:
 - Nhập vào từ bàn phím ma trân vuông kích thước n (2<= n <=6)
 - In ma trận vừa nhập
 - Tính tổng từng dòng của ma trận
 - Tìm và in ra cột chứa giá trị lớn nhất
 - Đếm số nguyên tố trong ma trận

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>
// khai bao
int m[6][6], n;
// nhap ma tran
void NhapMT(){
  // nhap kich thuoc
  cout<<"\n Nhap kich thuoc cua ma tran:" ;
  do{
cout<<"\n n= "; cin>>n;
if(n<2||n>6)
cout<<"\n Nhap lai n!";
  }while(n<2||n>6);
  // nhap ma tran
  cout<<"\n Nhap ma tran:";
  for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
 {
cout<<"\n m["<<i<<"]["<<j<<"]= "; cin>>m[i][j];
 }
}

// In ma tran
void InMT(){
 cout<<"\n In ma tran vua nhap: \n";
 for(int i=0;i<n;i++)
 {
for(int j=0;j<n;j++)
 cout<<m[i][j]<<"\t";
cout<<"\n";
 }
}
// Tinh tong tung dong
void TongDong(){
 int dong[6];
  for(int i=0;i<n;i++){
dong[i]=0;
for(int j=0;j<n;j++)
dong[i]+=m[i][j];
  }
  cout<<"\n Tong dong cua ma tran: ";
  for(i=0;i<n;i++)
cout<<"\n Dong "<<i<<" : "<<dong[i];
}
// Tim cot chua gia tri lon nhat
void TimCotChuaMax(){
 // tim max
 int max=m[0][0], i,j;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
if(max<m[i][j]) max=m[i][j];
 // in cot chua max
 cout<<"\n Nhung cot chua gia tri lon nhat: ";
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
if(max==m[i][j]) cout<<j<<"; ";
}

 // Ham kiem tra so nguyen to
 int TestNT(int a){
  for (int i=2;i<a;i++)
if(a%i==0) return 0;
return 1;
 }

 // Dem so nguyen to trong ma tran
 void DemSNT(){
  int dem=0;
  for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(TestNT(m[i][j])==1) dem++;
cout<<"\n So lan xuat hien cua so nguyen to trong ma tran: "<<dem;
 }
// Ham chinh
void main(){
 NhapMT();
 InMT();
 TongDong();
 TimCotChuaMax();
 DemSNT();
 getch();
}

/***************************************************************/
[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

Bài 3: Viết các hàm thực hiện:
 - Nhập vào tọa độ 3 điểm A,B,C trong không gian
 - Tính độ dài đoạn thẳng AB, BC, AC
 - Kiểm tra xem A,B,C có phải là tam giác không, nếu là tam giác thì tính chu vi, diện tích tam giác đó.

[Code Tubor C++]
/***************************************
  http://lap-trinh-may-tinh.blogspot.com
****************************************/
#include<iostream.h>
#include<conio.h>
#include<math.h>

// khai bao
struct ToaDo{
  float x,y,z;
};
// Khai 3 diem A,B,C
ToaDo A,B,C;

// Nhap toa do
void NhapToaDo(){
  cout<<"\n Nhap toa do 3 diem:\n";
  cout<<"  - Nhap toa do diem A: ";
  cout<<"\n XA= "; cin>>A.x;
  cout<<"\n YA= "; cin>>A.y;
  cout<<"\n ZA= "; cin>>A.z;

  cout<<"  - Nhap toa do diem B: ";
  cout<<"\n XB= "; cin>>B.x;
  cout<<"\n YB= "; cin>>B.y;
  cout<<"\n ZB= "; cin>>B.z;

  cout<<"  - Nhap toa do diem C: ";
  cout<<"\n XC= "; cin>>C.x;
  cout<<"\n YC= "; cin>>C.y;
  cout<<"\n ZC= "; cin>>C.z;

}
// Tinhd do dai doan thang
float d(ToaDo P, ToaDo Q){
  return (float)sqrt((P.x-Q.x)*(P.x-Q.x)+(P.y-Q.y)*(P.y-Q.y)+(P.z-Q.z)*(P.z-Q.z));
}
// Kiem tra tam giac
int TestTG(){
 float a=d(B,C), b=d(A,C), c=d(A,B);
 if(a+b==c||a+c==b||b+c==a) return 0;
 return 1;
}
// Tinh chu vi dien tich
void ChuVi_DienTich(){
 cout<<"\n ------------------------ ";
 if(TestTG()==0)
  cout<<"\n 3 diem A,B,C thang hang!";
 else{
  float a=d(B,C), b=d(A,C), c=d(A,B);
  float cv=a+b+c;
  float p=cv/2;
  float s=(float)sqrt(p*(p-a)*(p-b)*(p-c));
  cout<<"\n - Chu vi tam giac: "<<cv<<"\n - Dien tich tam giac: "<<s;
 }
}
// Ham chinh
void main(){
 NhapToaDo();
 cout<<"\n Do dai doan thang AB: "<<d(A,B);
 cout<<"\n Do dai doan thang BC: "<<d(B,C);
 cout<<"\n Do dai doan thang AC: "<<d(A,C);
 ChuVi_DienTich();
 getch();
}

/***************************************************************/

[Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

TxT

[C\C++] Ví dụ sử dụng cấu trúc trong lập trình C\C++ [struct SV]

Ví dụ: Viết các hàm thực hiện
 - Nhập thông tin SV gồm: họ tên, địa chỉ, tuổi, điểm toán, lý, hóa
 - Tính điểm tổng kết
 - In thông tin sinh viên
  Ví dụ nhập thông tin cho 1 sinh viên

[Code Turbo C++]

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

// Dinh nghia cau truc SV
struct SV{
 char ht[30],dc[50];
 int tuoi;
 float dT,dL, dH;
};

// Khai bao bien cau truc
SV a;

// Ham nhap thong tin
void NhapTT(){
  fflush(stdin); // xu ly bo dem cho viec nhap mot xau
  cout<<"\n NHAP THONG TIN CHO SINH VIEN ";
  cout<<"\n - Ho ten: "; gets(a.ht);
  cout<<"\n - Dia chi: "; gets(a.dc);
  cout<<"\n - Tuoi: "; cin>>a.tuoi;
  cout<<"\n - Diem toan: "; cin>>a.dT;
  cout<<"\n - Diem ly: "; cin>>a.dL;
  cout<<"\n - Diem hoa: "; cin>>a.dH;
 }

// Ham Tinh diem
float TinhDiem(){
 return (a.dT+a.dL+a.dH)/3;
}

// Ham In thong tin
void InTT(){
 // tim xep loai
 char xepLoai[10];
 float dtk=TinhDiem();
 if (dtk<5) strcpy(xepLoai,"Truot");
  else if (dtk<6) strcpy(xepLoai,"TB");
   else if (dtk<7) strcpy(xepLoai,"TBK");
    else if (dtk<8) strcpy(xepLoai,"Kha");
      else if (dtk<9) strcpy(xepLoai,"Gioi");
       else if (dtk<=10) strcpy(xepLoai,"XS");
         else strcpy(xepLoai,"");
 cout<<"\n IN THONG TIN SINH VIEN ";
 cout<<"\n - Ho ten: "<<a.ht;
 cout<<"\n - Dia chi: "<<a.dc;
 cout<<"\n - Tuoi: "<<a.tuoi;
 cout<<"\n - Diem tong ket: "<<dtk;
 cout<<"\n - Xep loai: "<<xepLoai;
}

// Ham main
void main(){
  NhapTT();
  InTT(); // ham InTT() da goi den ham TinhDiem
  getch();
}

>> [Tải code chương trình tại đây - Lưu ý: Sau 5s, Click Bỏ qua quảng cáo (Skin Ad)]

[ C++ ] Kế thừa trong C++ [Lập trình hướng đối tượng với C++]

Kế thừa trong C++ (Inheritance)


Kế thừa là một đặc trưng quan trọng trong lập trình hướng đối tượng (OOP). Sự kế thừa trong các ngôn ngữ lập trình như C++, Java, C#, VB.Net,.. cơ bản là giống nhau.

Trong lập trình C++, có thêm khái niệm đa kế thừa mà các ngôn ngữ khác đã bỏ chức năng này do sự nhập nhằng khi sử dụng.

Khái niệm: Kế thừa là cách tạo lớp mới từ các lớp đã được định nghĩa từ trước [Wiki]


Trong đó:
    - Class A: lớp cơ sở (lớp cha) - supper class
    - Class B: lớp dẫn xuất (lớp con) - sub class

Class B có thể dùng được hầu hết các phương thức (hàm thành viên) và các thuộc tính (biến thành viên) của lớp A ngoại trừ các các phương thức và các hàm các tính chất private.

Cài đặt: để cài đặt lớp kế thừa ta dùng toán tử ":".  Ví dụ B kế thừa A viết là:  B:A
   [Code]
     class A{
        ....
      };

     class B:A{
         ...
     };

Lưu ý:
   - Một lớp cha có thể có nhiều lớp con (có phép kế thừa)
   - Đến lượt mình mỗi lớp con lại có thể có các con khác
   - Trong C++ cho phép đa kế thừa (một lớp con có thể nhận hơn 1 lớp cha)

Xet ví dụ: Xây dựng lớp cha (Nguoi), lớp con (HocSinh)

 [Code Tubor C++]
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>

// lop cha
class Nguoi
{
protected:
char hoTen[30];
int namSinh;
private:
char soThich[50]; // so thich
public:
Nguoi(){ // khoi tao lop Nguoi
 strcpy(hoTen,"Nguyen Van A");
 namSinh=1990;
 strcpy(soThich,"Lap trinh");
}
 void InTT(); // In thông tin
};
// lop con
class HocSinh : public Nguoi
{
protected:
 int maHS;
public:
 void Nhap();
 void InTT();
};
// InTT cua cha (Nguoi)
void Nguoi::InTT()
{
cout << "\n Nam sinh : " << namSinh;
cout << "\n Ho ten : " << hoTen;
cout << "\n So thich : " << soThich;
}
// InTT cua con (HocSinh)
void HocSinh::InTT()
{
cout << "\n Ma hoc sinh : " << maHS;
cout << "\n Nam sinh : " << namSinh;
cout << "\n Ho ten : " << hoTen;
}
//  Nhap thong tin
void HocSinh::Nhap()
{
cout << "\n Nam sinh : "; cin>> namSinh;
cout << "\n Ho ten : "; gets(hoTen);
cout << "\n Ma hoc sinh: "; cin>> maHS;
}

// ham main ---------------------------------------------
void main(){

    // khai bao doi tuong Nguoi
    Nguoi a;  a.InTT();
   // khai bao doi tuong HocSinh
        HocSinh t;   t.Nhap();  t.InTT();

   getch();
}

//Giải thích: Do lớp HocSinh kế thừa lớp cha Nguoi => lớp HocSinh chứa các thuộc tính: hoTen, namSinh, maHS; các phương thức: InTT(); Nhap(); lớp HocSinh không thể kế thừa được thuộc tính soThich do tích chất của nó là private.