Helyesen zárójelezett-e?
2010-12-07T11:55:08+01:00
2010-12-07T22:23:17+01:00
2022-06-29T06:55:18+02:00
  • Ez már szintaktikai hiba, nem zárójel probléma. Hm?


    Nem tudom, kicsit gondban is voltam a feladatkiírással: nem tudom, hogy mit jelent az pontosan, hogy 'zárójelprobléma'. Igazából egy karaktersorozat vagy szintaktikailag helyes egy zárójeleket is tartalmazó nyelvben, vagy nem. Van valami definíciód arra, hogy mi az a zárójelprobléma (ha nem az, hogy valamely zárójel rossz helyen van)? Mondjuk ha pont úgy definiáljuk, hogy zárójelprobléma akkor és csak akkor van ha a lent vázolt counteres algoritmus false-al tér vissza, az működik, csak elég öncélú.
    Mutasd a teljes hozzászólást!
  • Pontosabban végig figyelni kell, hogy a 'stack' nagyobbegyenlő 0 maradjon


    - Ha kivételnél üres a verem (nincs mit kivenni), akkor rossz a zárójelezés: END

    erre amit írtál azt mondja, hogy helyes, pedig nem az


    Ez már szintaktikai hiba, nem zárójel probléma. Hm?
    Mutasd a teljes hozzászólást!
  • Bocs, de most olyan szinten nincs időm meg kedvem belemenni, hogy adott egyszerű algoritmushoz hogyan szerkesszünk struktogrammot. Amúgy egy tapasztalt fejlesztőnek ezek a stuktorgrammok teljesen feleslegesek sőt szerintem gagyik, zavaróak, szóval nem szoktam ilyeneket rajzolgatni.

    Azért a rend kedvéért még leírok egy szerintem korrekt algoritmust:

    Tegyük fel, hogy a kifejezés zárójelekből, szorzásjelekből, összeadásjelekből és atomokból áll, ahol az atomok alfanumerikus karakterekből állnak.

    Ekkor induljunk el a kifejezés string elején és olvassuk a karaktereket egyesével. A következő állapotokat vezetem be:

    START
    ALFANUM_VOLT
    ALFANUM_MAJD_WHITESPACE_VOLT
    ZAR_KEZD_VOLT
    ZAR_VEG_VOLT
    OPERATOR_VOLT

    nyilván minden egyes állapot esetén megnézed, hogy mit olvasva milyen új állapotba kerülsz, illetve adott állapotban azt egy helyes kifejezésben lehet-e olvasni. Ezt rádbízom.
    Ezt kell kiegészíteni a counter kezeléssel, amit QXY-val írtunk, és akkor az algoritmus helyes lesz.

    Röviden: egyszerű állapotgéppel + egy counter változóval szvsz. egész elegánsan megoldható a feladat.
    Mutasd a teljes hozzászólást!
  • Nekem ezt folyamatábrával és struktogrammal kell megcsinálnom, úgy han van?
    Mutasd a teljes hozzászólást!
  • végén a stack-nak 0-nak kell lennie, ha helyes a zárójelezés

    Pontosabban végig figyelni kell, hogy a 'stack' nagyobbegyenlő 0 maradjon és a végén nullának kell lennie: ez szükséges feltétele a helyes zárójelenzésnek.

    Tehát ez nem jó:


    ) y * z (


    pedig a végén 0 a 'stack' (én counter-nek hívnám.).

    De még ez sem elégséges feltétel. Pl. erre amit írtál azt mondja, hogy helyes, pedig nem az:

    (y * ) z
    Mutasd a teljes hozzászólást!
  • Az ilyet veremmel "szokás" megoldani.
    - Nyitó zárójelnél beraksz a verembe, bezárónál kiveszel.
    - Ha kivételnél üres a verem (nincs mit kivenni), akkor rossz a zárójelezés: END
    - Ha a karaktertömb elfogy és üres a verem: jó a zárójelezés.
    - Ha a karaktertömb elfogy és nem üres a verem: rossz a zárójelezés.

    Mivel a verembe pakolt dolgoknak nincs jelentősége, érdemes szimulálni a dolgot.
    - indulásnál: int stack = 0
    - bepakolás: stack++
    - kivétel: stack--
    - végén a stack-nak 0-nak kell lennie, ha helyes a zárójelezés
    Mutasd a teljes hozzászólást!
  • XY(N) N elemű karaktertömb egy algebrai kifejezést tartalmaz. Készítsünk algoritmust annak ellenőrzésére, hogy helyesen zárójelezett-e?
    Az algoritmus beadandó 2 tervezési módszerrel:
    - Folyamatábra
    - Struktogram

    Hogy csináljam meg?Ezzel szenvedek.
    Előre is köszönöm a segítséget.
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által.
abcd