also zunächst gehe ich in die While-Schleife hinein. dann nehme ich eine
Zufahlszahl und gucke ob diese möglich ist. diese muss bei
ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1]) und
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]) ungleich 2 sein, damit die
if-Bedingung erfüllt ist. Dann setze ich etwas und setze neu=1, damit
die while-schleife beendet wird.
Jetzt zum Problem,
mit
lasse ich mir die werte ausgeben. dann kommt z.B.
0 0 0
1 1 1
2 1 1
3 0 1
aber nie eine zwei.
Trotzdem springt er nicht in die if-Bedingung hinein.
was habe ich da falsch gemacht?
gruß
Peter
1. Dein Quellcode enthält einen syntaktischen Fehler und kann in dieser
Form niemals kompiliert worden sein.
2. Die exemplarische Ausgabe des Programmabschnitts kann niemals von dem
Programmabschnitt stammen.
Folglich ist Dein obiges Programm irgendwie halbherzig
zusammengewurschtelt und die angebliche Programmausgabe entspringt
Deiner Phantasie. Und wir sollen uns wirklich die Mühe machen, darin den
Fehler zu suchen?
Peter schrieb:> ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1]) und> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1])
Das sind keine Funktionen, oder ist das C++, und der Rückgabewert der
Funktionen eine Referenz?
In C ist so etwas
> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]) = 2;
mit Funktionen nicht möglich.
erste klammer auf, wegen if-Schleife,
zweite Klammer auf, wegen ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])
erste klammer zu wegen zweite klammer auf
dritte klammer auf, wegen ZA(Hilfsfeld[n][0],Hilfsfeld[n][1])
zweite klammer zu, wegen dritte klammer auf
dritte klammer zu, wegen erste klammer auf.
wo habe ich die Klammer falsch gesetzt? irgendwie finde ich das nicht
Der Teil ist sowohl aus meinem Code.
meintest du evtl die Punkte? die habe ich nur dahingemacht, weil davor
etwas gemacht wird und danach auch. Ist doch wie ein satz, der nicht
beendet wird. da mache ihc auch immer ...
Peter schrieb:> wo habe ich die Klammer falsch gesetzt? irgendwie finde ich das nicht
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)
=
ZA( Hilfsfeld[n][0], Hilfsfeld[n][1] != 2 )
!=
ZA( Hilfsfeld[n][0], Hilfsfeld[n][1] ) != 2
Peter schrieb:> meintest du evtl die Punkte?
Nein, die meine ich nicht. In dem nachfolgenden Quelltext ist ein
syntaktischer Fehler enthalten, der dazu führt, dass dieser Abschnitt
niemals von einem Compiler erfolgreich kompiliert werden kann. Folglich
hast Du den Quelltext irgendwie hingerotzt und nicht etwa 1:1 aus Deinem
Programm übernommen.
Andreas Schweigstill schrieb:> Nein, die meine ich nicht. In dem nachfolgenden Quelltext ist ein> syntaktischer Fehler enthalten, der dazu führt, dass dieser Abschnitt> niemals von einem Compiler erfolgreich kompiliert werden kann.
Wenn man davon ausgeht, dass ZA/ZAH Makros sind, die eine lvalue
produzieren, dann sehe ich auf Anhieb keinen Syntaxfehler.
Also mich jetzt bitte nicht für doof halten,
aber es steht doch da.
in
Hilfsfeld[n][0] ist mein x-Wert enthalten
Hilfsfeld[n][1] ist mein y-wert enthalten
also steht da ja im prinzip
also bedeutet
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]) soviel wie
ZA(x,y)
die variablen x und y habe ich nicht direkt, dafür habe ich ja
Hilfsfeld[n][0] und Hilfsfeld[n][1]
z.B. Hilfsfeld[n][0] = 2;
Hilfsfeld[n][1] = 4;
Peter schrieb:> Also mich jetzt bitte nicht für doof halten,> aber es steht doch da.
schau doch mal was wirklich da steht
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)
wo geht dann die Klammer zu? Und wo sollte sie zu gehen?
Peter schrieb:> also steht da ja im prinzip> ZA(x,y)!=2
Warum liest Du nicht das, was Rufus geschrieben hat? Warum verheimlichst
Du immer noch, um welche Programmiersprache es sich überhaupt handeln
soll? Es handelt sich nämlich aus den von Rufus angeführten Gründen
nämlich definitiv nicht um C. Und im Falle von C++ wäre natürlich die
Deklaration von ZA und ZAZYKL extrem hilfreich.
Hast Du Dich - unabhängig von der Sprache - überhaupt schon einmal damit
befasst, was L- und R-Ausdrücke sind? So etwas ist eine absolute
Grundvoraussetzung, um auch nur eine Zeile zu programmieren.
Da steht doch
Hilfsfeld[n][0] = 2
Hilfsfeld[n][1] = 4
der Wert bei ZA(2,4) soll ungleich zwei sein.
also für mich ist somit
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1])
gleich
ZA(2,4)
>> die sprache ist c++
Size ist keine Funktion, sondern eine Methode. Außerdem befindet sich in
Deinem Programm kein einziger Aufruf von Size.
Und meine Frage nach von von ZA gelieferten Typ hast Du auch nicht
beantwortet.
Bevor wir hier also weitermachen, solltest Du Dich mit den Grundlagen
von C++ befassen. Und dann solltest Du endlich einsehen, dass es dem
Compiler scheißegal ist, was Dein Programmtext bedeuten soll, sondern er
interessiert sich nur für das, was Du hinschreibst. Und da gibt es ganz
beträchliche Unterschiede.
Timm Reinisch schrieb im Beitrag #3480694:
> was habt ihr denn?
Wir "haben" das da:
Timm Reinisch schrieb im Beitrag #3480694:
> Die Z-Ding sind vermutlich Makros
- Die Betonung liegt auf "vermutlich". Es könnte sich jedoch
genausogut um eine Funktion oder ein Array handeln - wir wissen es
nicht.
Das hier ist aber kein Hellseherforum, der TO hat ein Problem und
wünscht Hilfe, rückt mit den benötigten Informationen nur sehr zaghaft
und bröckchenweise heraus, wobei die Brocken noch nicht mal ansatzweise
konsistent sind. Z. B.:
Peter schrieb:> ZA.Size(N,M);ruft die Funktion Size auf
taucht im ursprünglichen, angeblich "problematischen" Code
Peter schrieb:> …> neu = 0> while(!neu){> printf("while schleife\n");> n = random(4);> printf("%d %d %d \n", n, ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1]),> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]));> if(ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2 &&> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)){> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]) = 2;> ZAZYKL(Hilfsfeld[n][0],Hilfsfeld[n][1]) = 0;> neu=1;> }> }> …> …
nicht auf. Was soll das jetzt? Sollen wir raten, ob eventuell ein Makro
die Methode Size kapselt?
Peter schrieb:> printf("%d %d %d \n", n, ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1]),> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]));> if(ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2 &&> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)){> ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]) = 2;> ZAZYKL(Hilfsfeld[n][0],Hilfsfeld[n][1]) = 0;
/////////////////////////////////////////
printf("%d %d %d \n", n, ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1]),
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]));
> neu=1;> }
Was passiert, wenn die Werte an der Stelle ausgegeben werden?
Danke Timm Reinisch (Sind doch nicht alle so gemein hier)
Ja, du hattest recht, die Antwort gab es schon vorher, allerdings habe
ich es in meinem Programm nicht wirklich erkannt. Ich habe es mir jetzt
nochmal ganz genau angeguckt und es ist tatsächlich verkehrt gewesen.
es sollte heissen
if(ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2 &&
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2){
und siehe an, das Programm funktioniert
danke danke danke
Ps.: habe eigentlich nur gutes von diesem Forum gehört (immerhin wurde
mein Problem ja auch gelöst), aber so wie Timm Reinisch es schon sagte,
finde ich den umgang mit leuten, die es vielleicht nicht ganz so gut
können unter aller kanone.
Das ZA wird in einer ganz anderen Funktion aufgerufen von daher hatte
ich es nciht dahingeschrieben, sondern alles andere von diesem programm
mit ... gemacht
Das steht da bei Dir....if(ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2 &&
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)){
Hier machst Du es richtig
ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2
Hier ist es falsch
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)
Wenn überhaupt, dann
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2
Das zu verstehen sollte ja kein Problem darstellen...auch wenn man den
Wald voller Bäume nicht mehr sieht
Peter schrieb:> Danke Timm Reinisch (Sind doch nicht alle so gemein hier)> Ja, du hattest recht, die Antwort gab es schon vorher, allerdings habe> ich es in meinem Programm nicht wirklich erkannt. Ich habe es mir jetzt> nochmal ganz genau angeguckt und es ist tatsächlich verkehrt gewesen.
Und was lernen wir daraus?
Eine beschissene und zu dichte Schreibweise kann einem das Leben
ungemein schwer machen.
So
1
if(ZAH(Hilfsfeld[n][0],Hilfsfeld[n][1])!=2&&
2
ZA(Hilfsfeld[n][0],Hilfsfeld[n][1]!=2)){
hätte man etwas besser gesehen, dass da in der Klammerung etwas nicht
stimmt, bzw. man hätte den Klammerfehler gar nicht erst gemacht. (*)
Auuserdem ist es da viel leichter zu verifizieren, dass tatsächlich ZAH
und ZA jeweils mit denselben Indizes versorgt werden, die aus Hilfsfeld
(was für ein bescheuerter Name für eine Variable) mit den jeweils
identischen Indizes hergeleitet werden.
Nur weil C und C++ es erlauben, dass man alles ohne Leerzeichen
aneinander klebt, bedeutet das noch lange nicht, dass das eine gute Idee
ist.
Es hat schon seinen Grund, warum diejenigen Programmierer mit dem
optisch am schlechtest lesbaren Code auch meistens die mit den dümmsten
Fehlern sind.
(*) daraus kann man wieder ableiten, dass die oft gehörte Aussage "Jetzt
bring ich es erst mal zum Laufen, schön mach ich es nachher" Unsinn ist.
Mach es gleich schön und du sparst dir einen Haufen dummer Fehler!
Andreas Schweigstill schrieb:> Peter schrieb:>> ruft die Funktion Size auf>>int TZA::Size(int n, int m){>>> die sprache ist c++>> Size ist keine Funktion, sondern eine Methode.
Natürlich ist das eine Funktion, allderdings eine Memberfunktion. Der
Begriff "Methode" ist in C++ nicht definiert, auch wenn er
umgangssprachlich gerne als Ersatz für Memberfunktion herhalten
muss.Andreas Schweigstill schrieb:> Peter schrieb:>> ruft die Funktion Size auf>>int TZA::Size(int n, int m){>>> die sprache ist c++>> Size ist keine Funktion, sondern eine Methode.
Natürlich ist das eine Funktion, allderdings eine Memberfunktion. Der
Begriff "Methode" ist in C++ nicht definiert, auch wenn er
umgangssprachlich gerne als Ersatz für Memberfunktion herhalten muss.
Man sollte ihn in C++ auch meiden, weil es unterschiedliche Ansichten
darüber gibt, was eine Methode ist. Ich habe da schon mindestens drei
verschiedene Definitionen gehört.
Karl Heinz schrieb:> Hilfsfeld (was für ein bescheuerter Name für eine Variable)
ZA, ZAH und ZAZYKL sind auch nicht besser.
sacht mal, gehts noch?
denkt mal ein bisschen drüber nach, wie ihr über Leute sprecht, die ihr
gar nicht kennt.
Wie ich meine Variablen nenne, ist doch wohl meine sache. Ausserdem,
sind diese namen für mein Projekt sehr gut gewählt.
Also dieses Forum werde ich auf gar kein Fall weiterempfehlen.
rofl...was erwartest du denn, nachdem du so renitent darauf bestanden
hast, dass dein Code doch richtig ist, obwohl man die zig mal gezeigt
hat, wo der Fehler liegt...
Peter schrieb:> Ausserdem, sind diese namen für mein Projekt sehr gut gewählt.
ZA, ZH, ZAZYKL, Hilfsfeld
sind in KEINEM Projekt 'sehr gut gewählte Namen'!
> Also dieses Forum werde ich auf gar kein Fall weiterempfehlen.
Schön. Lernresistente Anfänger, die meinen die Weisheit mit Löffeln
gefressen zu haben, brauchen wir sowieso nicht.