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 beispielaufgabegeä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())