Lernprogramm für einfache mathematische Ausdrücke
(EN google-translate)
(PL google-translate)

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
|