Connecting Tech Pros Worldwide Help | Site Map

logische ausdrücke

jack sparrow
Guest
 
Posts: n/a
#1: Mar 14 '06
hallo zusammen!

habe ein problem, ich muss als studienleistung ein programm schreiben mit
folgender aufgabenstellung:
--------------------------------------------------------------------------------------------------------------------------
Berechnung des Werts eines logischen Ausdrucks

Eingabe (in Hauptprogramm):

Wahrheitswerte Wahr/Falsch in der Form W,w,F oder f

Verknüpfungszeichen:
- Und (Zeichen *),
- inklusives Oder (Zeichen +)
- exklusives Oder (Zeichenfolge xor, XOR oder auch Mischung
Klein-/Großbuchstaben)

Behandlung mit folgender Hierarchie:
*/xor höher als + (die beiden Operatoren * und xor in gleicher Vorrangstufe,
d.h. Abarbeitung von links nach rechts)

Leerzeichen beliebig (auch innerhalb xor)

max. Länge etwa 80 Zeichen (Eingabe als eine Zeichenkette), innerhalb dieser
Länge beliebig viele Operatoren und zugehörige Operanden.

Gesatprogramm als Schleife; Ende bei Eingabe eines $-Zeichens.

----------------------------------------------------------------------------------------------------------------------------

habe hier jetzt ein programm, das diesen zweck erfüllt. könnte man noch was
verbessern (siehe kommentare im text)?


----------------------------------------------------------------------------------------------------------------------------

*********** Berechnung des Wertes eines logischen Ausdrucks ********/



#include <iostream.h>

const int max=80;

//hier werden die Funktionen deklariert
int umwandlung(char zeile[max]);
int loeschBlanks(char zeile[max]);
int logischesUnd(char zeile[max]);
int logischesOderXor(char zeile[max]);

int main()
{
char zeile[max];


cout << "Dieses Programm berechnet einen korrekten logischen Wert," <<
endl;
cout << "der in folgenden Zeile eingegeben werden kann." << endl;
cout << "Sie koennen es durch Eingabe eines -$- beenden." << endl;

//die Schleife fuehrt das programm aus,
//bis ein $ eingegeben wird
while(zeile[0]!= '$') {
cout << "Bitte geben sie einen korrekten logischen Wert in die zeile
ein:" << endl;

//einlesen der Zeile
cin.getline(zeile,sizeof(zeile));

umwandlung(zeile);

cout << "Hier wird die eingegebene Zeile in eine einheitliche Form
umgewandelt" << endl;
cout << zeile << endl;


loeschBlanks(zeile);

cout << "Hier werden alle Leerzeichen entfernt" << endl;
cout << zeile << endl;


logischesUnd(zeile);

cout << "Hier werden die Werte die mit und verknüpft wurden ermitelt" <<
endl;
cout << zeile << endl;


logischesOderXor(zeile);

cout << "Hier werden nun noch die Werte die mit xor bzw oder vernüpft
wurden ermitelt" << endl;
cout << zeile << endl;



if (zeile[0] == '1')
cout << endl << "Der eingegebene Wert der Zeile war WAHR " << endl <<
endl<< endl;
if (zeile[0] == '0')
cout << endl << "Der eingegebene Wert der Zeile war FALSCH " << endl <<
endl<< endl;
if (zeile[0] == '$')
cout << endl << "Abbruch durch den Benutzer" << endl << endl<< endl;


//anmerkung: diese bedingung findet einige Fehler aber nicht alle.
//Fehler wie: fer for w*wghghg werden hier nicht erkannt
if (zeile[0] != '$' && zeile[0] != '1' && zeile[0] != '0')
cout << endl << "Sie haben einen fehlerhaften zeile eingegeben!" << endl <<
endl<< endl;
}

return 0;

}

//hier werden die Funktionen definiert

//Schreibe logischen zeile in einheitliche Form um, wichtig, damit die
//folgenden Schleifen die Operatoren erkennen
int umwandlung(char zeile[max]) {

int zeichen;

zeichen = 0;
while (zeichen!=max)
{
if (zeile[zeichen] == 'f' || zeile[zeichen] == 'F')
zeile[zeichen] = '0';
if (zeile[zeichen] == 'w' || zeile[zeichen] == 'W')
zeile[zeichen] = '1';
if (zeile[zeichen] == 'X')
zeile[zeichen] = 'x';
if (zeile[zeichen] == 'O')
zeile[zeichen] = 'o';
if (zeile[zeichen] == 'R')
zeile[zeichen] = 'r';
++zeichen;

}
return zeile[max];
}

//entferne alle blanks aus der Zeile
int loeschBlanks(char zeile[max]) {

int zeichen, kopieZeichen;

for (zeichen=0; zeichen!=max; ++zeichen)
{
if (zeile[zeichen] == ' ')
{for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+1];
zeichen=0;}
}

return zeile[max];
}


// zunächst das "und", da es höherrangig als oder und xor ist bekommt es
// eine eigene Schleife und wird zuerst ausgewertet
int logischesUnd(char zeile[max]) {

int zeichen, kopieZeichen;

for (zeichen=0; zeichen!=max; ++zeichen)
{

if (zeile[zeichen] == '*' )
{if (zeile[zeichen-1] == '1' && zeile[zeichen+1] == '1')
{zeile[zeichen-1] = '1';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+2];
zeichen=0;
}

if (zeile[zeichen-1] == '0' || zeile[zeichen+1] == '0' )
{zeile[zeichen-1] = '0';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+2];
zeichen=0;
}
}
}
return zeile[max];

}

// nun das "oder", das oder und das xor können in eine gemeinsame
//schleife berechnet werden
int logischesOderXor(char zeile[max]) {

int zeichen, kopieZeichen;

for (zeichen=0; zeichen!=max; ++zeichen)
{

if (zeile[zeichen] == '+' )
// "oder"
{if (zeile[zeichen-1] == '1' || zeile[zeichen+1] == '1')
{zeile[zeichen-1] = '1';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+2];
zeichen=0;
}

if (zeile[zeichen-1] == '0' && zeile[zeichen+1] == '0' )
{zeile[zeichen-1] = '0';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+2];
zeichen=0;
}
}
else {
//nun noch das "xor"
if (zeile[zeichen] == 'x' && zeile[zeichen+1] == 'o' &&
zeile[zeichen+2] == 'r')
{if (zeile[zeichen-1] == '1' && zeile[zeichen+3] == '0')
{zeile[zeichen-1] = '1';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+4];
zeichen=0;
}
if (zeile[zeichen-1] == '0' && zeile[zeichen+3] == '1')
{zeile[zeichen-1] = '1';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+4];
zeichen=0;
}

if (zeile[zeichen-1] == '0' && zeile[zeichen+3] == '0' )
{zeile[zeichen-1] = '0';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+4];
zeichen=0;
}
if (zeile[zeichen-1] == '1' && zeile[zeichen+3] == '1' )
{zeile[zeichen-1] = '0';
for (kopieZeichen=zeichen; kopieZeichen!=max; ++kopieZeichen)
zeile[kopieZeichen] = zeile[kopieZeichen+4];
zeichen=0;
}
}
}
}

return zeile[max];
}

---------------------------------------------------------------------------------------------------


mlimber
Guest
 
Posts: n/a
#2: Mar 14 '06

re: logische ausdrücke


jack sparrow wrote:[color=blue]
> hallo zusammen![/color]
[snip]

In English, please.

Cheers! --M

Victor Bazarov
Guest
 
Posts: n/a
#3: Mar 14 '06

re: logische ausdrücke


jack sparrow wrote:[color=blue]
> hallo zusammen!
>
> habe ein problem, ich muss als studienleistung ein programm schreiben mit
> folgender aufgabenstellung:
> [...][/color]

This is an English-speaking newsgroup. If you want to address
a German-speaking audience, post to 'de.comp.lang.c++'.

Danke.
Bob Hairgrove
Guest
 
Posts: n/a
#4: Mar 14 '06

re: logische ausdrücke


On Tue, 14 Mar 2006 16:41:03 -0500, Victor Bazarov
<v.Abazarov@comAcast.net> wrote:
[color=blue]
>jack sparrow wrote:[color=green]
>> hallo zusammen!
>>
>> habe ein problem, ich muss als studienleistung ein programm schreiben mit
>> folgender aufgabenstellung:
>> [...][/color]
>
>This is an English-speaking newsgroup. If you want to address
>a German-speaking audience, post to 'de.comp.lang.c++'.
>
>Danke.[/color]

It's actually de.comp.lang.iso-c++

--
Bob Hairgrove
NoSpamPlease@Home.com
jack sparrow
Guest
 
Posts: n/a
#5: Mar 14 '06

re: logische ausdrücke


thx!


"Bob Hairgrove" <invalid@bigfoot.com> schrieb im Newsbeitrag
news:h1fe12tpclfl5tv3ei11p4ns06k613n0r7@4ax.com...[color=blue]
> On Tue, 14 Mar 2006 16:41:03 -0500, Victor Bazarov
> <v.Abazarov@comAcast.net> wrote:
>[color=green]
>>jack sparrow wrote:[color=darkred]
>>> hallo zusammen!
>>>
>>> habe ein problem, ich muss als studienleistung ein programm schreiben
>>> mit
>>> folgender aufgabenstellung:
>>> [...][/color]
>>
>>This is an English-speaking newsgroup. If you want to address
>>a German-speaking audience, post to 'de.comp.lang.c++'.
>>
>>Danke.[/color]
>
> It's actually de.comp.lang.iso-c++
>
> --
> Bob Hairgrove
> NoSpamPlease@Home.com[/color]


Victor Bazarov
Guest
 
Posts: n/a
#6: Mar 14 '06

re: logische ausdrücke


"Bob Hairgrove" <invalid@bigfoot.com> schrieb im Newsbeitrag[color=blue]
> news:h1fe12tpclfl5tv3ei11p4ns06k613n0r7@4ax.com...
>[color=green]
>>On Tue, 14 Mar 2006 16:41:03 -0500, Victor Bazarov
>><v.Abazarov@comAcast.net> wrote:
>>
>>[color=darkred]
>>>jack sparrow wrote:
>>>
>>>>hallo zusammen!
>>>>
>>>>habe ein problem, ich muss als studienleistung ein programm schreiben
>>>>mit
>>>>folgender aufgabenstellung:
>>>>[...]
>>>
>>>This is an English-speaking newsgroup. If you want to address
>>>a German-speaking audience, post to 'de.comp.lang.c++'.
>>>
>>>Danke.[/color]
>>
>>It's actually de.comp.lang.iso-c++[/color][/color]

My ISP has both.

V
--
Please remove capital As from my address when replying by mail
Rolf Magnus
Guest
 
Posts: n/a
#7: Mar 15 '06

re: logische ausdrücke


Victor Bazarov wrote:
[color=blue][color=green][color=darkred]
>>>>This is an English-speaking newsgroup. If you want to address
>>>>a German-speaking audience, post to 'de.comp.lang.c++'.
>>>>
>>>>Danke.
>>>
>>>It's actually de.comp.lang.iso-c++[/color][/color]
>
> My ISP has both.[/color]

Interesting, considering that de.comp.lang.c++ has been renamed to
de.comp.lang.iso-c++ in the past millennium. Seems your ISP's newsgroup
list is a bit outdated.

Victor Bazarov
Guest
 
Posts: n/a
#8: Mar 15 '06

re: logische ausdrücke


Rolf Magnus wrote:[color=blue]
> Victor Bazarov wrote:
>
>[color=green][color=darkred]
>>>>>This is an English-speaking newsgroup. If you want to address
>>>>>a German-speaking audience, post to 'de.comp.lang.c++'.
>>>>>
>>>>>Danke.
>>>>
>>>>It's actually de.comp.lang.iso-c++[/color]
>>
>>My ISP has both.[/color]
>
>
> Interesting, considering that de.comp.lang.c++ has been renamed to
> de.comp.lang.iso-c++ in the past millennium. Seems your ISP's newsgroup
> list is a bit outdated.[/color]

Or it is an alias... I don't really speak or read German, it's all Greek
to me, so ...
Closed Thread