3BHEL FSST Test (Group A)

2022-11-23

Max. 32 points

Name:

Task Max. Achieved
1 6
2 12
3 6
4 8
Sum 32
Benotung: >=29: 1, >=25: 2, >=21: 3, >16: 4, <=16: 5
  1. Linux Administration
    1. Aktualisiere die Liste der Paketquellen unter Debian Linux. Danach aktualisiere alle auf dem System vorhandenen Programme, sofern es für das System installalierbare Aktualisierungen gibt. (2 Punkte)
      sudo apt update
      sudo apt upgrade
    2. Mit welchem Befehl kann man auf der Kommandozeile unter Debian Linux den g++ Compiler für C++ installieren? (2 Punkte)
      sudo apt install g++
    3. Erstelle einen neuen User mit dem Benutzernamen pat (2 Punkte)
      sudo adduser pat
  2. Linux Kommandozeile
    1. Eine gerade angemeldete Linux Anwenderin befindet sich derzeit im Verzeichnis /etc. Welche Befehle muss sie eingeben, damit der folgende Verzeichnisbaum in Ihrem Home Verzeichnis angelegt wird? (4 Punkte)
      └── code
          ├── python
          ├── cpp
          └── rust
      
      mkdir -p ~/code/python ~/code/cpp ~/code/rust
      Alternatively, switch to home via `cd` first and skip the `~/`. It is also possible to create each directory on a separate line. If ~/repos is created separately first, the -p flag can be omitted.
    2. Die Benutzerin möchte, dass ihr Verzeichnis ~/secrets/ auf ~/private/ umbenannt wird. (2 Punkte)
      mv ~/secrets ~/private
    3. Weiters bittet die Nutzerin dich darum, in ihrem Home Verzeichnis ein neues Verzeichnis mit dem Namen fsst anzulegen. (1 Punkt)
      mkdir ~/fsst
    4. Nachdem die Benutzerin ein kleines C++ Programm geschrieben und in ihrem ~/fsst Verzeichnis gespeichert hat, bittet sie um Hilfe, ihr das Programm solver aus ihrer Quelldatei solver.cpp zu erstellen. Sie möchte dabei dezitiert, dass der GNU C++ Compiler verwendet wird.
      Der Terminal ist derzeit im Home Verzeichnis der Benutzerin geöffnet. Bitte helfen Sie ihr mit den korrekten Befehlen. (3 Punkte)
      cd fsst
      g++ -o solver solver.cpp
    5. Sie bittet darum, die erstellte Backupdatei solver.cpp~ löschen. Der Terminal befindet sich bereits im richtigen Verzeichnis. (1 Punkt)
      rm solver.cpp~
    6. Abschließend will die Benutzerin, dass das erstellte Program solver gestartet wird. (1 Punkte)
      ./solver
  3. Welcher Text wird durch die folgenden Miniprogramme in der C++-Programmiersprache auf Standard Output (Terminal) geschrieben? Schreibe den genauen Output des Snippets. Wenn das Snippet nicht kompilierbar ist oder zu einem Absturz führen würde, so ist das Wort “ERROR” als Antwort zu geben. Erzeugt das Snippet keinen Output (wenn beispielsweise kein printf oder cout oder dergleichen aufgerufen wird), so ist "-" als richtige Antwort zu verwenden. (je 2 Punkte)
    1. #include <iostream>
      
      int main() {
        int i = 3;
        int& j = i;
        j++;
        std::cout << i << " " << j << std::endl;
        return 0;
      }
      4 4
    2. #include <iostream>
      #include <vector>
      
      int main() {
        std::vector<int> numbers = {3, 9, 1, 12};
        std::cout << numbers[3] << std::endl;
        return 0;
      }
      12
    3. #include <iostream>
      #include <vector>
      
      int main() {
        std::vector<std::string> names = {"Pat", "Chris", "Sue"};
        for (const auto& name : names) {
          std::cout << name << " ";
        }
        return 0;
      }
      Pat Chris Sue
  4. Implementiere eine Funktion
    void quadratic(double a, double b, double c) in C++. Die Funktion soll die beiden Nullstellen der quadratischen Funktion ax2+bx+c=0 auf stdout schreiben. Die Formel dazu lautet: x1,2=b±b24ac2a Die Werte sollen mit einer fixen Präzision von 2 Stellen nach dem Dezimaltrennzeichen ausgegeben werden. Die notwendigen Header (cmath, iomanip und iostream) dürfen als gegeben angenommen werden. Die Ausgabe soll genau dem folgenden Beispiel folgen:
    x1: 2.00
    x2: -3.00
    Die Möglichkeit, einen negativen Wert unter der Wurzel zu erhalten kann ignoriert werden. Ignorieren Sie ebenso die Möglichkeit einer Division durch Null. (8 Punkte)
    1 Punkt den korrekten Funktionsnamen und die korrekte Signatur
    1 Punkt für die Berechnung der Wurzel
    je 1 Punkt für die Berechnung von x1 und x2
    1 Punkt für fixed
    1 Punkt für setprecision(2)
    2 Punkte für die korrekte Ausgabe
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    
    void quadratic(double a, double b, double c) {
      double root = sqrt(b * b - 4 * a * c);
      double x1 = (-b + root) / (2 * a);
      double x2 = (-b - root) / (2 * a);
      std::cout << std::fixed << std::setprecision(2);
      std::cout << "x1: " << x1 << std::endl;
      std::cout << "x2: " << x2 << std::endl;
    }
    
    int main() {
      quadratic(1, -2, 1);
      return 0;
    }