2CHEL FSST Test (Group A)

2024-11-19

Max. 100 points

Name:

Task Max. Achieved
1 15
2 5
3 25
4 25
5 30
Sum 100
Grading: >= 88: 1, >=76: 2, >=64 : 3, >50: 4, <=50: 5
  1. Answer the following statements indicating whether they are True or False.
    0-3 correct: 0 points, 4 correct: 5 points, 5 correct: 10 points, 6 correct: 15 points.
    Statement True False
    Elemente eines C-Arrays werden im Speicher konsekutiv (fortlaufend) abgelegt.
    Wird ein C-Array an eine Funktion übergeben, so kann diese die Anzahl der Elemente mit sizeof ermitteln.
    Ein C-String basiert auf einem C-Array.
    Das letzte Element eines C-Strings ist das Terminator Zeichen (\t).
    Es ist ohne weiteres möglich, einen Array in einer Funktion anzulegen und diesen danach zurückzugeben.
    Seit C99 ist es möglich, die Größe eines Arrays ohne weiteres während der Laufzeit festzulegen.
  2. Eine C Quellcodedatei namens optimizer.c soll mittels clang auf der Kommandozeile kompiliert werden. Die ausführbare Datei soll den Namen optimizer bekommen. Welches Kommando mit welchen Argumenten muss dazu verwendet werden? (5 Punkte)
    clang optimizer.c -o optimizer
  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, zu einem Absturz führen würde oder der Output undefiniert ist, 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 5 Punkte)
    1. #include <stdio.h>
      int main() {
        int numbers[] = {0, 1, 2, 3};
        printf("numbers has %zu elements\n", sizeof(numbers) / sizeof(int));
        return 0;
      }
      numbers has 4 elements
    2. #include <stdio.h>
      int main() {
        char text[] = "Hello";
        printf("text has %zu characters\n", sizeof(text));
        return 0;
      }
      text has 6 characters
    3. #include <stdio.h>
      void f(char message[]) {
        puts(message);
      }
      int main() {
        char text[] = "Programming is fun!";
        f(text);
        return 0;
      }
      Programming is fun!
    4. #include <stdio.h>
      int main() {
        char text1[] = "success";
        char text2[] = "success";
        if (text1 == text2) {
          puts("success");
        }
        return 0;
      }
      -
    5. #include <stdio.h>
      int main() {
        char string[] = "test";
        char destination[] = string;
        puts(destination);
        return 0;
      }
      ERROR
  4. Compare Strings
    Schreibe eine Funktion bool is_equal(const char first[], const char second[]) welche zurück gibt, ob first und second den gleichen Text beinhalten. Zum Beispiel
    char text1[] = "foo";
    char text2[] = "foo";
    char text3[] = "bar";
    is_equal(text1, text2);  // returns `true`
    is_equal(text1, text3);  // returns `false`
    Die C Standard Bibliothek darf (außer <stdbool.h>) nicht verwendet werden. (25 Punkte)
    5 Punkte für die Funktionssignatur
    5 Punkte für eine passende Variable
    5 Punkte für eine korrekte Schleifenbedingung + Inkrement
    5 Punkte für korrekte Abfrage
    5 Punkte für den korrekten Rückgabewert
    bool is_equal((const char first[], const char second[]) {
      size_t i = 0;
      for (; first[i]; ++i) {
        if (first[i] != second[i]) {
          return false;
        }
      }
      return first[i] == second[i];  // ensure `second` isn't longer than `first`
    }
  5. Implementiere eine Funktion int calc_span(const int array[], size_t dimension) welche die Differenz zwischen Maximum und Minimum in dem Array zurück gibt. Zum Beispiel
    int array[] = {1, -3, 2, 9, 7};
    calc_span(array, 5);  // returns max - min = 9 - (-3) = 12
    Es darf angenommen werden, dass der Array immer mindestens ein Element beinhaltet. (30 Punkte)
    5 Punkte für die Funktionssignatur
    5 Punkte für das richtige Initialisieren von Minimum und Maximum
    5 Punkte für eine korrekte Schleifen inkl. Inkrement
    5 Punkte für das Korrekte Aktualisieren des Minimums
    5 Punkte für das Korrekte Aktualisieren des Maximums
    5 Punkte für den korrekten Rückgabewert
    int calc_span(const int array[], size_t dimension) {
      int min = array[0];
      int max = array[0];
      for (size_t i = 1; i < dimension; ++i) {
        if (array[i] < min) min = array[i];
        if (array[i] > max) max = array[i];
      }
      return max - min;
    }