kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung
kramann.info
© Guido Kramann

Login: Passwort:




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:

  • x+3=7
  • 7*5=x
  • 6*x=36
  • 34-x=20

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:

  • Ein Programm, das das Ergebnis mathematischer Ausdrücke mit + und - liefert.
  • Ein Programm, das das Ergebnis mathematischer Ausdrücke mit +, -, * und / liefert.
  • Ein Programm, das das Ergebnis mathematischer Ausdrücke mit +, -, * und /, sowie Klammerungen () liefert.
#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

  • Erweitern Sie ausdruck5.cpp so, dass auch * und / benutzt werden können.

Aufgabe 2

  • Schreiben Sie ausdruck5.cpp in Java um. Der cin-Teil wird dabei erst einmal ausgespart.

Aufgabe 3

  • Schreiben Sie eine GUI für das oben beschriebene Lernprogramm in Java.