Hiển thị các bài đăng có nhãn Kỹ thuật lập trình. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Kỹ thuật lập trình. Hiển thị tất cả bài đăng

Thứ Hai, 12 tháng 5, 2014

Code C++: Đệ quy phi tuyến

Đệ quy phi tuyến: Thân hàm đệ quy lặp gọi 1 số lần chính nó.

long U (int n){ 
    if (n<6) return n;
    long S= 0;
    for (int i = 5; i>0; i--) 
          S+= U(n-i);
    return S;
}

Bài toán 1: Tính tổng n phần tử trong danh sách

Viết chương trình tính tổng n phần tử a0,...,an-1 được định nghĩa đệ quy như sau:


#include<conio.h>
#include<iostream>
using namespace std;
long int S(int a[], int n) {
if(n==1)
return a[0];
else
return a[n-1]+S(a,n-1);
}

int main(){
int *a,n;
cout<<"n = ";
cin>>n;
a = new int[n];
cout<<"Nhap vao "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
cout<<"a["<<i<<"] = ";
cin>>a[i];
}
cout<<"Tong "<<n<<" phan tu trong mang A la "<<S(a,n);
getch();
return 0;
}

Bài toán 2: Tính tích n phần tử trong danh sách
Viết chương trình tính tổng n phần tử a0,...,an-1 được định nghĩa đệ quy như sau:

#include<conio.h>
#include<iostream>
using namespace std;
long int S(int a[], int n) {
if(n==1)
return a[0];
else
return a[n-1]*S(a,n-1);
}

int main(){
int *a,n;
cout<<"n = ";
cin>>n;
a = new int[n];
cout<<"Nhap vao "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
cout<<"a["<<i<<"] = ";
cin>>a[i];
}
cout<<"Tich "<<n<<" phan tu trong mang A la "<<S(a,n);
getch();
return 0;
}

Bài toán 3: Đếm số lần xuất hiện của phần tử x trong danh sách
Viết  chương  trình  đếm  số  lần  xuất  hiện  của  số  nguyên  x  trong  danh  sách A={a0,...,an-1} với n phần tử. Thuật toán đệ quy được thể hiện như sau:

#include<conio.h>
#include<iostream>
using namespace std;
/*Ham tra ve so lan xuat hien cua x trong danh sachA*/
int Find(int a[], int n, int x) {
if(n==0)
return 0;
else if(a[n-1]==x)
return 1+Find(a,n-1,x);
else
return Find(a,n-1,x);
}

int main(){
int *a,n,x;
cout<<"n = ";
cin>>n;
a = new int[n];
cout<<"Nhap vao danh sach "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
cout<<"a["<<i<<"] = ";
cin>>a[i];
}
cout<<"x = ";
cin>>x;
cout<<"So lan xuat hien cua "<<x<<" trong danh sach la "<<Find(a,n,x);
getch();
return 0;
}


Thứ Sáu, 9 tháng 5, 2014

Code C++: Đệ quy Hỗ tương

Đệ quy hỗ tương: Với dạng đệ quy hỗ tương, việc gọi hàm không đơn thuần là tự gọi nó mà còn có gọi đến hàm khác, và hàm kia có khả năng gọi lại hàm ban đầu. Cứ như vậy tạo vòng lặp xen kẽ nhau, và tất nhiên dù là lặp dạng nào thì cũng cần có điểm dừng. Ở đây cần tạo điểm dừng trên cả 2 hàm, nếu 1 trong 2 hàm không có điểm dừng thì đệ quy sẽ vô tận.


Bài toán 1Viết chương trình tính Un và Gn được xác định như sau:

Mã nguồn:long G(int n); 

long U ( int n){ 
      if (n<5) return n;
      return U(n-1) + G(n-2);
}

long G(int n){ 
      if (n<8) return n-3;
      return U(n-1) + G(n-2);
}
Bài toán 2: Viết chương trình tính Xn và Yn được xác định như sau:


#include<conio.h>
#include<iostream>
using namespace std;
long int X(int n);
long int Y(int n);

long int X(int n){
if(n==0)
return 1;
else
return X(n-1)+Y(n-1);
}
long int Y(int n){
if(n==0)
return 1;
else
return 2*X(n-1)*Y(n-1);
}
int main(){
int n;
cout<<"n = ";
cin>>n;
cout<<"X("<<n<<") = "<<X(n);
cout<<"\nY("<<n<<") = "<<Y(n);
getch();
}



Code C++: Đệ quy Nhị phân


Đệ quy nhị phân: Thân hàm gọi 2 lần chính nó.
Ví dụ: Chuỗi số Fibonacci: 1 1 2 3 5 8 13 ... 

long Fibonacci(int n){
      if (n<=2) return 1;
      return Fibonacci(n-2) + Fibonacci(n-1);
}

Bài toán 1: Tìm phần tử Fibonacci thứ n
Viết chương trình tìm phần tử Fibonacci thứ n được định nghĩa đệ quy như sau:




#include<math.h>
#include<iostream>
#include<conio.h>
using namespace std;
int Fibonacci(int N){
if(N==0 || N==1)
return 1;
else
return Fibonacci(N-2) + Fibonacci(N-1);
}

int main(){
int n;
cout<<"Nhap vao gia tri cua n = ";
cin>>n;
cout<<"Fibonacci("<<n<<") = "<<Fibonacci(n);
getch();
return 0;
}



Thứ Ba, 6 tháng 5, 2014

Code C++: Đệ quy Tuyến tính

Đệ quy tuyến tính: Thân hàm gọi 1 lần chính nó


Ví dụ:

double U(int n, double a, double r){
      if (n==1) return a;
      return r + U(n-1,a,r);    //Gọi 1 lần chính tên hàm đang định nghĩa
}

Bài toán 1: Tính X lũy thừa n

Viết chương trình tính X^n với X là số thực được xác định như sau:



#include<conio.h>
#include<iostream>
using namespace std;
/* Hàm đệ quy trả về số thực tính giá trị X^n*/
float Mu(float X, int n){
if(n==0)
return 1;
else
return X*Mu(X,n-1);  // Gọi đệ quy hàm Mu
}
/* Chương trình chính */
int main(){
int n;
float X;
cout<<"Nhap vao gia tri cua n = ";
cin>>n;
cout<<"Nhap vao gia tri cua X = ";
cin>>X;
cout<<X<<"^"<<n<<" = "<<Mu(X,n);
getch();
return 0;
}

Bài toán 2: Thuật toán Euclide tìm ước chung lớn nhất

Viết chương trình tìm ước chung lớn nhất của 2 số nguyên dương a, b bằng thuật toán Euclide được định nghĩa đệ quy như sau:


#include<conio.h>
#include<iostream>
using namespace std;
/* Hàm đệ quy trả về ước chung lớn nhất của 2 số a,b */
int UCLN(int a, int b) {
if(a==b)
return a;
else if(a>b)
return UCLN(a-b,b);  //Gọi hàm đệ quy UCLN
else
return UCLN(a,b-a);  //Gọi hàm đệ quy UCLN
}
/* Chương trình chính */
int main(){
int a,b;
cout<<"Nhap a = ";
cin>>a;
cout<<"Nhap b = ";
cin>>b;
cout<<"Uoc chung lon nhat cua "<<a<<" va "<<b<<" la "<<UCLN(a,b);
getch();
return 0;
}

Bài toán 3: Tính n giai thừa
Viết chương trình tính n! được định nghĩa đệ quy như sau:
#include<conio.h>
#include<iostream>
using namespace std;
/* Hàm đệ quy trả về giai thừa của n */
int GiaiThua(int n){
if(n==0)
return 1;
else
return n*GiaiThua(n-1);
}
/* Chương trình chính */
int main(){
int n;
cout<<"Nhap n = "; cin>>n;
cout<<n<<"!= "<<GiaiThua(n);
getch();
return 0;
}


Thứ Hai, 5 tháng 5, 2014

Code C++: Chương trình Đệ quy tìm phần tử Fibonacci thứ N

Chương trình tìm phần tử Fibonacci thứ n được định nghĩa đệ quy như sau:

[TẢI MÃ NGUỒN]
#include<math.h>
#include<iostream>
#include<conio.h>
using namespace std;
/* Ham tra ve so nguyen tinh gia tri Fibonacci thu n */
int F(int n){
if(n==0 || n==1)
return 1;
else
return F(n-1) + F(n-2);
}
/* Chuong trinh chinh */
int main(){
int n;
cout<<"Nhap vao gia tri cua n = ";
cin>>n;
cout<<"F("<<n<<") = "<<F(n);
getch();
return 0;
}
[TẢI MÃ NGUỒN]


Code C++: Hàm tính tổng các phần tử trên cùng 1 dòng, 1 cột của Ma trận

1. Hàm tính tổng các phần tử trên cùng một dòng của ma trận.
void tongdong(int a[][100],int n,int m){
          for(int i=0;i<n;++i){
                   int S=0;
                   for(int j=0;j<m;++j)
                             S+=a[i][j];
                   cout<<"dong "<<i<<" la: "<<S<<endl;
          }
}


2. Hàm tính tổng các phần tử trên cùng một cột của ma trận
void tongcot(int a[][100],int n,int m){
  for(int i=0;i<m;i++){
                    int s=0;
                   for(int j=0;j<n;j++)
                              s=s+a[j][i];
                   cout<<"cot "<<i<<" la: "<<s<<endl;
           }

}


Thứ Năm, 1 tháng 5, 2014

Code C++: Các câu lệnh duyệt mảng 2 chiều thường gặp


Các câu lệnh duyệt mảng 2 chiều thường gặp:
*Ghi chú: n là số dòng, m là số cột
-Nhập mảng
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
                   cout<<"nhap vao phan tu thu "<<i<<j<<": ";
cin>>a[i][j];
                   }
-Xuất mảng
for(int i=0;i<n;i++)
{       
for(intj=0;j<m;j++)
cout<<a[i][j]<<" ";
                   cout<<endl;
          }
*Một số câu lệnh chỉ có trong ma trận vuông: (số dòng bằng số cột n=m):
-Xuất các phần tử nằm trên đường chéo chính
          for(int i=0;i<n;i++)
cout<<a[i][i];

-Xuất các phần tử nằm phía trên đường chéo chính(còn gọi là tam giác trên)
for(inti=0;i<n;i++)                                    for(inti=0;i<n;i++)
     for(int j=0;j<i;j++)            OR                       for(intj=i+1;j<n;j++)
cout<<a[j][i]<<" ";                                    cout<<a[i][j]<<" ";                         
  
-Xuất các phần tử nằm phía dưới đường chéo chính (còn gọi là tam giác dưới)
for(inti=0;i<n;i++)
      for(int j=0;j<i;j++)
          cout<<a[i][j]<<" ";

-Xuất các phần tử nằm trên đường chéo phụ
for(int i=0;i<n;i++)
cout<<a[i][n-1-i)<<” “;

-Xuất các phần tử nằm phía trên đường chéo phụ
for(int i=0;i<n;i++)                                    for(inti=0;i<n;i++)
    for(intj=0;j<n-1-i;j++)                OR          for(intj=n-i;j<n;j++)       
        cout<<a[i][j]<<" ";                                         cout<<a[n-1-j][n-1-i]<<" ";      
                                     
-Xuất các phần tử nằm phía dưới đường chéo phụ
for(inti=0;i<n;i++)
              for(intj=n-i;j<n;j++)
                    cout<<a[i][j]<<" ";




Code C++: Thêm x phần tử ở vị trí thứ k vào mảng một chiều

void them(int a[],int k, int x,int n){
       for(int i = n ; i > k ;i --){
            a[i] = a[i-1];
       }
       n ++;
       a[k] = x;
}


Thứ Năm, 3 tháng 4, 2014

Code C++: Hàm xóa phần tử trùng nhau trong mảng 1 chiều


[TẢI MÃ NGUỒN]
Hàm xóa phần tử trùng nhau trong mảng 1 chiều

void xoa(int a[],int n){
    for(int i = 0;i<n-1;i++){
        for(int j = i + 1 ;j< n;j++){
            if(a[i]==a[j]){
                int index = j;
                for(int k = index +1;k<n;k++)
                {
                    a[k-1] = a[k];
                }
                n--;
            }
        }       
    }
}
[TẢI MÃ NGUỒN]


Code C++: Viết hàm đếm tần suất xuất hiện của các giá trị xuất hiện trong mảng


[TẢI MÃ NGUỒN]
Viết hàm đếm tần suất xuất hiện của các giá trị xuất hiện trong mảng

void lietke(int a[],int n){
    int dem = 0;
    for(int i = 0 ; i < n ; i++){
        dem = 0;
        for(int j  = 0 ; j < n ; j++){    
            if(a[i] == a[j]){
                 if(i <= j){
                   dem ++ ;
                 }
                 else{
                     break;   
                 }
            }
        }
        if(dem != 0){
             printf("%d : %d ",a[i],dem);
        }
    }
}
[TẢI MÃ NGUỒN]


Thứ Sáu, 28 tháng 2, 2014

Code C++: Viết hàm đếm số lượng các giá trị phân biệt có trong mảng



Viết hàm đếm số lượng các giá trị phân biệt có trong mảng

int demchusokhacnhau(int a[],int n){

       int dem = 1;

       bool flag = false;

       for(int i = 0;i<n;i++){

              for( int j = i + 1;j < n ;j++){

                    flag = false;

                    if(a[i]==a[j]){

                          flag = true;

                          break;

                   }
             if(!flag && j==n-1){

                     dem ++;

             }

          }

         break;

      }

     return dem ;

}



Code C++: Cho mảng một chiều các số nguyên. Viết hàm tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng.


Cho mảng một chiều các số nguyên. Viết hàm tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng.

int timsochanlonnhat(int a[],int n){

int minle = 2147483647; // số nguyên lẻ lớn nhất

int maxchan = -2147483648; // số nguyên chẵn nhỏ nhất

for(int i = 0;i < n; i++){

           if(a[i]%2==0) {

                  if(maxchan < a[i] && minle > a[i] ){

                  maxchan = a[i];

           }

}else{

          if(minle > a[i]){

          minle = a[i];

 }
}
}
return maxchan;
}



Code C++: Cho mảng một chiều các số nguyên. Viết hàm tìm chữ số xuất hiện nhiều nhất trong mảng.



Cho mảng một chiều các số nguyên. Viết hàm tìm chữ số xuất hiện nhiều nhất trong mảng.
int timchuso(int a[],int n){

int temp[100];

int max = 0;

int number = a[0];

// Khởi tạo giá trị 0 cho mảng

for(int j = 0;j<100;j++){

temp[j]=0;

}

//Tìm chữ số xuất hiện

for(int i = 0 ; i < n ; i++){

temp[a[i]]=temp[a[i]] + 1;

if(max < temp[a[i]]){

max = temp[a[i]];

number = a[i];

}

}

printf("%d\n",max);

return number;

}


Thứ Tư, 19 tháng 2, 2014

Code C-C++: Tìm ma trận chuyển vị trong C++


[CLICK Tải mã nguồn]
#include<iostream>
#include<iomanip>
using namespace std;
int M[50][50];
void NhapMaTran(int A[50][50], int n, int m){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cout<<"\n A["<<i<<","<<j<<"]= ";
cin>>A[i][j];
}
}
void InMaTran(int B[50][50], int n,int m){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<setw(3)<<B[i][j]; 
cout<<"\n";

}
}
void ChuyenVi(int F[50][50], int n,int m){
for(int j=0;j<m;j++){
for(int i=0;i<n;i++)
cout<<setw(3)<<F[i][j]; 
cout<<"\n";
}
}
main(){
int r,c;
cout<<"\n So dong = "; cin>>r;
cout<<"\n So cot = "; cin>>c;
NhapMaTran(M,r,c);
cout<<"\n Ma tran vua nhap: \n";
InMaTran(M,r,c);
cout<<"Ma tran chuyen vi: \n";
ChuyenVi(M,r,c);
}
[CLICK Tải mã nguồn]


Code C-C++: Phép toán cộng, nhân hai ma trận

[CLICK Tải mã nguồn]
#include<conio.h>
#include<iostream.h>
#define max 100
/*Nhap ma tran*/
void NhapMaTran(float A[max][max], int m, int n){
   for(int i = 0; i<m; i++)
   for(int j = 0; j<n; j++) {
      cout<<"a["<<i<<"]["<<j<<"] = ";
      cin>>A[i][j];
   }
}

/*Xuat ma tran*/
void XuatMaTran(float A[max][max], int m, int n) {
   for(int i=0 ; i<m; i++){
      cout<<endl;
      for(int j=0 ; j<n; j++)
         cout<<A[i][j]<<"\t";
   }
}
/*C = A+B*/
void CongMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n) {
   for(int i = 0; i<m; i++)
   for(int j = 0; j<n; j++)
      C[i][j] = A[i][j]+B[i][j];

}
/*A cap mxn * B cap nxp = C cap mXp*/
void NhanMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n, int p){
   for(int i = 0; i<m; i++)
      for(int k = 0; k<p; k++) {
         C[i][k]=0;
         for(int j = 0; j<n; j++)
            C[i][k] = C[i][k]+A[i][j]*B[j][k];
      }
}
/*Chuong trinh chinh*/
void main(){
   int m=3,n=2,p=3;
   float A[max][max],B[max][max],C[max][max],D[max][max];
   clrscr();
   cout<<"Nhap ma tran A cap "<<m<<"x"<<n<<endl;
   NhapMaTran(A,m,n);
   cout<<"Nhap ma tran B cap "<<m<<"x"<<n<<endl;
   NhapMaTran(B,m,n);
   cout<<"Nhap ma tran C cap "<<n<<"x"<<p<<endl;
   NhapMaTran(C,n,p);
   cout<<"Ma tran A\n";
   XuatMaTran(A,m,n);
   cout<<"\nMa tran B\n";
   XuatMaTran(B,m,n);
   cout<<"\nMa tran C\n";
   XuatMaTran(C,n,p);
   cout<<"\nMa tran D = A+B\n";
   CongMaTran(A,B,D,m,n);
   XuatMaTran(D,m,n);
   cout<<"\nMa tran D = A.C\n";
   NhanMaTran(A,C,D,m,n,p);
   XuatMaTran(D,n,p);
   getch();
}
[CLICK Tải mã nguồn]


Thứ Bảy, 14 tháng 12, 2013

Hướng dẫn cài đặt Code::Blocks và MINGW bằng hình ảnh (Dùng để lập trình C/C++)

Hướng dẫn cài đặt và viết code với Code::BlocksMINGW (Dùng để lập trình C/C++)

Bước 1: Tải bộ cài đặt Code::Blocks  (95MB)
CLICK ĐỂ DOWNLOAD, chờ 5s nhấn SKIP ADS để tải bộ cài đặt Code::Blocks cho Windows XP/7/8.

Bước 2: Cài đặt Code::Blocks
- Click đúp vào file vừa tải về để bắt đầu quá trình cài đặt
- Click next liên tiếp, màn hình thông báo cài đặt mặc định vào C:\Program Files\CodeBlocks
- Chọn cài FULL để có đầy đủ các tính năng
- Mở chương trình lên sau khi cài đặt xong.
 Bước 3: Khởi động Code::Blocks
- Có 1 cửa sổ hiển thị lên yêu cầu bạn chọn Trình biên dịch mặc định của Code::Blocks

- Để tạo 1 project mới bạn làm như sau: Vào menu File -> New -> Project..

- Chọn Console Application và nhấn nút Go để bắt đầu.
- Chọn next liên tiếp tới khi bạn gặp cửa sổ yêu cầu chọn ngôn ngữ C/C++

- Sau khi nhấn Next, Code::Blocks sẽ yêu cầu bạn điền các thông tin của Project.
- Click Next lần nữa để lựa chọn trình biên dịch cho Project vừa tạo.

- Bạn có thể không cần làm gì ở bước này. Mặc định, Code::Blocks sẽ chọn trình biên dịch mặc định mà bạn đã thiết lập lúc cài đặt ban đầu.
- Mở file main.cpp ở cửa sổ bên trái để vào giao diện viết code cho chương trình.

- Ở cửa sổ bên phải, bạn có thể viết 1 ví dụ đơn giản in ra màn hình câu: "Hello world !", Sau đó nhấn F9 để chạy và xem kết quả.