Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old March 14th, 2006, 09:45 PM
jack sparrow
Guest
 
Posts: n/a
Default logische ausdrücke

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];
}

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


  #2  
Old March 14th, 2006, 09:55 PM
mlimber
Guest
 
Posts: n/a
Default Re: logische ausdrücke

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

In English, please.

Cheers! --M

  #3  
Old March 14th, 2006, 09:55 PM
Victor Bazarov
Guest
 
Posts: n/a
Default 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.
  #4  
Old March 14th, 2006, 10:15 PM
Bob Hairgrove
Guest
 
Posts: n/a
Default 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
  #5  
Old March 14th, 2006, 11:05 PM
jack sparrow
Guest
 
Posts: n/a
Default 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]


  #6  
Old March 14th, 2006, 11:35 PM
Victor Bazarov
Guest
 
Posts: n/a
Default 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
  #7  
Old March 15th, 2006, 12:15 PM
Rolf Magnus
Guest
 
Posts: n/a
Default 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.

  #8  
Old March 15th, 2006, 02:35 PM
Victor Bazarov
Guest
 
Posts: n/a
Default 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 ...
 

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles