Full Transcript

Fakultät Informatik Professur für Systems Engineering Klausur Programmierung – Sommersemester 2023 Prof. Dr. Christof Fetzer 07. August 2023 Persönliche Daten personal details Name: Vorname: Matrikel-Nr.: last name first n...

Fakultät Informatik Professur für Systems Engineering Klausur Programmierung – Sommersemester 2023 Prof. Dr. Christof Fetzer 07. August 2023 Persönliche Daten personal details Name: Vorname: Matrikel-Nr.: last name first name matriculation number Studiengang degree program ⬜ Bachelor Informatik ⬜ Bachelor Medieninformatik ⬜ Diplom Informatik ⬜ Informationssystemtechnik ⬜ Mathematik ⬜ Physik ⬜ Bachelor Medienforschung ⬜ Hinweise – Bitte Studentenausweis und Lichtbildausweis zur Kontrolle während der Klausur bereitlegen. – Die Bearbeitungszeit beträgt 90 Minuten. – Verwenden Sie nur urkundenechte Schreibgeräte, bspw. Kugelschreiber, in blauer oder schwar- zer Farbe. Klausuren, die mit Bleistift geschrieben sind, werden nicht angenommen. – Nutzen Sie die freien Felder zum Beantworten der Fragen. Schreiben Sie auf etwaige extra Lö- sungsblätter Name und Matrikelnummer. – Aufgabenblätter und etwaige extra Lösungsblätter sind zum Ende der Bearbeitungszeit als Paket abzugeben. Falten Sie die Aufgabenblätter in der Mitte auf DIN-A5-Format und legen Sie Ihre Lösungen hinein. – Hilfsmittel, bis auf ein beidseitig beschriebenes A4-Blatt, sind nicht zugelassen, insbesondere keine Bücher oder Taschenrechner. – Kommunikationsgeräte (Mobiltelefone, Smartwatches,... ) sind auszuschalten und außer Reich- weite zu verstauen. Hörgeräte und Hörprothesen sind davon ausgenommen. Mit meiner Unterschrift bestätige ich, diese Hinweise gelesen und verstanden zu haben. Unterschrift Aufgabe 1 2 3 4 5 6 ∑ Punkte 12 12 13 9 4 12 62 Erzielt Note: TU Dresden Professur für Systems Engineering 07.08.2023 Aufgabe 1 – Variablen, Operatoren, Anweisungen 1.1 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 fn main() { 2 let x = 1; 3 { 4 let x = x * 3; 5 println!("x1 is: {}", x); 6 let x = 6; 7 } 8 println!("x2 is: {}", x); 9 let x = 2; 10 println!("x3 is: {}", x); 11 } Lässt sich der gezeigte Code kompilieren? Begründen Sie Ihre Antwort und erläutern Sie die Ausgabe. 1.2 (3 P) Welche Ausgabe erzeugt der folgende Code? Evaluieren Sie kurz den Programmablauf und gehen Sie dabei auf die Funktionsweise des gewählten Zweiges ein. 1 fn main() { 2 if (1 < 0) && (0 < -1) { 3 println!("Pass"); 4 } else if (1 > 0) | false { 5 println!("Fail"); 6 } else { 7 println!("Educative"); 8 } 9 } Klausur Programmierung Sommersemester 2023 2 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 1.3 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 fn main(){ 2 let variable: (mut &str, u32) = ("hello", 65000); 3 } Lässt sich der gezeigte Code kompilieren? Begründen Sie Ihre Antwort und erläutern Sie die Ausgabe. 1.4 (3 P) Welche Ausgabe erzeugt der folgende Code? Erklären Sie kurz die benutzten Operatoren in Zeile 3. 1 fn main() { 2 const ONE: i32 = 1; 3 println!("{}", ONE SportsItems { 6 let sports_items = SportsItems { 7 rackets: sports_items.rackets * 2, 8 balls: sports_items.balls * 3, 9 }; 10 sports_items 11 } 12 fn new_sports_items() -> SportsItems { 13 let sports_items = SportsItems { 14 rackets: 10, 15 balls: 5, 16 }; 17 sports_items 18 } 19 fn print_sports_items(sports_items: SportsItems) { 20 println!( 21 "You have {} rackets and {} balls", 22 sports_items.rackets, sports_items.balls 23 ); 24 } 25 fn main() { 26 let sports_items = new_sports_items(); 27 let sports_items = increase_sports_items(sports_items); 28 print_sports_items(sports_items); 29 } a) Welche Ausgabe wird hier erzeugt? b) Beschreiben Sie die Handhabung von Objekten, Parametern und Rückgabewerten der Funktio- nen new_sports_items() und increase_sports_items(). Klausur Programmierung Sommersemester 2023 5 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 Aufgabe 3 – Traits, Lifetime, Ownership 3.1 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 trait Float { 2 fn float(&self) -> Self; 3 } 4 impl Float for i32 { 5 fn float(&self) -> Self { 6 self * 3 7 } 8 } 9 impl Float for i64 { 10 fn float(&self) -> Self { 11 self * 2 12 } 13 } 14 fn main() { 15 println!("{}", 5_i32.float()); 16 println!("{}", 5_i64.float()); 17 } Lässt sich der gezeigte Code kompilieren? Begründen Sie Ihre Antwort und erläutern Sie die Ausgabe. 3.2 (3 P) Lifetime Elision Rules (Regeln zum Abschätzen der Lebensdauer von Variablen) Schreiben Sie die erste Regel auf. Verwenden Sie ggf. ein Beispiel. Schreiben Sie die zweite Regel auf. Verwenden Sie ggf. ein Beispiel. Schreiben Sie die dritte Regel auf. Verwenden Sie ggf. ein Beispiel. Klausur Programmierung Sommersemester 2023 6 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 3.3 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 pub mod chapter { 2 pub mod lesson { 3 pub fn summary() { 4 println!("Summary"); 5 } 6 pub mod heading { 7 pub fn illustration() { 8 println!("Content visualization"); 9 } 10 } 11 } 12 } 13 use chapter::lesson; 14 use chapter::lesson::heading; 15 16 fn main() { 17 lesson::summary(); 18 heading::illustration(); 19 } Lässt sich der gezeigte Code kompilieren? Begründen Sie Ihre Antwort und erläutern Sie die Ausgabe. 3.4 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 fn main() { 2 let a = String::from("Rust"); 3 let b = a; 4 println!("a:{} , b:{}", a, b); 5 } Lässt sich der gezeigte Code kompilieren? Begründen Sie Ihre Antwort. Beschreiben Sie kurz den Ablauf, die Ausgabe sowie mögliche Korrekturen, ohne Zeilen zu entfer- nen. Klausur Programmierung Sommersemester 2023 7 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 3.5 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 fn main() { 2 let a = 5; 3 let b = &a; 4 let mut c = b; 5 c = 20; 6 println!("{}", c); 7 } Lässt sich der gezeigte Code kompilieren? Welche Ausgabe erzeugt der gezeigte Code? Begründen Sie Ihre Antwort und geben Sie ggf. notwendige Korrekturen an, ohne Zeilen zu entfer- nen. 3.6 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 struct Structure { 2 reference: &u8, 3 } 4 fn main() { 5 let value = 10; 6 let obj = Structure { reference: &value }; 7 } Lässt sich der gezeigte Code kompilieren? Welche Ausgabe erzeugt der gezeigte Code? Begründen Sie Ihre Antwort und geben Sie ggf. notwendige Korrekturen an, ohne Zeilen zu entfer- nen. Klausur Programmierung Sommersemester 2023 8 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 Aufgabe 4 – Smart Pointer 4.1 (1 P) Was genau ist ein Smart Pointer? 4.2 (1 P) Worin bestehen die Unterschiede zwischen Smart Pointer und regulären Referenzen in Rust? 4.3 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 fn main() { 2 let mut a: i32 = 23; 3 println!("{}", a); 4 a = 24; 5 println!("{}", a); 6 7 let mut b = OO a); 8 println!("{}", OO b); 9 b = &25; 10 println!("{}", OO b); 11 12 let mut c = Box::new(b); 13 println!("{}", OO c); 14 OO c = &26; 15 println!("{}", OO c); 16 } Füllen Sie ggfs. die markierten Lücken so, dass der Code kompiliert. Welche Ausgaben erzeugt der gezeigte Code? Klausur Programmierung Sommersemester 2023 9 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 4.4 (2 P) Smart Pointer sehen auf den ersten Blick aus wie reguläre Referenzen und zeigen gleiches Verhal- ten, bspw. in Verbindung mit println!. Wie genau wird dieses Verhalten in Rust erreicht und umge- setzt? 4.5 (3 P) Für das Teilen von Daten via Smart Pointer gibt es unterschiedliche Typen. Erläutern Sie kurz die Unterschiede zwischen den Typen Box, RefCell sowie Rc und nennen Sie deren Einsatzzwecke. Klausur Programmierung Sommersemester 2023 10 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 Aufgabe 5 – Collections 5.1 (2 P) Analysieren Sie folgendes Code-Beispiel: 1 use std::collections::HashMap; 2 fn main() { 3 let mut scores = HashMap::new(); 4 scores.insert("Sunface", 98); 5 scores.insert("Daniel", 95); 6 scores.insert("Ashley", 69); 7 scores.insert("Katie", 58); 8 // Get returns an Option 9 let score = scores.get("Sunface"); 10 assert_eq!(score, Some(&98)); 11 if scores.contains_key("Daniel") { 12 // Indexing returns a value V 13 let score = scores["Daniel"]; 14 assert_eq!(score, OOOOOO ); 15 scores.remove("Daniel"); 16 } 17 assert_eq!(scores.len(), OOOOOO ); 18 for (name, score) in scores { 19 println!("The score of {} is {}", name, score); 20 } 21 } Füllen Sie die markierten Lücken so, dass der Code ausgeführt werden kann. 5.2 (2 P) Erklären Sie kurz die Unterschiede zwischen den beiden Methoden and_modify() und or_insert() beim Editieren einer HashMap mittels der Methode entry(). Klausur Programmierung Sommersemester 2023 11 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 Aufgabe 6 – Trivia 6.1 (1 P) Bewerten Sie die folgende Aussage mit richtig oder falsch: Const-Variablen können global und lokal deklariert werden, let-Variablen jedoch nur im lokalen Bereich. 0 Richtig 0 Falsch 6.2 (1 P) Bewerten Sie die folgende Aussage mit richtig oder falsch: Tupel sind homogene Datentypen und Arrays sind heterogene Datentypen. 0 Richtig 0 Falsch 6.3 (1 P) Bewerten Sie die folgende Aussage mit richtig oder falsch: Eine Variable kann durch Nutzung eines Dereferenzierungsoperators aktualisiert werden, wenn es sich um eine unveränderliche Referenz handelt. 0 Richtig 0 Falsch 6.4 (3 P) Erklären Sie kurz die Begriffe und Unterschiede von static dispatch und dynamic dispatch und geben Sie an welche Methode im Allgemeinen schneller ist. 6.5 (3 P) Welche Methoden können für das Iterieren über eine Collection genutzt werden? Nennen Sie die drei Methoden und listen Sie die Unterschiede in der jeweiligen Funktionsweise auf. Klausur Programmierung Sommersemester 2023 12 / 13 TU Dresden Professur für Systems Engineering 07.08.2023 6.6 (3 P) Ihre Aufgabe besteht darin, eine Verwaltungssoftware für Studenten und Mitarbeiter einer Univer- sität zu implementieren, die folgenden Entitäten enthält: Studenten, Professoren und Mitarbeiter. Im Folgenden sind einige Eigenschaften und Funktionalitäten des Systems beschrieben. Nennen Sie das jeweilige OOP-Prinzip welches zur Anwendung kommen kann und das dazugehöri- ge Sprachkonstrukt in Rust. Weil Professoren ebenfalls Mitarbeiter sind, besitzen Sie die gleiche Grundfunktionalität wie Mit- arbeiter. Die Abfrage, ob ein Student für die Diplomarbeit zugelassen wird, involviert das Iterieren über alle Kurse und ob diese bestanden sind. Es soll nicht auf intere Datenstrukturen (bspw. Kursliste) von aussen zugegriffen werden können. Die Gehaltsaberechnung (Methode) ist bei allen Mitgliedern der Universität unterschiedlich, weil bspw. SHK-Verträge über Stunden und nicht pauschal pro Monat berechnet werden. Klausur Programmierung Sommersemester 2023 13 / 13

Use Quizgecko on...
Browser
Browser