Witam. Pomoże ktoś rozwiązać taki problem: Program, który wypisze na ekranie n łańcuchów z języka opisanego za pomocą gram bezkontekstowej:
S->aB|bA A->a|As|bAA B ->b|bS|aBB
Proszę o pomoc.
Ale dowolnych? Jakich n słów? W kolejności rosnących długości?
Samo zadanie trywialne. Zdefiniuj sobie każy nieterminal jako funkcje która zwraca ci odpowiedni ciąg, np:
string S(){
if(rand()%2){
return "a"+B();
}else{
return "b"+A();
}
}
string A(){
choice = rand()%3;
if(choice == 0){
return "a";
}else if(choice ==1){
return A()+"s";
}else{
return "b"+A()+A();
}
}
To jest chyba najbardziej oczywista implementacja, przy założeniu że chcesz wypisać sobie losowe słowa. Analogicznie dopisz sobie B() a potem wypisz S() w pętli.
http://ideone.com/29joBN
Ale to jest C++, w C musisz wywalić "string" i bawić się w ręczne alokowanie pamięci na tablice znaków. No i ten kod wypisuje zupełnie losowe słowa z tego języka. Nad wypisywaniem w kolejności musisz trochę pomyśleć.
A jakie to ma niby znaczenie? o_O Czy ty w ogóle rozumiesz gdzie w tym zadaniu jest "trudność"? Bo mam wrażenie że nie za bardzo. Biorąc pod uwagę fakt że nie umiałes doprowadzić tego do stanu "kompiluje się" to szczerze wątpię żebyś był w stanie to zadanie rozwiązać.
Zrób sobie takie ćwiczenie na kartce: weź tą gramatykę i ręcznie wypisz sobie rozwiązanie dla n=10 czy n=15 i zobacz w jaki sposób to robisz.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.