Aufgabe X-42

a)

Teilaufgabe 1

Geben Sie für den Namen „4224X42” einen Ableitungsbaum an, so dass deutlich wird, dass der Name durch die Grammatik erzeugt werden kann.

S TXT 42TX42 4224X42

S

T

X

T

4

2

T

2

4

4

2

Teilaufgabe 2

Untersuchen Sie, ob durch die Grammatik grundsätzlich nur gültige Namen erzeugt werden und ob damit jeder beliebige gültige Name erzeugt werden kann.

// The previous content of this file has been saved into 
// C:\Users\jatis\AppData\Roaming\Code\User\cs-script.user\new_script.cs.bak 
 
using System;
using System.IO;
using System.Diagnostics;
using static dbg; // for print() extension
using static System.Environment;
 
string besondereNamen(int length){
    if (length % 2 == 0 || length < 3) return "";
 
    char[] firstHalf = new char[(length - 1) / 2];
    char[] lastHalf = new char[(length - 1) / 2];
 
    for (int i = 0; i < (length -1) / 2; i++){
        char pos = zufall(1) == 0 ? '4' : '2';
        firstHalf[i] = pos;
        lastHalf[lastHalf.Length - 1 - i] = pos == '4' ? '2' : '4';
    }
    
    return charArrayToString(firstHalf) + "X" + charArrayToString(lastHalf);
}
int zufall(int max){
    Random rnd = new Random();
    return rnd.Next(max+1);
}
string charArrayToString(char[] arr){
    string str = "";
    foreach (char c in arr){
        str += c;
    }
    return str;
}
 
const int maxTestLength = 20;
Console.WriteLine("Bitte waehlen Sie einen besonderen Namen fuer Ihr Kind aus:");
for (int i = 1; i < maxTestLength; i += 2)
    Console.WriteLine($"Namenslaenge: {i,2}: {besondereNamen(i),maxTestLength}");