![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 | |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
Hi!
Ich beschäftige mich gerade zwangsweise mit C++, wobei meine Programmierzeit damit schon ne Weile her ist... Ich habe folgendes probiert: Code:
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
int i, j;
cin>>i; cin>>j;
//const int first = i;
//const int second = j;
int tabelle[1][1];
tabelle[0][0] = i;
tabelle[0][1] = j;
cout << tabelle[0][0] << endl;
cout << tabelle[0][1] << endl;
tabelle[1][0] = i+j;
tabelle[1][1] = i-j;
cout << tabelle[0][0] << endl;
cout << tabelle[0][1] << endl;
cout << tabelle[0][0] << " + " << tabelle[0][1] << " = " << tabelle[1][0] << endl;
cout << tabelle[0][0] << " - " << tabelle[0][1] << " = " << tabelle[1][1] << endl;
getche();
return 0;
}
Zitat:
Es geht dabei nicht darum, dass ich das so lösen müßte, ich spiele einfach gerade ein wenig damit herum. In echt muss ich ein array von dynamischer Größe haben.... // edit: genauer gesagt: ich werde einige 2-dim-arrays und ein paar 3-dim-arrays brauchen, die anfänglich alle mit dem Wert 0 behaftet sind und erst anschl. mit wirklichen Werten gefüllt werden. Wenn mir da jmd. helfen könnte, wäre das echt klasse! In Matlab ist das so einfach... Aber ich brauche das in C++
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! Geändert von Jann Hendrik (18.05.2006 um 18:28 Uhr). |
|
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Moin, bei deiner tabellen initialisierung reservierst du zu wenig Platz.
java Code:
Behebt den Fehler. ---Edit Mit ist jedoch ein Rätsel warum kein Fehler angezeigt wird. Gruß KaraHead
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. Geändert von karahead (18.05.2006 um 21:32 Uhr). |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
|
Arrays mit variabler größe gibt es soweit ich weiß in C++ nicht. Such mal nach dem Stichwort Listen da müsstest du etwas finden was in form von objekten soetwas nachbildet.
__________________
|
|
|
|
|
|
Nach oben #4 | ||
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
Zitat:
Also bei der Initialisierung zählt der Zahlenwert, wie ich ihn eintrage - also wie due schreibst [2] für 2 Dimensionen, aber er fängt bei 0 an zu zählen? Hatte da dann wohl meinen Fehler.. Danke! Zitat:
Über eine Liste wäre eine Möglichkeit - hatte aber gehofft das nicht so kompliziert machen zu müßen... So wie ich die Lage einschätze, werde ich mich hier noch ein paar mal melden müßen
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
||
|
|
|
|
|
Nach oben #6 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
In C++ ist es wie in Java.
Wenn du ein Array mit 2 Zeilen und 2 Reihen haben willst dann musst du es auch mit 2 initialisieren. java Code:
Gezält wird aber ab 0. ---------- |0,0|0,1| ---------- |1,0|1,1| ---------- Daher die 2, da 2 Reihen und 2 Spalten reserviert werden müssen.
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
Nach oben #7 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
ok - da hatte ich falsch gedacht - warum weiß ich auch gerade nicht....
habe da auch bei 0 angefangen - fälschlicherweise. // edit 1: Also... eindimensional habe ich einen Code-Schnipsel gefunden. Code:
#include <iostream>
using namespace std;
// getche
#include <conio.h>
int main ()
{
int breite; // Feld [x]
int n; // Hilfsvar
int * p; // ?
cout << "breite:\t";
cin >> breite;
p= new (nothrow) int[breite];
if (p == 0)
cout << "Error: memory could not be allocated";
else
{
for (n=0; n<breite; n++)
{
cout << "Enter number: ";
cin >> p[n];
}
cout << "You have entered: ";
for (n=0; n<breite; n++)
cout << p[n] << ", ";
delete[] p;
}
getche();
return 0;
}
Code:
#include <iostream>
using namespace std;
// getche
#include <conio.h>
int main ()
{
int breite; // Feld [x]
int hoehe; // Feld [y]
int i; // Hilfsvar
int j; // "
int * p; // ?
cout << "breite:\t";
cin >> breite;
cout << "hoehe:\t";
cin >> hoehe;
p= new (nothrow) [breite][hoehe];
for(i=0; i<hoehe; i++)
{
for (j=0; j<breite; j++)
{
cout << "Enter number: ";
cin >> p[i][j];
}
}
// Ausgabe:
cout << "\n Ausabe der Daten:" << endl;
for(i=0; i<hoehe; i++)
{
for (j=0; j<breite; j++)
{
cout << p[i][j] << " - ";
}
cout << endl;
}
delete[] p;
getche();
return 0;
}
p= new (nothrow) [breite][hoehe]; kann mir da einer Verständnis-Nachhilfe geben? // edit 2: Also - ich habe das Problem (so scheint es mir) erstmal gelöst. Lösung dazu kommt später. Ich sage das nur, damit sich hier keiner umsonst für mich anstrengt.
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! Geändert von Jann Hendrik (22.05.2006 um 16:05 Uhr). |
|
|
|
|
|
Nach oben #8 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
derweil bin ich bei folgendem angekommen:
Code:
// Beispiel eines 2-dim-array dynamischer Größe
#include <iostream>
using namespace std;
// getche
#include <conio.h>
int main (void)
{
int erste_dimension; // Feld [x]
int zweite_dimension; // Feld [y]
int i,j; // Hilfsvariablen
cout << "erste dimension:\t\t";
cin >> erste_dimension;
cout << "zweite dimension:\t\t";
cin >> zweite_dimension;
cout << "\n";
// Erste Dimension initialisieren
int** zweiD_array = new int*[erste_dimension];
// Zweite Dimension Anhängen
for (i=0; i<erste_dimension; ++i)
{
zweiD_array[i] = new int[zweite_dimension];
}
for(i=0; i<zweite_dimension; i++)
{
for (j=0; j<erste_dimension; j++)
{
cout << "Eingabe von array[" << i << "][" << j << "]:\t";
cin >> zweiD_array[i][j];
}
}
// Ausgabe:
cout << "\nAusabe der Daten:" << endl;
for(i=0; i<zweite_dimension; i++)
{
for (j=0; j<erste_dimension; j++)
{
cout << zweiD_array[i][j];
if(j != (erste_dimension-1))
cout << " - ";
else
cout << endl;
}
}
// Und danach wieder aufräumen!
for (i=0; i<erste_dimension; ++i)
{
// Zweite Dimensionen der Ersten Dimension löschen
delete [] zweiD_array[i];
}
// Erste Dimension löschen
delete [] zweiD_array;
getche();
return 0;
}
Das kotzt mich nämlich gerade voll an - zumal die 3te Dim. noch immer fehlt... Wäre über Hilfe echt dankbar!
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|
|
|
|
|
Nach oben #9 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Warum doppelte Pointer und nicht
java Code:
???
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
Nach oben #10 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
weil man nicht während der Laufzeit die Variablen setzen kann um damit das array zu initialisieren.
Da macht der Compiler nicht mit!
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|
|
|
|
|
Nach oben #11 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
Also...
für die dritte Dimension funktioniert das nun auch... (fast) Code:
// Beispiel eines 3-dim-array dynamischer Groesse
#include <iostream>
using namespace std;
// getche
#include <conio.h>
int main (void)
{
int erste_dimension; // Feld in [x-Richtung]
int zweite_dimension; // Feld in [y-Richtung]
int dritte_dimension; // Feld in [z-Richtung]
int i,j,k; // Hilfsvariablen fuer for-schleifen
cout << "Eingabe der Dimensionen:" << endl;
cout << "erste dimension:\t\t";
cin >> erste_dimension;
cout << "zweite dimension:\t\t";
cin >> zweite_dimension;
cout << "dritte dimension:\t\t";
cin >> dritte_dimension;
cout << "\n";
// Erste Dimension initialisieren
int*** array = new int**[erste_dimension];
// Zweite Dimension Anhaengen
for (i=0; i<erste_dimension; ++i)
{
array[i] = new int*[zweite_dimension];
// Dritte Dimension Anhaengen
for (j=0; j<zweite_dimension; ++j)
{
array[i][j] = new int[dritte_dimension];
}
}
// Eingabe:
cout << "\nEingabe der Werte:" << endl;
for(i=0; i<dritte_dimension; i++)
{
for(j=0; j<zweite_dimension; j++)
{
for (k=0; k<erste_dimension; k++)
{
cout << "Eingabe von array[z=" << i << "][y=" << j << "][x=" << k << "]:\t";
cin >> array[i][j][k];
}
}
}
// Ausgabe:
cout << "\nAusabe der Werte:" << endl;
for(i=0; i<dritte_dimension; i++)
{
for(j=0; j<zweite_dimension; j++)
{
for (k=0; k<erste_dimension; k++)
{
cout /*<< "array[z=" << i << "][y=" << j << "][x=" << k << "]:\t" */<< array[i][j][k];
if(k < erste_dimension-1)
cout << " - ";
else
cout << endl;
}
if(j == zweite_dimension-1)
cout << endl;
}
}
// Und danach wieder aufräumen!
for (i=0; i<erste_dimension; ++i)
{
// Zweite Dimensionen der Ersten Dimension löschen
for(j=0; j<zweite_dimension; ++j)
delete [] array[i][j];
delete [] array[i];
}
// Erste Dimension löschen
delete [] array;
getche();
return 0;
}
also 2-2-2 funktioniert genauso wie auch 3-3-3 nicht aber zB. 4-3-3 Hat jemand eine Idee? Source:
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|
|
|
|
|
Nach oben #12 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Moin,
1. Bei mir klappt dein Code mit 2-2-2, 3-3-3, 4-3-3 und mit 4-3-2. System: gcc 3.3.5 unter Debian Sarge. 2. Man sehen 3 fache Pointer pervers aus
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
Nach oben #13 | |
|
Neuer Benutzer
Registriert seit: 24.01.2006
Ort: Neuwied
Beiträge: 14
|
Ist vielleicht nicht eine direkte Antwort auf dein Problem, aber in folgenden Artikel aus von C++.de ist ein funktionierendes Beispiel für ein 3D-Array.
http://www.c-plusplus.de/forum/viewt...is-124532.html Edit: Wenn dur mal wirklich dynamisch arbeiten willst, probier das ganze mal mit std::vector.
__________________
Zitat:
|
|
|
|
|
|
|
Nach oben #14 | |||
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
Zitat:
Was mich aber erstaunt: Zitat:
gcc name_des_kompilierten_skripts name_source.cpp Zitat:
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|||
|
|
|
|
|
Nach oben #15 |
|
Erfahrener Benutzer
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
|
Mit gcc krieg ich bei deinem Code nur Fehler.
Ich kompilier immer mit g++, ist nie verkehrt
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
|
|
|
|
|
Nach oben #16 | |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.200
|
Zitat:
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|
|
|
|