Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 18.05.2006, 17:31   Nach oben    #1
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard [C++] array-Frage

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;
    
}
ansich nichts besonderes, aber merkwürdigerweise ist die testweise Ausgabe ein wenig... für meine Begriffe fragwürdig!

Zitat:
5
10
5
10
5
15
5 + 15 = 15
5 - 15 = -10
kann mir da einer helfen?


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:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (18.05.2006 um 18:28 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.05.2006, 21:29   Nach oben    #2
karahead
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

Moin, bei deiner tabellen initialisierung reservierst du zu wenig Platz.
java Code:
  1. int tabelle&#91;2&#93;&#91;2&#93;;

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).
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2006, 06:41   Nach oben    #3
Prophet
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 130
Standard

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.
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2006, 09:13   Nach oben    #4
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

Zitat:
Zitat von karahead
Moin, bei deiner tabellen initialisierung reservierst du zu wenig Platz.
mmh...

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:
Zitat von Prophet
Arrays mit variabler größe gibt es soweit ich weiß in C++ nicht.
nicht direkt - jedenfalls nicht so leicht wie zB in PHP (ja ich bin verwöhnt), aber es geht.

Ü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:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2006, 14:10   Nach oben    #5
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Code:
int[] myArray = new int[2];
Ich kenne nur Java, aber da wäre das ein integer-Array mit zwei Feldern.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2006, 14:45   Nach oben    #6
karahead
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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:
  1. int tabelle&#91;2&#93;&#91;2&#93;;

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.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.05.2006, 15:18   Nach oben    #7
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

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;
}
Nun bin ich dabei - auf dem Wege zur 3. Dimension... - das ich wenigstens schonmal ein 2-dimensionales array hinbekomme....

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;
}
An dieser Zeile jedoch hängt er sich dann auf:

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:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (22.05.2006 um 16:05 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2006, 16:04   Nach oben    #8
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

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;
}
Allerdings durfte ich feststellen, dass es nur bei quadratischen arrays funktioniert. Hat jmd. eine Erkläung dazu?

Das kotzt mich nämlich gerade voll an - zumal die 3te Dim. noch immer fehlt...

Wäre über Hilfe echt dankbar!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2006, 20:46   Nach oben    #9
karahead
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

Warum doppelte Pointer und nicht
java Code:
  1. int zweiD_array&#91;erste_dimension&#93;&#91;zweite_dimension&#93;;

???
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2006, 21:37   Nach oben    #10
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

weil man nicht während der Laufzeit die Variablen setzen kann um damit das array zu initialisieren.
Da macht der Compiler nicht mit!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 13:35   Nach oben    #11
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

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;
}
Allerdings habe ich auch hier noch immer das Problem, dass es _nur_ dann funktioniert, wenn die Länge der Dimensionen in x-, y- und z-Richtung identisch ist.

also 2-2-2 funktioniert genauso wie auch 3-3-3
nicht aber zB. 4-3-3

Hat jemand eine Idee?

Source: http://www.bekaan.org/c++/3_dim_array_1.cpp
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 14:49   Nach oben    #12
karahead
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 14:53   Nach oben    #13
PuppetMaster
Neuer Benutzer
 
Benutzerbild von PuppetMaster
 
Registriert seit: 24.01.2006
Ort: Neuwied
Beiträge: 14
Standard

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:
Zitat von Herz aus Gold
Ich kann dir deine persönlichen Probleme auf 10 Stellen hinter dem Komma ausrechnen, wenn dir das was hilft.
PuppetMaster ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 14:54   Nach oben    #14
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

Zitat:
Zitat von karahead
2. Man sehen 3 fache Pointer pervers aus
ja


Was mich aber erstaunt:

Zitat:
Zitat von karahead
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.
wie kompilierst du in der Konsole?
gcc name_des_kompilierten_skripts name_source.cpp




Zitat:
Zitat von PuppetMaster
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.
ok - werde ich mal reinschauen!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 15:42   Nach oben    #15
karahead
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.05.2006, 15:43   Nach oben    #16
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.235
Standard

Zitat:
Zitat von Jann Hendrik
wie kompilierst du in der Konsole?
weil ich das dann hier mal eben an einem anderem Rechner testen kann...
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten