zweidimensionale felder



  • Ich versuche gerade mit zweidimensionalen Feldern zu rechnen, weil ich für ein Programm für jeden Punkt in einem Fenster einen bestimmten Wert ausrechnen muss und später dann die Werte zuweisen muss. Und ich finde das geht mit zweidimensionalen Feldern einfacher.
    Ich bekommen aber nur Fehlermeldungen beim Complilieren:

    #include <iostream.h>
    #include <math.h>
    
    int main() 
    {
    	const double C = 3e+8;
    	const double PI = 3.141592654;
    
    	double lamda1 = 100e-9, lamda2 = 200e-9, lamda3 = 300e-9, lamda4 = 400e-9, lamda5 = 500e-9, lamda6 = 600e-9;
    	double a1 = 15, b1 = 50, c1 = 03, d1 = 41, e1 = 59, f1 = 46;
    	double a2 = 15, b2 = 50, c2 = 20, d2 = 94, e2 = 35, f2 = 67;
    
    	double t1 = 1;
    
      	double *x1 = new double[101]; 
    
    	for(int i=1;i<101;i++)
    	{ 
    		x1[i] = i;
    	}
    
    	double *x2 = new double[101]; 
    
    	for(int j=1;j<101;j++)
    	{ 
    		x2[j] = j;
    	}
    
    	double *z0 = new double[101][101];
    	double *z1 = new double[101][101];
    	double *z2 = new double[101][101];
    	double *z3 = new double[101][101];
    	double *z4 = new double[101][101];
    	double *z5 = new double[101][101];
    	double *z6 = new double[101][101];
    
    	int sx=0,mx=0,nx=0,ox=0,px=0,qx=0,rx=0;
    	int sy=0,my=0,ny=0,oy=0,py=0,qy=0,ry=0;
    
    		{			
    
    			for(j=1;j<101;j++)
    			{
    
    				sy++,my++,ny++,oy++,py++,qy++,ry++;
    
    				for(i=1;i<101;i++)
    				{
    
    					sx++,mx++,nx++,ox++,px++,qx++,rx++;	
    
    					z1[mx][my] = sin ( 2 * PI * (C / lamda1) * ( (  t1  - ( sqrt ( ( x1[i] - a1 ) * ( x1[i] - a1 ) + ( x2[j] - a2 ) * ( x2[j] - a2 ) ) ) / C  ) ) );
    					z2[nx][ny] = sin ( 2 * PI * (C / lamda2) * ( (  t1  - ( sqrt ( ( x1[i] - b1 ) * ( x1[i] - b1 ) + ( x2[j] - b2 ) * ( x2[j] - b2 ) ) ) / C  ) ) );
    					z3[ox][oy] = sin ( 2 * PI * (C / lamda3) * ( (  t1  - ( sqrt ( ( x1[i] - c1 ) * ( x1[i] - c1 ) + ( x2[j] - c2 ) * ( x2[j] - c2 ) ) ) / C  ) ) );
    					z4[px][py] = sin ( 2 * PI * (C / lamda4) * ( (  t1  - ( sqrt ( ( x1[i] - d1 ) * ( x1[i] - d1 ) + ( x2[j] - d2 ) * ( x2[j] - d2 ) ) ) / C  ) ) );
    					z5[qx][qy] = sin ( 2 * PI * (C / lamda5) * ( (  t1  - ( sqrt ( ( x1[i] - e1 ) * ( x1[i] - e1 ) + ( x2[j] - e2 ) * ( x2[j] - e2 ) ) ) / C  ) ) );
    					z6[rx][ry] = sin ( 2 * PI * (C / lamda6) * ( (  t1  - ( sqrt ( ( x1[i] - f1 ) * ( x1[i] - f1 ) + ( x2[j] - f2 ) * ( x2[j] - f2 ) ) ) / C  ) ) );
    
    					z0[sx][sy] = z1[mx][my] + z2[nx][ny] + z3[ox][oy] + z4[px][py] + z5[qx][qy] + z6[rx][ry];
    				}
    
    			}
    
    			for(sy=1;sy<101;sy++)
    			{
    
    				for(sx=1;sx<101;sx++)
    					{
    					cout << z0[sx][sy] << "\n";
    					}
    
    			}
    
    			delete[] x1; 
    			delete[] x2; 
    			delete[] z0;
    			delete[] z1;
    			delete[] z2;
    			delete[] z3;	
    			delete[] z4;
    			delete[] z5;
    			delete[] z6;
    
    	return 0;
    }
    

    Bekomme aber folgende Fehlermeldungen:

    testprogramm.cpp(56) : error C2440: 'initializing' : 'double (*)[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(57) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(58) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(59) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(60) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(61) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double ' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(62) : error C2440: 'initializing' : 'double (
    )[101]' kann nicht in 'double *' konvertiert werden
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    testprogramm.cpp(84) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(84) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(85) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(85) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(86) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(86) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(87) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(87) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(88) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(88) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(89) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(89) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    \testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    testprogramm.cpp(91) : error C2106: '=' : Linker Operand muss ein L-Wert sein
    testprogramm.cpp(101) : error C2109: Index benoetigt ein Feld oder einen Zeigertyp

    die Fehler beziehen sich auf folgende Code-Ausschnitte:

    double *z0 = new double[101][101];
    	double *z1 = new double[101][101];
    	double *z2 = new double[101][101];
    	double *z3 = new double[101][101];
    	double *z4 = new double[101][101];
    	double *z5 = new double[101][101];
    	double *z6 = new double[101][101];
    
    z1[mx][my] = sin ( 2 * PI * (C / lamda1) * ( (  t1  - ( sqrt ( ( x1[i] - a1 ) * ( x1[i] - a1 ) + ( x2[j] - a2 ) * ( x2[j] - a2 ) ) ) / C  ) ) );
    					z2[nx][ny] = sin ( 2 * PI * (C / lamda2) * ( (  t1  - ( sqrt ( ( x1[i] - b1 ) * ( x1[i] - b1 ) + ( x2[j] - b2 ) * ( x2[j] - b2 ) ) ) / C  ) ) );
    					z3[ox][oy] = sin ( 2 * PI * (C / lamda3) * ( (  t1  - ( sqrt ( ( x1[i] - c1 ) * ( x1[i] - c1 ) + ( x2[j] - c2 ) * ( x2[j] - c2 ) ) ) / C  ) ) );
    					z4[px][py] = sin ( 2 * PI * (C / lamda4) * ( (  t1  - ( sqrt ( ( x1[i] - d1 ) * ( x1[i] - d1 ) + ( x2[j] - d2 ) * ( x2[j] - d2 ) ) ) / C  ) ) );
    					z5[qx][qy] = sin ( 2 * PI * (C / lamda5) * ( (  t1  - ( sqrt ( ( x1[i] - e1 ) * ( x1[i] - e1 ) + ( x2[j] - e2 ) * ( x2[j] - e2 ) ) ) / C  ) ) );
    					z6[rx][ry] = sin ( 2 * PI * (C / lamda6) * ( (  t1  - ( sqrt ( ( x1[i] - f1 ) * ( x1[i] - f1 ) + ( x2[j] - f2 ) * ( x2[j] - f2 ) ) ) / C  ) ) );
    
    					z0[sx][sy] = z1[mx][my] + z2[nx][ny] + z3[ox][oy] + z4[px][py] + z5[qx][qy] + z6[rx][ry];
    

    Kann mir jemand sagen, was ich falsch mache? Ich bin leider noch sehr neu in C++ und kenn mich noch net aus... Wäre echt net...

    Vielen Danke für Hilfe schon vorher... Stephan3



  • In der FAQ steht wie man mehr-dimensionale Felder richtig erstellt!



  • hallo!!

    weiß zufälliger weise jemand, ob oder wie man beim erstellen variable mit in den Dateinamen schreibt?

    ofstream out("hallo%d.txt",a);
    fuznt net!
    Da erhalt ich nur eine Datei mit dem Namen: hallo%d.txt!



  • banana157 schrieb:

    hallo!!

    weiß zufälliger weise jemand, ob oder wie man beim erstellen variable mit in den Dateinamen schreibt?

    ofstream out("hallo%d.txt",a);
    fuznt net!
    Da erhalt ich nur eine Datei mit dem Namen: hallo%d.txt!

    meinte natürlich beim erstellen von Dateien!
    Sorry



  • banana157 schrieb:

    hallo!!

    weiß zufälliger weise jemand, ob oder wie man beim erstellen variable mit in den Dateinamen schreibt?

    ofstream out("hallo%d.txt",a);
    fuznt net!
    Da erhalt ich nur eine Datei mit dem Namen: hallo%d.txt!

    meinte natürlich beim erstellen von Dateien!
    Sorry



  • wie oft willst die frage noch posten? und wieso erstellst du nicht einfach einen thread dafür?.

    ps: *plonk* 😃



  • ich habs jetzt so gemacht... das wird auch kompiliert und gelinkt, beim ausführen gibt es aber eine fehlermeldung: access violation...

    double (*z0)[101] = 0;
    	double (*z1)[101] = 0;
    	double (*z2)[101] = 0;
    	double (*z3)[101] = 0;
    	double (*z4)[101] = 0;
    	double (*z5)[101] = 0;
    	double (*z6)[101] = 0;
    
    	z0 = new double[101][101];
    	z1 = new double[101][101];
    	z2 = new double[101][101];
    	z3 = new double[101][101];
    	z4 = new double[101][101];
    	z5 = new double[101][101];
    	z6 = new double[101][101];
    

    den rest hab ich gleich gelassen

    was ist noch falsch?

    PS: hab mir etz mal nen account geholt und bin natürlich derselbe wie Stephan3



  • Hallo,

    ei der Daus, es gibt new[][].
    Das musst du schon anders anstellen.
    Du hast jeweils 101 Zeiger (ein Array aus Zeigern).
    Somit musst du jeden Zeiger dieses Arrays einzeln initialisieren:

    double (*z0)[101] = 0;
    
    for(int count = 0; count < 101; ++count)
    z0[count] = new double;
    

    Den analogen Aufruf mit delete darfst du selbstverständlich nicht vergessen.

    MfG Eisflamme



  • Mis2com schrieb:

    Hallo,

    ei der Daus, es gibt new[][].
    Das musst du schon anders anstellen.
    Du hast jeweils 101 Zeiger (ein Array aus Zeigern).
    Somit musst du jeden Zeiger dieses Arrays einzeln initialisieren:

    double (*z0)[101] = 0;
    
    for(int count = 0; count < 101; ++count)
    z0[count] = new double;
    

    Den analogen Aufruf mit delete darfst du selbstverständlich nicht vergessen.

    MfG Eisflamme

    wenn ich das eingebe kommt die fehlermeldung:

    error C2440: '=' : 'double *' kann nicht in 'double [101]' konvertiert werden
    Es gibt keine Konvertierungen von Feldtypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Felder gibt

    und zwar genau für die zeile

    z0[count] = new double;
    

    also irgendwie geht des auch net so recht...



  • habs mittlerweile auch mit der 4.Möglichkeit die hier (http://www.c-plusplus.net/forum/viewtopic.php?t=39489) beschrieben wird, versucht. Das Initialisieren und Deklarieren der Felder funktioniert auch hier wunderbar, aber die Wertzuweisung

    z1[mx][my] = sin ( 2 * PI * ( C / lamda1 ) * ( ( t1 - ( sqrt ( ( x1[i] - a1 ) * ( x1[i] - a1 ) + ( x2[j] - a2 ) * ( x2[j] - a2 ) ) ) / C ) ) );
    

    funktioniert irgendwie nicht... da bringt er dann beim ausführen auch irgendwann eine fehlermeldung... Wenn ich einem bestimmten Feld z.b. (z1[0][0]) einen Wert zuweise dann funktioniert das und ich kann die Feldwerte auch addieren und einem anderen Feld zuweisen. Aber sobald ich in das Feld Laufwerte (z.b. i von 1 bis 100) reinsetze, gibts ne fehlermeldung, wenn ich das programm ausführe...

    wenn ich aber den gleichen programmcode wie oben laufen lass und nur ein eindimensionales feld benutze, funktioniert das ganze...

    weiß jemand was an der zuweisung falsch sein könnte?

    Sirstefen



  • hat denn keiner ne ahnung was falsch sein könnte?

    Wär echt dankbar für Hilfe Sirstefen



  • up


Anmelden zum Antworten