Problem bei Weitergabe von Array an Funktion?
-
@Wade1234 Was meinst du mit "Sind bei Abruf von Pfaff nicht mehr gültig"? Was muss ich ändern, damit sie noch gültig sind, bzw um das jeweils "aktuelle" i,j,l an Pfaff zu übergeben?
-
Du zeigst nicht den echten Code.
-
@manni66 doch schon...(?)
-
@redpottpotter naja wenn du so eine schleife hast
for(int i = 0; i < 10; i++) { //mach irgendwas }
dann existiert i danach eigentlich nicht mehr, weil es nur für die schleife deklariert ist. eigentlich dürfte das so gar nicht kompilieren bzw. für zeile 74ff müsstest du einen fehler bekommen, oder bin ich grad irgendwie blöd?
-
@Schlangenmensch zu dem Edit: dann bekomme ich einen error " 'beta' cannot be used as a member pointer since it is of type 'double' "
-
@Wade1234 Aber meine if Abfrage steht ja innerhalb der for Schleife, also
for(int i = 0; i<10; i++){
if (){...}
}
dann müsste das i doch noch definiert sein weil ich die Schleife noch nicht verlassen habe oder?
Einen Fehler bekomme ich jedenfalls nicht
-
Nein! Das wird nicht übersetzt.
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Schlangenmensch zu dem Edit: dann bekomme ich einen error " 'beta' cannot be used as a member pointer since it is of type 'double' "
dann schreib mal
9.0 / 4.0 * beta
, immer den wert hinter dem komma mit angeben.@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 Aber meine if Abfrage steht ja innerhalb der for Schleife, also
for(int i = 0; i<10; i++){
if (){...}
}
dann müsste das i doch noch definiert sein weil ich die Schleife noch nicht verlassen habe oder?
Einen Fehler bekomme ich jedenfalls nichtaber du rufst ja danach
if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
auf und eigentlich sollten i, j und l da nicht mehr deklariert sein.
-
@redpottpotter Das kommt aus deinem entsprechenden Kontext. Vergleiche die Aufrufe mal. (E2_p ist die Kopie von dir).
#include <iostream> #include <cmath> double E_p(double alpha, double beta, double mu, double kx, double ky, double kz){ return (alpha + 9/4.*beta)*(pow(kx,2)+pow(ky,2)+pow(kz,2))-mu; } double E2_p(double alpha, double beta, double mu, double kx, double ky, double kz){ return (alpha + 9/4*beta)*(pow(kx,2)+pow(ky,2)+pow(kz,2))-mu; } int main() { auto e = E_p(2,2,2,2,2,2); auto e2 = E2_p(2,2,2,2,2,2); std::cout << e << std::endl; std::cout << e2 << std::endl; } }
-
@Wade1234 ok und wie mache ich, dass in meiner if Abfrage die jeweiligen Werte kx_e[i], ky_e[j], kz_e[l] aus den for Schleifen in denen ich mich befinde benutzt werden? Das verstehe ich gerade nicht ganz
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 Aber meine if Abfrage steht ja innerhalb der for Schleife, also
for(int i = 0; i<10; i++){
if (){...}
}
dann müsste das i doch noch definiert sein weil ich die Schleife noch nicht verlassen habe oder?
Einen Fehler bekomme ich jedenfalls nichtDein Code vom Eröffnungspost sieht aber so aus:
for(int i = 0; i < Nx; i++){ kx_e[i] = kx_e[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); } // i-Schleife zu Ende for(int j = 0; j < Ny; j++){ ky_e[j] = ky_e[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); } // j-Schleife zu Ende for(int l = 0; l < Nz; l++){ kz_e[l] = kz_e[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1); } // l-Schleife zu Ende // l hätte hier auch den Wert Nz -> Zugriff ausserhalb vom Array. if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
Du arbeitest mit anderem Code als du hier zeigst. Da kann die keiner helfen.
-
@Schlangenmensch Danke für den Tipp! Habe es jetzt auf 9.0/4.0 geändert und bekomme jetzt nur noch eine einzige Lösung (0,0,0) ausgegeben...
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 ok und wie mache ich, dass in meiner if Abfrage die jeweiligen Werte kx_e[i], ky_e[j], kz_e[l] aus den for Schleifen in denen ich mich befinde benutzt werden? Das verstehe ich gerade nicht ganz
Was meinst du, wofür die Klammern { } da sind?
-
@DirkB ahh stimmt tut mir leid - ich habe den Code gerade abgetippt weil ich mit meinem Computer gerade keinen Internetzugriff habe. Sorry für die Umstände die If Abfrage steht innerhalb der for Schleifen
-
hat es denn seine richtigkeit, dass sich die werte in den schleifen nur um die faktoren, i, j und l unterscheiden?
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@DirkB ahh stimmt tut mir leid - ich habe den Code gerade abgetippt weil ich mit meinem Computer gerade keinen Internetzugriff habe. Sorry für die Umstände die If Abfrage steht innerhalb der for Schleifen
D.h aber auch, dass noch mehr Fehler drin sein können.
Im Übrigen:
@manni66 sagte in Problem bei Weitergabe von Array an Funktion?:Du zeigst nicht den echten Code.
-
@Wade1234 ja, ich möchte ein 3D Gitter abrastern...also kleinschrittig alle Punkte in einem 3 D Koordinatensystem ablaufen (also bis zu meiner Betragsgrenze a)
-
@redpottpotter und dass kx_e[0], ky_e[0] und kz_e[0] überschrieben werden, ist auch korrekt?
for(int i = 0; i < Nx; i++){ kx_e[i] = kx_e[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); for(int j = 0; j < Ny; j++){ ky_e[j] = ky_e[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); for(int l = 0; l < Nz; l++){ kz_e[l] = kz_e[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1);
beim ersten durchlauf überschreibst du das nämlich und eigentlich hast du dann kein lineares raster mehr.
-
@Wade1234 stimmt...ich hab es jetzt so geändert:
double ke_xlimits[2] = {-a, a}; double ke_ylimits[2] = {-a, a}; double ke_zlimits[2] = {-a, a}; //kx_e[0] = ke_xlimits[0]; //ky_e[0] = ke_ylimits[0]; //kz_e[0] = ke_zlimits[0]; for(int i = 0; i < Nx; i++){ kx_e[i] = ke_xlimits[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); for(int j = 0; j < Ny; j++){ ky_e[j] = ke_ylimits[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); for(int l = 0; l < Nz; l++){ kz_e[l] = ke_zlimits[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1); if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
so müsste es doch passen und linear alle punkte erfassen oder? meine Ausgabe ist dieselbe, immernoch (0,0,0) als einzige "Lösung"
-
soll pfaff immer 0 zurückliefern (zeile 74)? nimm mal die bedingung raus, dann müsstest du deine ergebnisse eigentlich alle angezeigt bekommen.