Aufgabe X-42
Material
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
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}");