Re: Funktionen Rückgabe Kategorie: Programmierung (von Peter W. - 5.04.2011 22:49) | |
Als Antwort auf Re: Funktionen Rückgabe von ChristianS - 5.04.2011 22:28
| |
Liegt anscheinend an dem Array. Ich hab grad nur das alte englische Original CC2 Handbuch da: Variable strings, arrays, and parameters with user-defined data type on the other hand are automatically passed as a reference. Manipulations on the reference-parameters affect the referenced data object. e.g. function fx ( string s ) { s = "abc"; } thread main { string local_s; local_s = "123"; fx(local_s); // local_s becomes "acb" } in contrast to numerical parameters: function fx ( int i ) { i = 0; } thread main { int local_i; local_i = 1; fx(local_i); // local_i remains 1 } > Hi, > nee, das ist ein int-Wert. Das muss auch anders gehen: > Hier mal die Sasu-Funktion aus dem geo-Modul (ist der Parameter sasu[]) > > function SaSu(int Ja, int Mo, int Ta, float GBN, float GLO, int MEZ_MESZ, int sasu[]) > // MEZ_MESZ: 0= nach aktueller Zeit (MEZ/MESZ), 1= Zeit nach MEZ, 2= Zeit nach MESZ > // Rückgabe in sasu[]: Wert0: Sonnenaufgang, Wert1: Sonnenuntergang, in Minuten > { > if Ja<2000 return; // Berechnung erst ab 2000 > float JD2000, JD, T, B, h, ZG, DeltaT, > SAOZ, SUOZ, SAWZ, SUWZ; > JD2000 = 2451545; > JD = JulianDatum(Ja,Mo,Ta); > T = (JD - JD2000)/36525; > B = GBN*RAD; > h = -50.0/60.0*RAD; // -50 Bogenminuten Horizonthöhe > // wegen Lichtkrümmung der Sonne in Horizontnähe. > ZG = BerechneZeitgleichung(T); > DeltaT = 12*math.acos((math.sin(h) - math.sin(B)*math.sin(DK)) > / (math.cos(B)*math.cos(DK)))/Pi; > SAOZ = 12-DeltaT-ZG; // So-Aufgang Ortszeit > SUOZ = 12+DeltaT-ZG; // So-Untergang Ortszeit > SAWZ = SAOZ-GLO/15; // So-Aufgang Weltzeit > SUWZ=SUOZ-GLO/15; // So-Untergang Weltzeit > if (system.dst() and MEZ_MESZ==0)or MEZ_MESZ==2 // bei Sommerzeit +60 min. > { > sasu[0]=round(SAWZ*60)+120; // MESZ in Minuten > sasu[1]=round(SUWZ*60)+120; // MESZ in Minuten > } > else > { > sasu[0]=round(SAWZ*60)+60; // MEZ in Minuten > sasu[1]=round(SUWZ*60)+60; // MEZ in Minuten > } > return; > } > > > > > > Ist "zeit" ein String? das klappt, nur mit Werten geht das glaub ich nicht. > > > > In der function am Ende > > return ontime einsetzen > > und das "returns int" in "returns long" ändern. > > > > und dann beim Aufruf > > NewTime=check.Status(1,1,30,2100,2200, time) > > > > > > > > > Hallo, > > > ich habe eine Funktion und möchte einen berechneten Wert zurückgeben. Ich habe mir das an > > > der geo.Sasu-Funktion abgucken wollen, klappt bei mir aber nicht. Hier die SaSu Funktion: > > > > > > int zeit[2] > > > ... > > > geo.SaSu(system.year(),system.month(),system.day(), > > > breitengrad,laengengrad,0,zeit); > > > ... > > > > > > In zeit werden dann die beiden berechneten Werte zurückgegeben. > > > > > > Nun meine Funktion: > > > > > > > > > function Status(int Number,int Mode,long offset, > > > long on,long off,long onTime) returns int > > > { > > > ..... > > > ontime=5; > > > } > > > > > > > > > nun der Aufruf der Funktion aus dem Programm: > > > > > > > > > long time; > > > .... > > > check.Status(1,1,30,2100,2200, time) > > > > > > hwcom.num(time); > > > ... > > > > > > > > > wo ist mein Gedankenfehler? > > > > > > Danke und Gru�, > > > ChristianS | |
Antwort schreiben Antworten: |