programm für matrizen mit zeiger



  • Hallo,

    ich hab folgendes Problem:

    Was muss ich Ändern bei einem Programm von Borland auf C++ BuilderX?
    Das Programm läuft einwandfrei auf Borland nur beim BuilderX hab ich Probleme.

    Ist eventuell schlecht ausgedrückt, deswegen hier das Beispiel:

    #include <iostream.h>
    #include <conio.h>
    using namespace std;

    void main (){

    int matrix [10] [5];
    int i;
    int k;
    int (*pm) = matrix;

    for ( i = 0 ; i < 10 ; i++ ){
    for ( k = 0 ; k < 5 ; k++ )
    matrix [i][k] = i*5 + k + 1;
    }

    for ( i = 0 ; i < 50 ; i++ ){
    cout.width (4);
    cout << *(pm +i) ;
    if ( (i+1) % 10 == 0)
    cout << endl;
    }
    getch();
    }



  • Was du ändern sollst?Eventuell solltest du dich mal entscheiden welche Sprache du nutzen willst, weil so krass wie du C und C++ mischt ist ja schon krass.

    #include <iostream.h>//schon ewig heißt das so nicht mehr 
    #include <conio.h>
    using namespace std;
    
    void main (){//das ist wieder C
    
    int matrix [10] [5];
    int i;
    int k;
    int (*pm) = matrix;
    
    for ( i = 0 ; i < 10 ; i++ ){
    for ( k = 0 ; k < 5 ; k++ )
    matrix [i][k] = i*5 + k + 1;
    }
    
    for ( i = 0 ; i < 50 ; i++ ){
    cout.width (4);
    cout << *(pm +i) ;//und hier sind wir wieder in C++
    if ( (i+1) % 10 == 0)
    cout << endl;
    }
    getch();
    }
    

    eventuell klappt es so, aber da dein Problem Compiler-spezifisch ist, garantiere ich nix.

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main (){
    
    int matrix [10] [5];
    int i;
    int k;
    int (*pm) = matrix;
    
    for ( i = 0 ; i < 10 ; i++ ){
    for ( k = 0 ; k < 5 ; k++ )
    matrix [i][k] = i*5 + k + 1;
    }
    
    for ( i = 0 ; i < 50 ; i++ ){
    cout.width (4);
    cout << *(pm +i) ;
    if ( (i+1) % 10 == 0)
    cout << endl;
    }
    getch();
    }
    


  • ja sry 😃
    das programm war ne alte beispielaufgabe

    geändert hab ich das genauso wie du aber bei
    Zeile 10: int (*pm) = matrix;

    zeigt er mir den Fehler:

    "matrix2_zeiger.cpp": E2034 Konvertierung von 'int ( *)[5]' nach 'int *' nicht möglich in Funktion main() in Zeile 10

    an!

    Das war eigentlich mein Hauptproblem
    Danke



  • Warum gibst du das 2D-Array nicht einfach genauso aus, wie du es befüllst?



  • wenn ich wüsste was du meinst würd ich das eventuell so machen. 🙂
    wie gesagt es ist nur ein Beispielprogramm und ich würde es einfach nur so zum Laufen bringen wie es das auch machen müsste.



  • for ( i = 0 ; i < 10 ; i++ ){//Einlesen
    for ( k = 0 ; k < 5 ; k++ )
    matrix [i][k] = i*5 + k + 1;
    }
    
    for ( i = 0 ; i < 10 ; i++ ){//Ausgabe
    for ( k = 0 ; k < 5 ; k++ )
    std::cout<<matrix[i][k]std::endl;
    }
    

    So da musst du noch ein wenig die einrückung in der ausgabe beachten und das wars eigentlich was ich meinte.



  • EDIT: Ich war langsamer als Firefighter, lasse es aber mal stehen....

    Ich zitiere Dich mal selbst:

    Füllen:

    plaetz schrieb:

    ...

    for ( i = 0 ; i < 10 ; i++ ){
                    for ( k = 0 ; k < 5 ; k++ )
                            matrix [i][k] = i*5 + k + 1;
            }
    

    Ausgeben:

    plaetz schrieb:

    ...

    for ( i = 0 ; i < 50 ; i++ ){
          cout.width (4);
               cout << *(pm +i) ;
          if ( (i+1) % 10 == 0)
             cout << endl;
            }
    

    Beide Male durchläufst Du die komplette Matrix - warum einmal so und das andere Mal anders?

    Gruß,

    Simon2.



  • Vielleicht noch einige Dinge als Ergänzung:

    #include <iostream.h>    // nimm <iostream>
    #include <conio.h>       // ist auch compilerspezifischer Header
    using namespace std;
    
    void main (){            // das ist NICHT C und auch NICHT C++. Es heisst int main().
    
    int matrix [10] [5];
    int i;                   // Welchen Nutzen hast du davon, Schleifenvariablen
    int k;                   // ausserhalb der Schleife zu deklarieren?
    
    for (int i = 0 ; i < 10 ; i++ ){ // Mach die Deklaration so wie hier im Schleifenkopf
    for (int k = 0 ; k < 5 ; k++ )   // und rücke sauber ein.
    
    cout << *(pm +i) ;       // Findest du pm[i] nicht lesbarer?
    
    getch();                 // auch nicht Standard-C++, schau vielleicht mal in der FAQ (cin.get())
    

Anmelden zum Antworten