Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zwrócenie tablicy dwuwymiarowej.

Ostatnio zmodyfikowano 2013-06-30 13:51
Autor Wiadomość
Lee5.56
Temat założony przez niniejszego użytkownika
Zwrócenie tablicy dwuwymiarowej.
» 2013-06-26 19:20:29
Witam. Wiem że pisałem już o to ale nie otrzymałem odpowiedzi a muszę szybko skończyć ten program. Mianowicie piszę program mnożący dwie macierze w visual studio c++ pod okienka. Macierze to tablice dwuwymiarowe, mnożę je w funkcji i nie wiem jak z niej zwrócić obliczoną macierz wyjściową. I jeszcze chciałbym ją przekształcić te tablice na string. Moja funkcja wygląda tak :

C/C++
double mnozenie_mac( double Mac_1[ 2 ][ 2 ], double Mac_2[ 2 ][ 2 ] ) {
    double mac_wynik[ 2 ][ 2 ];
    int i, k, w;
    for( i = 0; i <= 2; i++ ) {
        for( k = 0; k <= 2; k++ ) {
            for( w = 0; w <= 2; w++ )
            {
                mac_wynik[ i ][ k ] += Mac_1[ i ][ w ] * Mac_2[ w ][ k ];
            }
        }
    }
    return mac_wynik;
   
}


I następnie chciałbym wyświetlić te macierz przy użyciu MessageBox::Show w taki sposób:
C/C++
String ^ komunikat = "Macierz wynosi";
komunikat += mnozenie_mac( Mac_1, Mac_2 );

MessageBox::Show( komunikat, "Okno" );


Z góry dzięki za pomoc.
P-86251
MrPoxipol
» 2013-06-28 11:24:31
Dodaj do argumentów funkcji:
double mac_wynik[ 2 ][ 2 ];
, nic nie zwracaj. I tak nie wyświetlisz tablicy liczbowej jak napisałeś niżej. Nie zamieniasz tablicy na string.

Porównaj ze swoim kodem.
C/C++
string komunikat = "Macierz wynosi: ";
double mac_wynik[ 2 ][ 2 ];
mnozenie_mac( Mac_1, Mac_2, mac_wynik );

for( int i = 0; i < 2; ++i )
{
    for( int j = 0; j < 2; ++j )
    {
        std::ostringstream o;
        o << mac_wynik[ j ][ i ];
        kom += o.str();
    }
}
MessageBox( NULL, kom.c_str(), "Komunikat", MB_OK );
P-86425
pekfos
» 2013-06-28 11:44:35
I następnie chciałbym wyświetlić te macierz przy użyciu MessageBox::Show w taki sposób:
Ten sposób nie wygląda, na napisany w C++.
P-86427
akwes
» 2013-06-30 13:51:50
@pekfos

w visual studio c++ pod okienka.
C++/CLI


@Lee5.56
int na String możesz zamienić tak
C/C++
int num = int::Parse( str ); // System::String^ do int

A jeżeli chodzi o odbieranie tablicy to możesz zrobić to na kilka sposobów.
Np:
1. Przez parametry funkcji
C/C++
void mnozenie_mac( const double input_mac1[ 2 ][ 2 ], const dobule input_mac[ 2 ][ 2 ], double output_mac[ 2 ][ 2 ] );
Wtedy do funkcji przesyłasz 3 macierze. Dwie do obliczeń a trzecią pustą, w której zapisane będą wyniki.

2. Zrobienie obiektu
C/C++
struct macBox {
    double mac[ 2 ][ 2 ];
};

macBox mnozenie_mac( const macBox m1, const macBox m2 );

Natomiast jeżeli chcesz aby ten kod działał:
C/C++
komunikat += mnozenie_mac( Mac_1, Mac_2 );
To funkcja mnozenie_mac musi zwracać System::String, albo znać konwersję do System::String. A najlepiej by było gdybyś zrobił funkcję

C/C++
System::String ^ macToString( const double mac[ 2 ][ 2 ] /*albo macBox*/ );
// i wtedy gdzieś w kodzie naprzykład
double mac1[ 2 ][ 2 ];
// zerowanie mac1;
mnozenie_mac( macA, macB, mac1 );
String ^ komunikat = "Mnozenie macierzy ";
komunikat += macToString( mac1 );
P-86607
« 1 »
  Strona 1 z 1