Hàm chứa tham số là mảng 1 chiều và mảng 2 chiều (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,488
Giới tính
Nam
Nghề nghiệp
Giáo Viên
hiện tai tôi muốn chuyển thử các bài tập từ C++ qua VBA mà tôi bị vướng cách thức truyền tham số là mảng trong VBA, mong các cao thủ cho ví dụ về cách truyền xin chân thành cảm ơn
ví dụ ở trong C ++ là
void nhap( int &n, int mang1 chiều) thì VB là sao?
void nhap(int &n, int & m, int mang2 chiều) thì VB là sao?
còn khi gọi trong C++ là
nhap(n,mang1 chiều) thì VB?
nhap(n,m, mang2 chiều) thì VB?
mong sớm được giúp xin cảm ơn
 
hiện tai tôi muốn chuyển thử các bài tập từ C++ qua VBA mà tôi bị vướng cách thức truyền tham số là mảng trong VBA, mong các cao thủ cho ví dụ về cách truyền xin chân thành cảm ơn
ví dụ ở trong C ++ là
void nhap( int &n, int mang1 chiều) thì VB là sao?
void nhap(int &n, int & m, int mang2 chiều) thì VB là sao?
còn khi gọi trong C++ là
nhap(n,mang1 chiều) thì VB?
nhap(n,m, mang2 chiều) thì VB?
mong sớm được giúp xin cảm ơn
Tốt nhất bạn đưa luôn 1 bài toán cụ thể nào đó (mà bạn đã giải quyết được bằng C). Vì không chắc các thành viên ai cũng biết C đâu
 
Tốt nhất bạn đưa luôn 1 bài toán cụ thể nào đó (mà bạn đã giải quyết được bằng C). Vì không chắc các thành viên ai cũng biết C đâu
đây là Thuật toán đếm Hậu em đã viết bằng ngôn ngữ C++ bây giờ em muốn chuyển sang VBA, em chỉ bị vướng cách truyền tham số mảng trong VBA thôi

PHP:
#include<iostream>
using namespace std;
void nhapmang(int A[][100],int &m,int &n);
void xuatmang(int A[][100],int m,int n);
int kthoanghau(int A[][100],int m,int n,int dong,int cot);
int dempthoanghau(int A[][100],int m,int n);

int main()
{
    int A[100][100];
    int m,n;
    nhapmang(A,m,n);
    xuatmang(A,m,n);
    cout<<" \n so phan tu hoang hau co the co la "<<dempthoanghau(A,m,n)<<endl;
return 0;
}

void nhapmang(int A[][100],int &m,int &n)
{
    cout<<" nhap so  dong ";cin>>m;
    cout<<" nhap so  cot ";cin>>n;
    for(int i=0;i<m;i++)
        for (int j=0;j<n;j++)
        {
            cout<<"A["<<i<<"]["<<j<<"]:=";cin>>A[i][j];
        }
}

void xuatmang(int A[][100],int m,int n)
{
    for(int i=0;i<m;i++)
    {    
        for (int j=0;j<n;j++)
            cout<<A[i][j]<<"    ";
        cout<<endl;
    }
}

int kthoanghau(int A[][100],int m,int n,int dong,int cot)
{
    int flag =1;
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            if(((i==dong)||(j==cot)||(i+j==dong+cot)||(i-j==dong-cot))&&(A[i][j]>A[dong][cot]))
                flag=0;
    return flag;
}

int dempthoanghau(int A[][100],int m,int n)
{
    int dem=0;
    for(int i=0;i<m;i++)
        for (int j=0;j<n;j++)
            if(kthoanghau(A,m,n,i,j)==1)
                    dem++;
    return dem;
}
 
Lần chỉnh sửa cuối:
Ý tôi muốn là bạn hãy mô tả bài toán của mình (bằng lời) chứ không phải là đưa code C++ lên đây
em muốn đếm xem có bao nhiêu phân tử hậu trên ma trận(vuông thôi)
thuật toán của em
Phần 1 tìm phần tử lớn nhất trên 1 dòng và cột và trên đường chéo
phần 2 là đếm xem có bao nhiêu phần tử như vây

đây là thuật toán của 2 phần em nói trên mà em viết bằng C++

PHP:
phần 1
int kthoanghau(int A[][100],int m,int n,int dong,int cot)
{
    int flag =1;
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            if(((i==dong)||(j==cot)||(i+j==dong+cot)||(i-j==dong-cot))&&(A[i][j]>A[dong][cot]))
                flag=0;
    return flag;
}


phần 2 đếm hậu
int dempthoanghau(int A[][100],int m,int n)
{
    int dem=0;
    for(int i=0;i<m;i++)
        for (int j=0;j<n;j++)
            if(kthoanghau(A,m,n,i,j)==1)
                    dem++;
    return dem;
}
 
Anh có thể viết cho em hàm nhập và xuất mảng 2 chiều trong VBA (có truyền tham số là mảng) cũng được, cảm ơn anh nhiều
 
hiện tai tôi muốn chuyển thử các bài tập từ C++ qua VBA mà tôi bị vướng cách thức truyền tham số là mảng trong VBA, mong các cao thủ cho ví dụ về cách truyền xin chân thành cảm ơn
ví dụ ở trong C ++ là
void nhap( int &n, int mang1 chiều) thì VB là sao?
void nhap(int &n, int & m, int mang2 chiều) thì VB là sao?
còn khi gọi trong C++ là
nhap(n,mang1 chiều) thì VB?
nhap(n,m, mang2 chiều) thì VB?
mong sớm được giúp xin cảm ơn

Lập trình VBA (VB) dễ hơn C, C++ rất nhiều. Tôi gửi bạn ví dụ về mảng để bạn có được kết nối giữ 2 ngôn ngữ.

Mã:
Sub [B]TestArr1[/B]()
    Dim ArrNum(1 To 4) As Integer
    ArrNum(1) = 1
    ArrNum(2) = 2
    ArrNum(3) = 3
    ArrNum(4) = 4
    GetArr ArrNum
End Sub

Sub GetArr1(Arr() As Integer)
    Dim i&
    For i = LBound(Arr) To UBound(Arr)
        MsgBox Arr(i)
    Next i
End Sub

Sub [B]TestArr2[/B]()
    Dim ArrList(1 To 4, 1 To 2) As Variant
    ArrList(1, 1) = "HH001": ArrList(1, 2) = 100
    ArrList(2, 1) = "HH002": ArrList(2, 2) = 200
    ArrList(3, 1) = "HH003": ArrList(3, 2) = 300
    ArrList(4, 1) = "HH004": ArrList(4, 2) = 400
    GetArr2 ArrList
    
    MsgBox "Fill Array to Range(""A1"")"
    FillToRange ArrList
End Sub

Sub GetArr2(Arr2() As Variant)
    Dim i&, j&
    For i = LBound(Arr2, 1) To UBound(Arr2, 1)
        For j = LBound(Arr2, 2) To UBound(Arr2, 2)
            MsgBox Arr2(i, j)
        Next j
    Next i
End Sub

Sub FillToRange(Arr2() As Variant)
    Range("A1").Resize(UBound(Arr2, 1) - LBound(Arr2, 1) + 1, UBound(Arr2, 2) - LBound(Arr2, 2) + 1).Value = Arr2
End Sub

LBound: cho ta biết chỉ mục thấp nhất của mảng
UBound: cho ta biết chỉ mục cao nhất của mảng

vis dụ:
UBound(Arr, 1) cho ta biết chỉ mục cao của mảng theo ROW
UBound(Arr, 2) cho ta biết chỉ mục cao của mảng theo COLUMN


Mảng chúng ta có thể cho nó nằm trong biến kiểu Variant. Bạn học C/C++ thì chắc biết cấu trúc của biến VARIANT.
Trong C/C++ khai báo giá trị cho biến VARIANT thì

Value.vt = BSTR;
Value.bstr = L"www.giaiphapexcel.com";

Trong VBA thì chỉ cần
Value.bstr = "www.giaiphapexcel.com"

Trong C/C++, có quản lý kiểu con trỏ (Pointer) còn trong VBA thì không. Tham số của các hàm trong C/C++ kiểu con trỏ thì trong VBA thì khai báo ByRef

Còn vài thứ cần phân biệt khác nữa, nếu cần bạn có thể mở topic khác để so sánh ngôn ngữ C++ và VB tôi sẽ giúp.
 
Lần chỉnh sửa cuối:
Cảm ơn thầy Nguyễn Duy Tân và Anh ndu, em đã hiểu vấn đề và đã làm được bài rồi, xin chân thành cảm ơn
 
Web KT

Bài viết mới nhất

Back
Top Bottom