Lernprogramm für einfache mathematische Ausdrücke
(EN google-translate)
(PL google-translate)
vorl_oop_2014_12_17.zip - Material zur Vorlesung vom 17.12.2014
In der dritten Schulklasse sollen Schüler in Mathematik einfache mathematische Ausdrücke verstehen und fehlende Terme in Gleichungen ergänzen.
Beispiele:
|
usw.
Als Lernhilfe soll ein Computerprogramm geschrieben werden, das solche Ausdrücke auswertet.
Dabei muß bereits für x eine Zahl angegeben werden. Das Programm soll dann lediglich zurückgeben, ob der Ausdruck richtig oder falsch ist.
Beispiele:
| Eingegebener Ausdruck | Antwort des Programms |
|---|---|
| 2+3=7 | FALSCH |
| 7*5=35 | RICHTIG |
| 6*4=36 | FALSCH |
| 34-14=20 | RICHTIG |
Tabelle 0-1: Beispiele für eingegebene Ausdrücke und die Antwort des Programms.
Der erlaubte Zeichenvorrat soll die Ziffern 0 bis 9 umfassen, sowie das Gleichheitszeichen =, sowie die Operatoren +, -, * /.
Es wird vorausgesetzt, dass die Aufgaben so gestellt sind, dass als Ergebnis immer ganze Zahlen herauskommen (auch bei den Divisionsaufgaben).
Gemeinsam soll folgendes entwickelt werden:
|
#include<iostream>
using namespace std;
#define MAX 200
//>=0 == Zahl
//<0: -1==ENDE -2=='=', -3=='+' -4=='-' -5=='*' -6=='/'
int ausdruck[MAX];
//Liefert ggf. Stelle des Gleichheitszeichens:
int analysieren(int* ausdruck,char* text)
{
int* zeiger;
int zahl=0;
zeiger = &ausdruck[0];
while(*text!='\0')
{
if(*text<'0' || *text>'9')
{
*zeiger=zahl;
zeiger++;
zahl=0;
if(*text=='=')
{
*zeiger=-2;
}
if(*text=='+') *zeiger=-3;
if(*text=='-') *zeiger=-4;
if(*text=='*') *zeiger=-5;
if(*text=='/') *zeiger=-6;
zeiger++;
}
else
{
zahl*=10;
zahl+=*text-48;
}
text++;
}
*zeiger=zahl;
zeiger++;
*zeiger=-1;
}
void zeigeAnalyse(int* ausdruck)
{
int* zeiger = ausdruck;
while(*zeiger!=-1)
{
cout<<*zeiger<<" ";
zeiger++;
}
cout<<-1<<endl;
}
int findeStelleGleich(int* ausdruck)
{
int index=0;
while(ausdruck[index]!=-1)
{
if(ausdruck[index]==-2)
return index;
index++;
}
return -1;
}
int auswertenLinks(int* ausdruck)
{
int* zeiger = ausdruck;
int erg=zeiger[0];
zeiger++;
while(*zeiger!=-1 && *zeiger!=-2)
{
if(*zeiger<0)
{
if(*zeiger==-3)
{
zeiger++;
erg+=*zeiger;
}
else if(*zeiger==-4)
{
zeiger++;
erg-=*zeiger;
}
}
zeiger++;
}
return erg;
}
int auswertenRechts(int* ausdruck)
{
int* zeiger = ausdruck;
int erg = 0;
while(*zeiger!=-1 && *zeiger!=-2)
zeiger++;
if(*zeiger==-2)
{
zeiger++;
erg = *zeiger;
zeiger++;
}
while(*zeiger!=-1)
{
if(*zeiger<0)
{
if(*zeiger==-3)
{
zeiger++;
erg+=*zeiger;
}
else if(*zeiger==-4)
{
zeiger++;
erg-=*zeiger;
}
}
zeiger++;
}
return erg;
}
int main()
{
char eingabe[MAX];
char a2[] = "10+7+3=20";
int erg1,erg2,erg3;
cout<<"Analyse von "<<a2<<endl;
analysieren(ausdruck,a2);
zeigeAnalyse(ausdruck);
erg1 = auswertenLinks(ausdruck);
erg2 = auswertenRechts(ausdruck);
if(erg1==erg2)
cout<<erg1<<"=="<<erg2<<endl;
else
cout<<erg1<<"!="<<erg2<<endl;
while(1)
{
cout<<"Gib einen Ausdruck ein:";
cin>>eingabe;
analysieren(ausdruck,eingabe);
erg1 = auswertenLinks(ausdruck);
erg2 = auswertenRechts(ausdruck);
if(erg1==erg2)
cout<<":-)"<<endl;
else
cout<<":-("<<endl;
}
}
Code 0-1: ausdruck5.cpp: Programm zum testen von Ausdrücken mit + und -.
Übung 9 WS2014/15
Aufgabe 1
|
Aufgabe 2
|
Aufgabe 3
|