• Keine Ergebnisse gefunden

¨Ubungspaket 9 Logische Ausdr¨ucke

N/A
N/A
Protected

Academic year: 2021

Aktie "¨Ubungspaket 9 Logische Ausdr¨ucke"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungspaket 9 ¨

Logische Ausdr¨ ucke

Ubungsziele: ¨

1. Umgang mit logischen Vergleichs- und Verkn¨ upfungsoperatoren 2. Bilden einfacher und komplexer logischer Ausdr¨ ucke

Skript:

Kapitel: 22 Semester:

Wintersemester 2021/22 Betreuer:

Thomas, Tim und Ralf Synopsis:

Logische Ausdr¨ ucke bestehen aus Vergleichsoperatoren wie

” gr¨ oßer“

oder ” kleiner“ sowie aus logischen Verkn¨ upfungen wie

” und“,

” oder“

bzw. ” nicht“. Logische Ausdr¨ ucke ben¨ otigen wir vor allem bei Fall-

unterscheidungen sowie Schleifen und ¨ uben sie deshalb hier gesondert

ein.

(2)

Teil I: Stoffwiederholung

Aufgabe 1: Wahr und Falsch

Wie werden in der Programmiersprache C die beiden logischen Werte

”wahr“ und

”falsch“

ausgedr¨uckt?

wahr : Alle Werte ungleich Null falsch: Ein Wert, der Null ist

Aufgabe 2: Pr¨ azedenzregeln

Erkl¨are kurz mit eigenen Worten, was man beim Programmieren als Pr¨azedenzregeln be- zeichnet. Was hat dies mit der Regel

”Punktrechnung geht vor Strichrechnung“ zu tun, die wir aus dem Mathematikunterricht kennen?

Pr¨azedenzregeln (auch Vorrangregeln genannt) geben an, welche Operationen in welcher Reihenfolge ausgef¨uhrt werden. In der Mathematik ist es ¨ahnlich. Hier gibt es beispiels- weise die Regel

”Punkrechnung geht vor Strichrechnung“. Diese Regeln stellen sicher, dass derartige Ausdr¨ucke von allen in gleicherweise ausgerechnet werden.

Aufgabe 3: Klammersetzung

Welche Klammern sind f¨ur das Einklammern von arithmetischen und logischen Ausdr¨ucken in der Programmiersprache C erlaubt?

(): ja []: nein {}: nein

(3)

Teil II: Quiz

Aufgabe 1: Klammersetzung

Bei gemischten Ausdr¨ucken ist immer die Frage, ob man Klammern setzen muss und wenn ja, wo? Hier hilft die Pr¨azedenztabelle (siehe Anhang im Skript oder den gesammelten Ubungspaketen) weiter, nach der der Compiler die Ausdr¨¨ ucke auswertet. Wo sind in den folgenden Ausdr¨ucken die Klammern, wie sie sich der Compiler denkt. In den Ausdr¨ucken sind i und j immer Variablen vom Typ int.

Ohne Klammern mit gedachten Klammern i > 1 && j > 2 (i > 1) && (j > 2) i < j || j == 1 (i < j) || (j == 1)

i < j || j == 1 && j != 4 (i < j) || ((j == 1) && (j != 4)) i + 1 < j || j + 2 < i ((i + 1) < j) || ((j + 2) < i)

Aufgabe 2: Vereinfachung logischer Ausdr¨ ucke

Manchmal kann man logische Ausdr¨ucke vereinfachen. Im Folgenden steht a immer f¨ur einen (logischen) Ausdruck, der die Werte

”wahr“ und

”falsch“ annehmen kann. ¨Uberlege, wie sich die folgenden Ausdr¨ucke vereinfachen lassen:

Ausdruck Vereinfachung

a und wahr a

a oder wahr wahr

a und falsch falsch a oder falsch a

(4)

Teil III: Fehlersuche

Aufgabe 1: Fehler in logischen Ausdr¨ ucken

Im folgenden Programm haben sich in den logischen Ausdr¨ucken wieder ein paar kleine Fehler eingeschlichen. Die nachfolgende Ausgabeanweisung (printf()) gibt immer an, f¨ur welche F¨alle der Ausdruck ein logisches

”wahr“ liefern soll. Finde und korrigiere die Fehler.

1 # i n c l u d e < s t d i o . h >

2

3 int m a i n ( int argc , c h a r ** a r g v )

4 {

5 int i , j , k ;

6 /* e i n l e s e n von W e r t e n f u e r i , j und k */

7 if i == 1 && j == 1 )

8 p r i n t f ( " i und j h a b e n b e i d e den w e r t 1\ n " ) ; 9 if ( i == 1 && j == 1 || k > 0 )

10 p r i n t f ( " i ist 1 und g l e i c h z e i t i g j g l e i c h 1 o d e r k p o s i t i v \ n " ) ;

11 if ( i = > 1 )

12 p r i n t f ( " i ist g r o e s s e r o d e r g l e i c h 1\ n " ) ;

13 if ( i = 1 )

14 p r i n t f ( " i hat den w e r t 1\ n " ) ; 15 if ( i == 1 &&& j == 1 )

16 p r i n t f ( " i und j h a b e n b e i d e den w e r t 1\ n " ) ; 17 if ( ! ( i < 1) && j > -1 )

18 p r i n t f ( " i und j s i n d b e i d e g r o e s s e r als 0\ n " ) ;

19 }

Zeile Fehler Erl¨auterung Korrektur

(5)

Programm mit Korrekturen:

1 # i n c l u d e < s t d i o . h >

2

3 int m a i n ( int argc , c h a r ** a r g v )

4 {

5 int i , j , k ;

6 /* e i n l e s e n von W e r t e n f u e r i , j und k */

7 if ( i == 1 && j == 1 )

8 p r i n t f ( " i und j h a b e n b e i d e den w e r t 1\ n " ) ; 9 if ( i == 1 && ( j == 1 || k > 0) )

10 p r i n t f ( " i ist 1 und g l e i c h z e i t i g j g l e i c h 1 o d e r k p o s i t i v \ n " ) ;

11 if ( i >= 1 )

12 p r i n t f ( " i ist g r o e s s e r o d e r g l e i c h 1\ n " ) ;

13 if ( i == 1 )

14 p r i n t f ( " i hat den w e r t 1\ n " ) ; 15 if ( i == 1 && j == 1 )

16 p r i n t f ( " i und j h a b e n b e i d e den w e r t 1\ n " ) ; 17 if ( ! ( i < 1) && j > 0 )

18 p r i n t f ( " i und j s i n d b e i d e g r o e s s e r als 0\ n " ) ;

19 }

(6)

Teil IV: Anwendungen

Aufgabe 1: Werte logischer Ausdr¨ ucke

Welche Bedeutung und Werte haben bzw. liefern die folgenden logischen Ausdr¨ucke? In allen F¨allen sind i = 1, j = 2 und n = 0 Variablen vom Typ int und haben in allen F¨allen die angegebenen drei Werte. ¨Uberlege dir erst das Ergebnis und ¨uberpr¨ufe es erst anschließend anhand eines kleinen eigenen Programms. Beispiel f¨ur die erste Aufgabe:

1 # i n c l u d e < s t d i o . h >

2

3 int m a i n ( int argc , c h a r ** a r g v )

4 {

5 int i = 1 , j = 2 , n = 0;

6 p r i n t f ( " E r g e b n i s : % d \ n " , i > 2 ) ;

7 }

Ausdruck Ergebnis Bedeutung

i > 2. . . . 0/

”falsch“ i ist gr¨oßer als 2 i < 2. . . . 1/

”wahr“ i ist kleiner als 2 i < 2 && n == 0. . . . 1/

”wahr“ i ist kleiner als 2 und n ist null i. . . . 1/

”wahr“ i ist ungleich null (

”wahr“)

! i. . . . 0/

”falsch“ i hat den Wert null (

”falsch“)

! n. . . . 1/

”wahr“ n hat nicht den Wert

”wahr“

i == 1 && j. . . . 1/

”wahr“ i hat den Wert 1 und j ist

”wahr“

i > 2 || n == 0. . . . 1/

”wahr“ i ist gr¨oßer als 2 oder n hat den Wert 0 i > 2 || j == 2. . . . 1/

”wahr“ i ist gr¨oßer als 2 oder j hat den Wert 2 i && ! n. . . . 1/

”wahr“ i ist

”wahr“ und n ist

”falsch“

i == 2 && (j == 1 || n == 1) 0/ falsch“ ihat den Wert2und entweder istjgleich

Referenzen

ÄHNLICHE DOKUMENTE

Im Folgenden werden die beiden Pre- und Post-Operatoren innerhalb etwas komplexerer Ausdr¨ ucke verwendet.. Hinweis: Bei der

Im folgenden Programm haben sich in den logischen Ausdr¨ ucken wieder ein paar kleine Fehler eingeschlichen. Die nachfolgende Ausgabeanweisung (printf()) gibt immer an, f¨ ur welche

Da rechts aber eine Variable steht, k¨ onnte man die Ausd¨ ucke schachteln, denn der Wert einer Zuweisung ist das Ergebnis. Das ++ bezieht sich auf j, i wird um den neuen Wert von

W¨ ahlen Sie jeweils Teilmengen von R so als Definitionsbereich und Zielbereich aus, dass durch die Zuordnung x → x 2 + x − 6 eine weder injektive noch surjektive Funktion,

– Two regular expressions may be concatenated; the resulting regular expression matches any string concatenating two substrings that match the subexpressions. – Two regular

– Auch f¨ur komplexere Strukturen als regul¨are Sprachen – G¨angig f¨ur die Beschreibung von Programmiersprachen.. Beispiel: Auszug der Grammatik

In vielen F¨ allen m¨ ochte man, dass ein regul¨ arer Ausdruck an einer Stelle nicht auf ein besonderes Zeichen sondern auf eine ganze Menge von Zeichen passt.. Dies kann durch

Du kannst nach literalen Zeichenketten suchen und weisst, dass bei regul¨ aren Aus- dr¨ ucke standardm¨ assig Gross- und Kleinschreibung unterschieden werden.. Du kannst regul¨