prosba o pomoc w zadaniu na poprawnosc nawiasow

0

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 !

0

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ąć.

0

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 )

2

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();
3
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.

2
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.

0
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 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.

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

0

Najpierw bym znalazl na necie implementacje stosu w Csharp I zapisal algorytm, potem Mozesz sprobowac napisac go samemu, uzywajac arraylist(dynamicznej tablicy).

2

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1