Witam , pewnie nie jeden z Was juz to kiedys przerabial , mysle ze poradze sobie z reszta problemu za pomoca Stacku , gdy bede wiedzial jak z wyrazenia ( ReadLine) "wychwycic " nawiasy . Poki co nie wpadlem jeszcze na zaden konkretny pomysl od kilku godzin , stad moj watek . Z gory dzieki za pomoc . pozdrawiam !
Jak już zakładasz post to pisz dokładniej o co chodzi. Co chcesz dokładnie osiągnąć? te "wyrażenie" (ReadLine) to jest string? czy chodzi Ci o metodę ReadLine np. klasy Console. Jeżeli chodzi o stringa = "(ReadLine)" to chcesz znaleźć indeks w którym znajduje się ten nawias?. No z tego co napisałeś to nie wiadomo co chcesz osiągnąć.
sorry ,zle napisalem .
W stringu wpisanym przez uzytkownika program ma zadanie sprawdzic czy zawiera on nawiasy i ewentualnie wypisac na konsole czy to wyrazenie jest poprawne ( liczba nawiasow jest poprawna matematycznie )
Tak na szybko (jeśli dobrze zrozumiałem i zakładam że dopiero się uczysz programowania):
string expression, pattern = "(|)";
int counter = 0;
Console.Write("Podaj string: ");
expression = Console.ReadLine();
Regex regex = new Regex(pattern);
MatchCollection matchCollection = regex.Matches(expression);
foreach (var match in matchCollection)
{
counter++;
}
if (counter % 2 == 0)
{
Console.WriteLine("Podany string posiada pary nawiasów.");
}
else
{
Console.WriteLine("Podany string ma błędną ilość nawiasów.");
}
Console.ReadLine();
Daniel M napisał(a):
sorry ,zle napisalem .
W stringu wpisanym przez uzytkownika program ma zadanie sprawdzic czy zawiera on nawiasy i ewentualnie wypisac na konsole czy to wyrazenie jest poprawne
Sprawdź w pętli każdy znak od pierwszego do ostatniego w stringu podanym przez użytkownika. Zmienną liczbową, której początkowa wartość to 0, zwiększaj o 1, jeśli znak to '(', i zmniejszaj o 1, jeśli znak to ')'. Jeśli po zakończeniu pętli zmienna ma wartość 0 i pierwszym nawiasem jest nawias otwierający, to znaczy, że walidacja zakończyła się pozytywnie.
Daniel M napisał(a):
sorry ,zle napisalem .
W stringu wpisanym przez uzytkownika program ma zadanie sprawdzic czy zawiera on nawiasy i ewentualnie wypisac na konsole czy to wyrazenie jest poprawne ( liczba nawiasow jest poprawna matematycznie )
Liczba nawiasów jest poprawna matematycznie [a poprawna nie matematycznie?:)], czy nawiasy mają być zbalansowane. Bo w pierwszym przypadku wytarczy je policzyć, a w drugim nie, bo ciąg może być taki: ())(
, liczba się zgadza, ale nie jest poprawny. Chcesz pseudokod? Rozumiem, że jest tylko jeden rodzaj nawiasów.
EDIT: Dobra, Myślałeś, Myślałeś i się Poddałeś, prosząc to forum szyderców o pomoc:). To mała podpowiedź, tak Użyj LIFO, jak widzi nawias lewy, to push, a jak prawy to...?:) i gotowe.
Burmistrz napisał(a):
Daniel M napisał(a):
sorry ,zle napisalem .
W stringu wpisanym przez uzytkownika program ma zadanie sprawdzic czy zawiera on nawiasy i ewentualnie wypisac na konsole czy to wyrazenie jest poprawneSprawdź w pętli każdy znak od pierwszego do ostatniego w stringu podanym przez użytkownika. Zmienną liczbową, której początkowa wartość to 0, zwiększaj o 1, jeśli znak to '(', i zmniejszaj o 1, jeśli znak to ')'. Jeśli po zakończeniu pętli zmienna ma wartość 0 i pierwszym nawiasem jest nawias otwierający, to znaczy, że walidacja zakończyła się pozytywnie.
hej , dzieki za odpowiedz !
dopiero zaczynam przygode z programowaniem i chodzi mi wlasnie o ta instrukcje dla kodu ktora sprawdza kazdy znak w petli , oraz ta ktora wykrywa znaki
"(", ")" w zeszytach i kursach c# ze studiow do tej pory byly same podstawy i wlasnie opierajac sie na kodzie dla poczatkujacych powinienem rozwiazac to zadanie. Wiem , ze wielu z Was programistow mysli juz bardziej" zaawansowanym kodem " , ale mysle ,ze to zadanie na poprawnosc nawiasow mozna tez rozwiazac zrozumiale dla np. takiego laika jak ja :)
dzieki za pomoc
Najpierw bym znalazl na necie implementacje stosu w Csharp I zapisal algorytm, potem Mozesz sprobowac napisac go samemu, uzywajac arraylist(dynamicznej tablicy).
Widzę, że dalej to Męczysz:), pseudokod, trochę podobny do pythona:):
# https://4programmers.net/Forum/C_i_.NET/298307-prosba_o_pomoc_w_zadaniu_na_poprawnosc_nawiasow?p=1411764#id1411764
def balanced_parentheses(xs):
stack = [] # Jak o stos zainicjalizowana pusta dynamiczna tablica
for token in xs: # iterujemy po wejściu
if token == '(':
stack.append(token) # jako push append(dodanie na końcu)
if token == ')':
if len(stack) == 0: # ad hoc is empty, sprawdzenie czy długpość tablicy = 0
return False # jak chcemy ściągnąć z pustego stosu, to zwracamy false, to chyba oczywiste
else:
stack.pop() # pop - zdjęcie ostatniego elementu
if len(stack) == 0: # jak, po przeiterowaniu, stos jest pusty, to zwróć true, w przeciwnym przywadku false
return True
else:
return False
print(balanced_parentheses("w(())")) # -> True
print(balanced_parentheses("w())(")) # False
print(balanced_parentheses("w((())(klk))")) # True
print(balanced_parentheses(")(")) # False