or und and

sympathisant

Welt-Boss
Registriert
23.04.2009
Beiträge
2.421
Reaktionspunkte
36
Kommentare
4
Buffs erhalten
5
kann mir mal jemand kurz weiterhelfen. sitze den ganzen tag an nem kleinen programm und irgendwann geht nix mehr im kopf.

code soll ausgeführt werden wenn bedingung a nicht stimmt und wenn bedingung b nicht stimmt. und wenn beide bedingungen nicht stimmen, dann sowieso nicht.

also:

if a<>b and x<>y then


oder


if a<>b or x<>y then


???
 
Was sind denn x und y?

Wenn jetzt x deine Bedinung ist hätte ich gesagt:

if a!=x or b=!x
 
Zuletzt bearbeitet von einem Moderator:
a und x sind variablen und b und y werte.

was passiert beim or wenn jetzt beide bedingungen nicht erfüllt sind. dann stimmt "OR" ja nicht. weils nicht "OR" ist sondern n "AND". oder hab ich n denkfehler?


verständlich??


edit: ich teste deine variante mal kurz.
 
Zuletzt bearbeitet von einem Moderator:
a und x sind variablen und b und y werte.

was passiert beim or wenn jetzt beide bedingungen nicht erfüllt sind. dann stimmt "OR" ja nicht. weils nicht "OR" ist sondern n "AND". oder hab ich n denkfehler?


edit: ich teste es mal kurz.

Also du willst jetzt das der "if"-Teil ausgeführt wird wenn a oder x ungleich b oder y ?
Versteh ich das so richtig?
Das wäre dann:

if a!=b or a!=y or x=!b or x=!y


Wobei das oben keinen sinn macht da müssten die Werte b und y immer gleich groß sein
biggrin.gif

Wenn jetzt beim "or" beide Bedingungen nicht erfüllt sind, dann wird der if-teil auch nicht ausgeführt.


Edit: Oder hab ich das jetzt falsch verstanden?Variable a wird mit dem Wert b verglichen und Variable x mit dem Wert y?
 
Zuletzt bearbeitet von einem Moderator:
neee. das wars noch nicht.

programm(teil) soll ausgeführt werden, wenn a ungleich "hase" und wenn b ungleich "wolf" ist (oder eins davon).

aber mit nem "and" klappts nicht, weil ja dann nur gestoppt wird wenn beides zutrifft. aber es soll auch angehalten werden, wenn schon eins davon zutrifft.

aber wenn ich n "or" nehme, wird dann auch gestoppt wenn beide bedingungen erfüllt sind??


nochmal. da ich selbst nicht mehr durchblicke:

a="hase" und b=irgendwas -> nix ausführen
a="hase" und b="wolf" -> nix ausführen
a=irgendwas und b="wolf" -> nix ausführen
a=irgendwas (ausser "hase") und b=irgendwas (ausser "wolf") -> ausführen
 
Zuletzt bearbeitet von einem Moderator:
Or ist richtig! Wenn eines der beiden Bedinungen (Or -> das eine oder das andere) erfüllt ist, dann ausführen. Bei Und müssten beide Bedingungen erfüllt sein, damit es funktioniert!
 
und wenn ich es dann nicht ausgeführt haben will?

if a<>"hase" or b<>"wolf" then funktioniert irgendwie nicht. der code wird dann trotzdem ausgeführt.

Code:
Sub haseundwolf()

 a = "hund"
 b = "wolf"
 
 If a <> "hase" Or b <> "wolf" Then
 
   MsgBox ("irgendwas")
   
 End If

End Sub


mach jetzt feierabend. reicht für heute ...
 
if a!="hase" or b!="wolf" ;

bei der Abfrage sollte der if-Teil immer ausgeführt werden wenn eine der beiden Bedingungen erfüllt ist. Sind beide erfüllt müsste er trotzdem den if-Teil ausführen.


und wenn ich es dann nicht ausgeführt haben will?

if a<>"hase" or b<>"wolf" then funktioniert irgendwie nicht. der code wird dann trotzdem ausgeführt.

Code:
Sub haseundwolf()

 a = "hund"
 b = "wolf"
 
 If a <> "hase" Or b <> "wolf" Then
 
   MsgBox ("irgendwas")
   
 End If

End Sub


mach jetzt feierabend. reicht für heute ...


Was du geschrieben hast passt doch, du hast a als Hund definiert und überprüfst dann ob a ungleich hase.
Also hund ungleich hase?
Trifft zu folglich wird der If-Teil ausgeführt
 
Zuletzt bearbeitet von einem Moderator:
Du solltest die Terme klammern. if (a <> "hase") or (b <> "wolf") then ...
 
if a<>"hase" or b<>"wolf" then funktioniert irgendwie nicht. der code wird dann trotzdem ausgeführt.
Logischerweise. Denn a nicht trifft zu, b jedoch schon. Trifft eine der bedingungen zu wird der Code innerhalb der Bedingung ausgeführt.


code soll ausgeführt werden wenn bedingung a nicht stimmt und wenn bedingung b nicht stimmt. und wenn beide bedingungen nicht stimmen, dann sowieso nicht.
So klar drückst Du dich hier aber auch nicht aus.
Wenn ich es richtig deute willst Du dass der Code in der Bedingung nur ausgeführt wird wenn BEIDE Bedingungen stimmen? Solange nicht klar ist was Du willst kann dir halt keiner helfen
wink.gif


Nur wenn a= hase ist (was es derzeit nicht ist da du hund reinschreibst) und gleichzeitig b wolf ist wird der code ausgeführt.
Stimmt nur eine der beiden Bedingungen wird der Code auch nicht ausgeführt.
Code:
Sub haseundwolf()

a = "hund"
b = "wolf"

If a = "hase" and b = "wolf" Then

   MsgBox ("irgendwas")
  
End If

End Sub
 
Zuletzt bearbeitet von einem Moderator:
Lasst mal ne Frau ran... tz... ^^

Also, du willst folgendes:
Es wird nur dann etwas ausgeführt, wenn beide Variablen False ergeben, wenn sie mit Werten verglichen werden.

(in PHP geschrieben, funzt soweit auch
wink.gif
)
Code:
$a = 1;
$b = 2;

$x = <benutzereingabe>;
$y = <benutzereingabe>;

if ($a != $x && $b != $y){
	echo $a." stimmt nicht mit dem Benutzerwert ".$x." überein!";
	echo $b." stimmt nicht mit dem Benutzerwert ".$y." überein!";
}

In worten heißt das:
Code:
$a ist 1
$b ist 2

$x ist 4 (durch Benutzereingabe)
$y ist 6 (durch Benutzereingabe)

wenn (1 ungleich 4 ist) und (2 ungleich 6 ist)
	--> dann gebe Folgende Zeilen aus:
			1 stimmt nicht mit dem Benutzerwert 4 überein!
			2 stimmt nicht mit dem Benutzerwert 6 überein!

Kurze Erklärung zu:
and --> BEIDE Werte müssen wahr sein, dann ist die Bedingung erfüllt
or --> Wert 1 ODER Wert 2 ODER beide Werte muss/müssen wahr sein, dann ist die Bedingung erfüllt
xor --> Wert 1 ODER Wert 2 muss wahr sein, dann ist die Bedingung erfüllt. Wenn beide gleich sind, ist sie nicht erfüllt (unterschied zu or)

hoffe das war nun verständlich. Ansonsten einfach ausprobieren, man lernt immer noch am besten durch "Learning by Doing"
wink.gif


LG
Nira =)
 
Tze - von wegen "lass mal ne Frau ran". Die muessen ja alles dauernd wiederholen, wenn sie glauben man haette ihnen nicht zugehoert
wink.gif
 
programm(teil) soll ausgeführt werden, wenn a ungleich "hase" und wenn b ungleich "wolf" ist (oder eins davon).

aber mit nem "and" klappts nicht, weil ja dann nur gestoppt wird wenn beides zutrifft. aber es soll auch angehalten werden, wenn schon eins davon zutrifft.
Also, diese Beschreibung hier passt nicht zu der Tabelle, die Du unten angegeben hast - denn die sagt, Du willst nur ausführen, wenn "a ungleich hase" UND GLEICHZEITIG AUCH "b ungleich wolf" ist.


aber wenn ich n "or" nehme, wird dann auch gestoppt wenn beide bedingungen erfüllt sind??
Was genau meinst Du eigentlich mit "gestoppt"? Nicht ausführen oder ausführen?


Um Deine Verwirrung aufzuklären, hier mal eine Beschreibung, was AND und OR eigentlich machen.

AND: Die Aussage trifft nur zu, wenn BEIDE Bedingungen wahr sind.
Beispiel: (a=hase) AND (b=wolf) trifft nur dann zu, wenn sowohl a=hase ist und auch zusätzlich b=wolf ist; in allen anderen Fällen trifft es nicht zu.

OR: Die Aussage trifft zu, wenn entweder die eine Bedingung zutrifft (a=hase, rest egal), oder die andere Bedingung (b=wolf, rest egal), aber auch wenn beide zutreffen ("rest egal" heisst eben, dass die andere bedingung dann egal ist, also auch bei a=hase, b=wolf).

Was Dich verwirrt, ist wohl die Tatsache, dass das umgangssprachliche "und" in der Informatik eher die Bedeutung von "OR" hat; das "AND" aus der Informatik lässt sich umgangssprachlich eher durch "auch" ausdrücken.


nochmal. da ich selbst nicht mehr durchblicke:

a="hase" und b=irgendwas -> nix ausführen
a="hase" und b="wolf" -> nix ausführen
a=irgendwas und b="wolf" -> nix ausführen
a=irgendwas (ausser "hase") und b=irgendwas (ausser "wolf") -> ausführen
Dieser Ansatz von Dir, erst mal eine Tabelle zu machen, ist schon genau richtig.

Zusammen mit meinen obigen Ausführungen, und da Du nur ausführen willst, bei "weder hase noch wolf", musst Du auf Ungleichheit testen - auch das hast Du in Deinem ersten Posting ja schon richtig gemacht.

Also, das Ganze muss so aussehen, wie Niranda es schon geschrieben hat.

Wenn es immer noch nicht klappt, wie Du es Dir wünscht, solltest Du Dir folgendes überlegen:
a) Hast Du bei den Benutzereingaben schon sichergestellt, dass hase und wolf auch kleingeschrieben der Vergleichsroutine übergeben werden? Wenn nicht, wäre nämlich "Hase <> hase", was Du sicher nicht willst.
b) Poste doch mal einen Auszug aus Deinem Original-Quelltext, vielleicht sehen wir dann eher wo es klemmt.
 
danke für die hilfe. heute früh mit klarem kopf hab ichs hinbekommen.


hintergrund ist der, dass ich makro dokumentvorlagen verändern will. allerdings nicht die normal.dot (wo immer sie auch liegt) und auch keine temporären dateien (die mit ner ~ anfangen)

also sofern schon eine der bedingung erfüllt ist, soll der nachfolgende programmcode nicht ausgeführt werden.

ich habs jetzt so gemacht:

Code:
If Not (dname = "Normal.dot" Or Left(dname, 1) = "~") Then
.
.
.
ganz viel code
.
.
.

end if


nochmal danke an alle die mitüberlegt haben.

der hase-wolf-hund-vergleich war wohl nicht so doll ..
 
Zuletzt bearbeitet von einem Moderator:
Keine Ursache, man hilft ja gerne.

ich habs jetzt so gemacht:

Code:
If Not (dname = "Normal.dot" Or Left(dname, 1) = "~") Then

Übrigens:
If Not ( a=x OR b=y )
ist GENAU DASSELBE wie
If ( a<>x AND b<>y )

Das is das De Morgansche Gesetz (auch: Regel) aus der Boolschen Algebra:
http://de.wikipedia.org/wiki/De_Morgansche_Gesetze

Hier eine Übersicht:
http://ohg-landau.de/ohg/files/info/Technische/Boolsche.html
(Hierbei meint "*" ein "AND", "+" meint "OR" und der Haken bedeutet "NOT".)
 
Zuletzt bearbeitet von einem Moderator:
ich will ja glauben, dass es so ist. aber es stimmt doch nicht ... oder??? muss ich mir mal in ruhe reinziehen.

das mit dem "and" dazwischen heisst doch, dass beide bedingungen erfüllt sein müssen?!

und das mit dem "or" heisst, dass eine bedingung erfüllt sein muss. und durch das "not" davor kehre ich nur die bedeutung von "<>" um??


*grübel*
 
or heißt mindestens eine Bedingung... ^^
xor heißt maximal eine..
wink.gif


pvpseeker hat schon recht - so wie ich es überflogen habe.

2 + 2 = 4
7 - 3 = 4

ist auch das gleiche... =)
allerdings sieht man 2 + 2 schneller, bzw erkennt das ergebnis schneller als 7 - 3 ^^

Nira ^.^
 
Zuletzt bearbeitet von einem Moderator:
So - und das Ganze jetzt noch in NANDs aufschluesseln. Der mittellose Digitaltechniker hat schliesslich nur NANDs und leistet sich nicht so ausgefallenen Schnickschnack wie ANDs, ORs oder gar XORs.
 
Zurück