Prof. Dr. S.-J. Kimmerle (Vorlesung) Dipl.-Ing. (FH) V. Habiyambere (Übung) Institut BAU-1 Fakultät für Bauingenieurwesen und Umweltwissenschaften Herbsttrimester 2016 Aufgabe 1 (Eine erste Datenstruktur) Programmieren Übung 2 a) Programmieren Sie die in der Vorlesung in Abschnitt 2.3.5 vorgestellte Datenstruktur student. Benutzen Sie hierzu ein Editor-Fenster und speichern diese ab. b) Ergänzen Sie die Datenstruktur um einen weiteren Zweig Matrikelnummer wie in Abb. 2.3 des Skripts angedeutet. Ergänzen Sie bei den beiden bisher angelegten Studenten Mayer und Mustermann jeweils die Matrikel-Nummern 0017001123 und 0017001130. c) Legen Sie einen weiteren Test-Studenten mit fiktiven Daten in der Struktur an. d) Testen Sie ihre Eingaben durch Abrufen verschiedener Daten. Speichern Sie dann Ihr Skript unter Blatt2 Aufgabe1.m. Wir werden in einer späteren Übung zur Objektorientierung darauf zurückkommen. a) student.name.nachname = Mayer ; student.name.vorname = Michael ; student.note.klausur1 = 4.7; student.note.klausur2 = 1.0; student.uebungsschein = Ja ; student(2).name.nachname = Mustermann ; student(2).name.vorname = Markus ; student(2).note.klausur1 = 1.7; student(2).uebungsschein = Nein ; b) Man beachte, dass man jetzt auf student(1) zugreifen muss und student allein nicht mehr funktioniert (wie noch in a)), da es jetzt ja bereits 2 Datensätze gibt. student(1).matrikelnummer = 0017001123 ; student(2).matrikelnummer = 0017001130 ; 1
c) Hier folgt man analog den Schritten in a) und b). Aufgabe 2 (Wahrheitstafel) Man definiere zwei logische Variablen Wahr and Falsch. Wie in Matlab üblich wird Wahr der Wert 1 und Falsch der Wert 0 zugewiesen. Benutzen Sie dazu die in Matlab vorgegebene Funktion boolean. Berechnen Sie für die logischen Operatoren UND (a && b), ODER (a b) und XOR (exklusives Oder: xor(a, b)) alle verschiedenen Kombinationen. Beispiel: Für UND hat man zu betrachten: Wahr && Wahr, Wahr && Falsch, Falsch && Wahr, Falsch && Falsch. Versuchen Sie Ihre Ausgabe wie in einer sogenannten Wahrheitstafel formatiert zu gestalten. Wir definieren zuerst Wahr = boolean(1) Falsch = boolean(0) Eine Wahrheitstafel lautet dann z.b. für XOR fprintf( a XOR b Wahr Falsch \n ) fprintf( Wahr %d %d \n, xor(wahr, Wahr), xor(wahr, Falsch)) fprintf( Falsch %d %d \n, xor(falsch, Wahr), xor(falsch, Falsch)) Für die anderen Fälle muss man den Operator entsprechend ersetzen. Aufgabe 3 (Matrizen und Vektoren) Berechnen Sie Sinus und Kosinus von 0 bis 2π in Schritten von π/6. Gehen Sie dazu folgendermaßen vor: a) Definieren Sie einen Zeilenvektor namens alpha, der die Winkel von 0 bis 2π in Schritten von π/6 enthält (in Bogenmaß). b) Berechnen Sie Sinus und Kosinus zu dem Winkel-Vektor alpha. Weisen Sie die Ergebnisse den Variablen si und co zu. c) Fassen Sie die Winkel alpha und die berechneten Stützstellen si und co in einer Matrix M in dieser Reihenfolge spaltenweise zusammen. d) Welche Dimension hat die Matrix? e) Plotten Sie die berechneten Näherungen si und co in ein gemeinsames Fenster. 2
f) Indizieren Sie von den letzten beiden Zeilen der Matrix M die Spalten 1 und 3 und weisen diese einer Untermatrix UM zu. a) >> alpha = 0:pi/6:2*pi alpha = 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416... 3.6652 4.1888 4.7124 5.2360 5.7596 6.2832 b) >> si = sin(alpha) si = 0 0.5000 0.8660 1.0000 0.8660 0.5000... 0.0000-0.5000-0.8660-1.0000-0.8660-0.5000-0.0000 >> co = cos(alpha) co = 1.0000 0.8660 0.5000 0.0000-0.5000-0.8660... -1.0000-0.8660-0.5000-0.0000 0.5000 0.8660 1.0000 c) >> M = [alpha si co ] M = 0 0 1.0000 0.5236 0.5000 0.8660 1.0472 0.8660 0.5000 1.5708 1.0000 0.0000 2.0944 0.8660-0.5000 2.6180 0.5000-0.8660 3.1416 0.0000-1.0000 3.6652-0.5000-0.8660 4.1888-0.8660-0.5000 4.7124-1.0000-0.0000 5.2360-0.8660 0.5000 5.7596-0.5000 0.8660 6.2832-0.0000 1.0000 d) >> size(m) 13 3 e) >> plot(alpha, si, alpha, co) 3
1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 0 1 2 3 4 5 6 7 f) >> UM = M(end-1:end, [1 3]) UM = 5.7596 0.8660 6.2832 1.0000 Aufgabe 4 (Maximum und Minimum) Schreiben Sie ein eigenes Skript, dass das Maximum und das Minimum zu einem gegebenen Vektor a mit 10 Komponenten ermittelt. Testen Sie Ihr Programm an folgendem Vektor a = [3.3 4.4-0.2 6.0-10.33 5.2 7.0 -.2 4.0 8.1] und auch an weiteren Vektoren (mit 10 Komponenten). Finden Sie heraus, welche Befehle Matlab hierzu zur Verfügung stellt und vergleichen Sie. Das Skript min = a(1); a(1); for j=2:10 if a(j) > max a(j) end if a(j) < min min = a(j) end end fprintf( Das Maximum in Vektor a ist %.4f, das Minimum ist %.4f. \n, max, min); 4
liefert folgende Ausgabe: >> Blatt2_Aufgabe3 4.4000 min = -0.2000 6 min = -10.3300 7 8.1000 Das Maximum in Vektor a ist 8.1000, das Minimum ist -10.3300. Mit den Matlab-Befehlen max() und min() findet man dasselbe Ergebnis. Aufgabe 5 (Auflistung durch eine Schleife) Geben Sie eine formatierte Liste mit allen Binärzahlen und Hexadezimalzahlen, die den Dezimalzahlen von 0 bis 30 entsprechen, aus. Benutzen Sie dazu eine for-schleife, dec2bin(), dec2hex() und fprintf(). Beachten Sie dabei, dass dec2bin() und dec2hex() Zeichenketten zurückliefern. Können Sie Ihren Code so umschreiben, dass eine while-schleife verwendet wird? fprintf( Dezimal Binär Hexadezimal \n ); for i=1:50 fprintf( %2d %6s %2s \n, i, dec2bin(i), dec2hex(i)); end; Mit einer while-schleife lautet der Code fprintf( Dezimal Binär Hexadezimal \n ); i = 0; while i <= 50 fprintf( %2d %6s %2s \n, i, dec2bin(i), dec2hex(i)); i = i+1; end; 5
Aufgabe 6 (Überlauf) Die Matlab-Standardfunktion bin2dec() wandelt Binärzahlen in Dezimalzahlen um. Berechnen Sie mit Hilfe dieser Funktion die größte positive Zahl für die Datentypen int8 (8 bit) und int16 (16 bit)! Denken Sie daran, daß eine Bitposition für das Vorzeichen (+ oder -) steht. >> bin2dec( 111111 ) 127 >> 2^7-1 127 >> bin2dec( 111111111111111 ) 32767 >> 2^15-1 32767 Bearbeitung der Aufgaben in der Übung am 21.10.2016 bzw. am 28.10.2016. 6