Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Programm zur Auswertung logischer Ausdrücke

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.12.2006, 21:55 Uhr
JackBeauregard



Hallo,

muss ein Programm erstellen, welches dem Benutzer ermöglicht eine boolesche Funktion a la
y = a&b + a&b&c einzugeben und diese als Wahrheitstafel wieder auszuschreiben.

Das Problem daran ist zunächst mal, dass ich keine Ahnung habe wie ich an die Sache am besten herangehe. Ich weis einfach nicht wie ich dem Programm die zig verschiedenen Zustände "beibringen" kann. Es sollen 2-4 Variablen möglich sein.

Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.12.2006, 22:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Grammatik überlegen... Parser schreiben... Abstrakten Syntaxbaum überlegen und los gehts...

greetz Windalf aka Nobody...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 04.12.2006 um 22:02 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.12.2006, 22:15 Uhr
JackBeauregard



Vielleicht sollte ich vorsichtshalber noch dazu erwähnen, dass ich C-Anfänger bin und mit der von dir geposteten Antwort leider nicht viel anfangen kann .
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.12.2006, 22:36 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Also du musst dir erstmal überlegen wie eine gültige Eingabe aussehen kann. Also was es alles für Möglichkeiten gibt, die der User eingeben können soll. Dazu gehören insbesondere so Späße wie Klammern, negierung und weiß was ich alles...

Dazu malt man sich am besten zunächst mal die Grammatik (oder ggf etwas vereinfachtes) dazu auf.... Soweit musst du zunächst mal kommen bevor du überhaupt nur darüber nachdenken solltest wie du das in quellcode umsetzt...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.12.2006, 22:51 Uhr
JackBeauregard



Nun, die gültige Eingabe kann wie folgt aussehen:

4 logische Variablen: a, b, c, d
+: ODER
.: Negation
&: UND

Maximal sind 16 Zustände möglich (bei 4 Variablen).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.12.2006, 10:56 Uhr
Blubber2063



Ich hoffe du bist wenigstens kein Programmierneuling, denn selbst wenn du das etwas abstrahieren kannst wirst du kaum an einer Grammatik und dem zugehörigen Parser vorbeikommen. Also sei lieber gleich gewarnt das ist für nen Anfänger alles andere als Trivial.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.12.2006, 11:14 Uhr
JackBeauregard



Leider sieht mein Prof, welcher mir die Aufgabe gestellt hat das anders (Anmerkung: Programmierung in C, 1. Semester). Er meinte, dass dies ohne Parser gehen würde. Ich solle die bitweisen Operatoren mit einbeziehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.12.2006, 11:40 Uhr
Pler
Einer von Vielen
(Operator)


Ohne das jetzt zu probieren, aber ne richtige Grammatik braucht man doch nicht, oder?
Wenn es nur mit & und + geht, dann sollte sich das auch durch zwei schleifen und ein paar ifs realisieren lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.12.2006, 11:53 Uhr
Blubber2063



Naja man kann, das ist dann aber nicht erweiterbar und Klammerstrukturen oder Operatorenreinfolge ist dann halt nicht drinne, Stück für Stück eingeben ist halt nicht unbedingt Korrekt. Wenn man natürlich bis auf die Negation alle Bindungen gleich behandelt kann man halt simple Formeln eintippen und auswerten, aber als glücklich würde ich das nicht ansehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.12.2006, 13:14 Uhr
Pablo
Supertux
(Operator)



Zitat von Pler:
Ohne das jetzt zu probieren, aber ne richtige Grammatik braucht man doch nicht, oder?
Wenn es nur mit & und + geht, dann sollte sich das auch durch zwei schleifen und ein paar ifs realisieren lassen.



genau wie Blubber2063 sagte, du kannst ohne einen richtigen Parser die Eingabe lesen, von rechts nach links durchgehen, aber du hast keine Syntax Erkennung mehr, Klammern kannst du vergessen, der Benutzer ist auf eine perfekte Syntax angewissen und nur die simplesten Ausdrücken können ausgewertet werden.

Um es richtig zu machen, führt es kein Weg an einem Parser vorbei. Man könnte sich vielleicht etwas mit flex & bison schnell zusammenbasteln, wenn man nicht so viel Lust hat auf einem selbsgeschriebenes bottom-up Parser hat oder so.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.12.2006 um 13:15 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: