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

17.6 Lernprogramm für einfache mathematische Ausdrücke

17.6 Tutorial for simple mathematical expressions (EN google-translate)

17.6 Samouczek dla prostych wyrażeń matematycznych (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.

In the third grade, students in mathematics should be simple Understand mathematical expressions and add missing terms in equations.

W trzeciej klasie uczniowie w matematyce powinni być prostymi Rozumieć wyrażenia matematyczne i dodawać brakujące terminy w równaniach.

Beispiele:

Examples:

Przykłady:

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

usw.

etc.

itd.

Als Lernhilfe soll ein Computerprogramm geschrieben werden, das solche Ausdrücke auswertet.

As a learning aid a computer program should be written, that evaluates such expressions.

Jako pomoc do nauki należy napisać program komputerowy, który ocenia takie wyrażenia.

Dabei muß bereits für x eine Zahl angegeben werden. Das Programm soll dann lediglich zurückgeben, ob der Ausdruck richtig oder falsch ist.

You must already specify a number for x. The program will only return if the expression is correct or false.

Musisz już podać liczbę dla x. Program powróci tylko wtedy, gdy wyrażenie jest prawidłowe lub błędne.

Beispiele:

Examples:

Przykłady:

Eingegebener Ausdruck Antwort des Programms
2+3=7 FALSCH
7*5=35 RICHTIG
6*4=36 FALSCH
34-14=20 RICHTIG

Tabelle 17.6-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 +, -, * /.

The allowed character set should include the numbers 0 to 9, as well as the equals sign =, as well as the operators, -, expression expression2.cpp expression3 expression3.cpp expression4 expression4.cpp expression5 expression5.cpp expression6 expression6.cpp expression.cpp en_0.txt en_1.txt en_2.txt en_3.txt en_4.txt en_5. txt en_6.txt en_7.txt en_8.txt en_9.txt index.php content.inc pl_0.txt pl_1.txt pl_2.txt pl_3.txt pl_4.txt pl_5.txt pl_6.txt pl_7.txt pl_8.txt pl_9.txt vorl_oop_2014_12_1

Dozwolony zestaw znaków powinien zawierać cyfry od 0 do 9, a także znak równości = i operatorzy -, wyraziste ausdruck2.cpp wyrażenie3 ausdruck3.cpp ausdruck4 ausdruck4.cpp ausdruck5 ausdruck5.cpp ausdruck6 ausdruck6.cpp ausdruck.cpp en_0.txt en_10.txt en_1.txt en_2.txt en_3.txt en_4. txt en_5.txt en_6.txt en_7.txt en_8.txt en_9.txt index.php inhalt.inc pl_0.txt pl_1.txt pl_2.txt pl_3.txt pl_4.txt pl_5.txt pl_6.txt pl_7.txt pl_8.txt pl_

Es wird vorausgesetzt, dass die Aufgaben so gestellt sind, dass als Ergebnis immer ganze Zahlen herauskommen (auch bei den Divisionsaufgaben).

It is assumed that the tasks are set so that as a result always whole numbers come out (also with the division tasks).

Zakłada się, że zadania są ustawione tak, że w rezultacie zawsze pojawiają się liczby całkowite (również z zadaniami podziału).

Gemeinsam soll folgendes entwickelt werden:

Together, the following should be developed:

Razem należy opracować następujące elementy:

  • 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 17.6-1: ausdruck5.cpp: Programm zum testen von Ausdrücken mit + und -.

Übung 9 WS2014/15
Exercise 9 WS2014 / 15
Ćwiczenie 9 WS2014 / 15

Aufgabe 1

Task 1

Zadanie 1

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

Aufgabe 2

exercise 2

Zadanie 2

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

Aufgabe 3

Task 3

Zadanie 3

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