5ABELI + 5ACELI FSST Test (Group A)

2022-12-15

Max. 50 points

Name:

Task Max. Achieved
1 10
2 15
3 10
4 7
5 8
Sum 50
Benotung: >=45: 1, >=39: 2, >=33: 3, >25: 4, <=25: 5
  1. Linux Administration
    1. Für die folgenden Befehle ist es notwendig, Kommandos mit erhöhten Privilegien (Administrationsrechten) auszuführen. Nenne mindestens zwei Möglichkeiten dafür? (2 Punkte)
      sudo $COMMAND oder su und nach Authentifizierung die Kommandos eingeben.
    2. Mit welchen Befehl kann man auf der Kommandozeile unter Debian Linux den kate Editor installieren? (2 Punkte)
      sudo apt install kate
    3. Aktualisiere die Liste der Paketquellen unter Debian Linux. Danach aktualisiere alle auf dem System vorhandenen Programme, sofern es für das System installierbare Aktualisierungen gibt. (4 Punkte)
      sudo apt update
      sudo apt upgrade
    4. Erstelle einen neuen User mit dem Benutzernamen chris (2 Punkte)
      sudo adduser chris
  2. Linux Kommandozeile
    1. Die gerade angemeldete Linux Anwenderin chris befindet sich derzeit im Verzeichnis /var/log/. Welche Befehle muss sie eingeben, um in ihr home Verzeichnis zu wechseln? (1 Punkt)
      cd
    2. Erstelle folgende Verzeichnisbaum. (4 Punkte)
      └── repos
          ├── fyp
          ├── fsst
          └── config
      
      mkdir -p ~/repos/fyp ~/repos/fsst ~/repos/config
    3. Die Benutzerin möchte, dass ihr Verzeichnis ~/homework_3/ in das Verzeichnis ~/repos/fsst/ verschoben wird. (3 Punkte)
      mv ~/homework_3 ~/repos/fsst
    4. Weiters soll das Verzeichnis ~/old/ mit seinem gesamten Inhalt gelöscht werden. (2 Punkte)
      rm -r ~/old
    5. Erstelle das ausführbare Programm hw3 aus der Datei hw3.c. Der Terminal befindet sich bereits im richtigen Verzeichnis. (3 Punkte)
      clang -o hw3 hw3.c
    6. Die erstellte Backupdatei hw3.c~ ist zu löschen. (1 Punkt)
      rm hw3.c~
    7. Abschließend starte das frisch kompilierte Program. (1 Punkt)
      ./hw3
  3. Welcher Text wird durch die folgenden Code Snippets in der C-Programmiersprache auf Standard Output (Terminal) geschrieben? Schreibe den genauen Output des Snippets. Die Snippets werden als Teil von int main(.) ausgeführt und alle notwendigen #includes sind vorhanden. 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 dergleichen aufgerufen wird), so ist "-" als richtige Antwort zu verwenden. (je 2 Punkte)
    1. typedef struct { int x; int y; } Point;
      Point test = {3, 7};
      printf("[%d %d]\n", test.x, test.y);
      [3 7]
    2. int a = 10;
      int* p = &a;
      int** pp = &p;
      **pp /= **pp;
      printf("%d\n", a);
      1
    3. int array[] = {2, 2, 2, 2};
      int* array_ptr = array;
      int count = sizeof(array) / sizeof(int);
      int value = 1;
      while (count--) {
        value *= *array_ptr++;
      }
      printf("%d\n", value);
      16
    4. typedef struct node Node;
      struct node {int value; Node *next;};
      Node* node = (Node*) malloc(sizeof(Node));
      node->value = 123; node->next=NULL;
      Node* head = (Node*) malloc(sizeof(Node));
      head->value = 100; head->next=node;
      printf("%d\n", head->next->value);
      123
    5. char s[] = "Hello";
      char* p = s;
      while (*p) {
        *p = toupper(*p);
        ++p;
      }
      puts(s);
      HELLO
  4. Implementiere eine Funktion
    int max_of_four(int a, int b, int c, int d) in C. Die Funktion soll die größte der vier Zahlen retournieren. Um dies zu vereinfachen, implementiere auch eine Funktion int max(int a, int b), welche das Maximum von zwei Zahlen zurück gibt und von max_of_four(.) verwendet werden muss. (7 Punkte)
    2 Punkte für die korrekten Funktionsnamen und die korrekte Signatur
    2 Punkte für die richtige Implementierung von max(int a, int b)
    3 Punkte für die richtige Implementierung von max_of_four
    int max(int a, int b) {
        if (a > b) return a;
        return b;
    }
    
    int max_of_four(int a, int b, int c, int d) {
        return max(a, max(b, max(c, d)));
    }
  5. Implementiere eine Funktion int* range(size_t count) welche einen Pointer zu einem Array mit den Zahlen von 0 bis count - 1 zurück gibt. Zum Beipiel retourniert range(4) einen Pointer zu einem Array mit den Werten {0, 1, 2, 3}. Falls das Reservieren des Speichers fehlschlägt, ist das auf stdout oder stderr auszugeben. (8 Punkte)
    1 Punkte für die korrekte Funktionssignatur
    2 Punkte für das reservieren des Speichers
    2 Punkt für Fehlermeldung inkl. der notwendigen Abfrage
    2 Punkte für richtige setzen der Werte
    1 Punkt für den return value
    int* range(size_t count) {
      int* a = (int*) malloc(count * sizeof(int));
      if (a == NULL) {
        fprintf(stderr, "Error: could not allocate memory.\n");
      }
      for (size_t i = 0; i < count; ++i) {
        a[i] = i;
      }
      return a;
    }