Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Grafischen Taschenrechner in der Konsole mit Schleife erstellen.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.04.2014, 16:15 Uhr
fasa



Hallo Freunde,

ich habe ein kleines Problem. Zurzeit lerne ich in der Berufsschule C++. Leider komme ich mit dem Unterrichtsstil des Lehrer nicht zurecht. Seine Methode lautet, bringt euch alles selber bei.
Ich habe gar keine Kenntnisse in Programmieren und tu mich auch schwer damit die Logik dahinter vollständig zu verstehen.

Aber kommen wir jetzt zu dem eigentlichen Problem.
Wir sollen einen Taschenrechner in Visual Studio programmieren. Hier die Aufgabenstellung des Lehrers:

"Basic:
Es soll ein Taschenrechner nach dem MVC-Prinzip programmiert werden.
Die Darstellung soll wie im Unterricht besprochen einen grafischen Touch erhalten.
Der Taschenrechner soll mindestens folgende Rechenoperationen durchführen können:
Addition, Subtraktion, Multiplikation, Division, Prozentrechnung, Invertierung(1/x), Quadratwurzel- und Potenzfunktion
Die Eingabe soll in einem Eingabebereich angezeigt werden.
Die letzten 10 Aus- und Eingabezeilen sollen in einem Bereich unterhalb der Eingabe in umgekehrter Reihenfolge (Letzte Zeile oben) dargestellt werden (laufschrift)."

Mit Touch meint er, es soll mit Hilfe des ASCII Codes und einer While Schleife in der Konsole der Taschenrechner gezeichnet werden. Das hat er aber erst vor Kurzem uns mitgeteilt...


Den Taschenrechner habe ich bisher nur mit cout gezeichnet, weswegen alles ziemlich viel ausschaut

Wie kann ich jetzt, statt mit cout den TR mit einer While Schleife zeichnen? Und wie schaffe ich es, das die letzten 10 Ein und Ausgabezeilen in einem von mir gezeichneten Kästchen als Laufschrift erscheinen?

Bisher habe ich folgendes mit Hilfe eines Freundes geschafft:

C++:
#include <iostream>
#include <string>
#include <string.h>
#include <Windows.h>
#include <stdio.h>
#include <cmath>




using namespace std;

int mausposition(int &X,int &Y,int &Z)
{
HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwInputEvents;
COORD xypos = {0,0};
INPUT_RECORD inputBuffer;
DWORD NRofEvents;
DWORD dwMode;
int x,y,z;
GetConsoleMode(hStdIn, &dwMode);
SetConsoleMode(hStdIn, dwMode|ENABLE_MOUSE_INPUT);
while(1)
    {
    GetNumberOfConsoleInputEvents(hStdIn,&NRofEvents);
    if(NRofEvents>0)
        {
            ReadConsoleInput(hStdIn, &inputBuffer,1,&dwInputEvents);

        if(inputBuffer.EventType==MOUSE_EVENT)
            {
                x=inputBuffer.Event.MouseEvent.dwMousePosition.X;
                y=inputBuffer.Event.MouseEvent.dwMousePosition.Y;
                z=inputBuffer.Event.MouseEvent.dwButtonState; _flushall();
                SetConsoleCursorPosition(hStdOut,xypos);
                printf("X> %2d\nY> %2d\nZ> %2d",x,y,z);
            }
        }
    }
return 0;
}


void main()
{
    long double zahl1,zahl2,ergebnis;
    char rechenzeichen;
    string eingabe="ja";
    int A,B,C;
    char l=255;  //Leer
    char s=186;  //senkrecht
    char r=187;  //rechts oben
    char g=205;  //waagerecht
    char u=188;  //rechts unten
    char b=200;  //links unten
    char c=201;  //links oben
    char p=204;    //mitte rechts
    char q=185; //mitte links

    

while(eingabe=="ja" || eingabe=="Ja")
{

    //Eingabefeld
    cout << endl;
    cout << c << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << p << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << q << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << s << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << u << endl;

    //Zahlenfelder
    cout << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << s << l << l << "%" << l << l << s <<  s << l << l << "√" << l << l << s << s << l << l << "9" << l << l << s << s << l << l << "-" << l << l << s << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << endl;
    cout << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << s << l << l << "1" << l << l << s <<  s << l << l << "2" << l << l << s << s << l << l << "3" << l << l << s << s << l << l << "/" << l << l << s <<  endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << endl;
    cout << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << s << l << l << "4" << l << l << s <<  s << l << l << "5" << l << l << s << s << l << l << "6" << l << l << s << s << l << l << "*" << l << l << s << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << endl;
    cout << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << s << l << l << "7" << l << l << s <<  s << l << l << "8" << l << l << s << s << l << l << "9" << l << l << s << s << l << l << "-" << l << l << s << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << endl;
    cout << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << c << g << g << g << g << g << r << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << s << l << l << "0" << l << l << s <<  s << l << l << "." << l << l << s << s << l << l << "=" << l << l << s << s << l << l << "+" << l << l << s << endl;
    cout << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << s << l << l << l << l << l << s << endl;
    cout << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << b << g << g << g << g << g << u << endl;
    cout << endl;
    cout << endl;
    cout << endl;

    mausposition(A,B,C);
    cout << " Geben Sie bitt ihre Rechung ein: ";
    cin >> zahl1 >> rechenzeichen >> zahl2;
    cout << endl;

    switch(rechenzeichen)
    {
    case '+': ergebnis = zahl1+zahl2;
    break;
    case '-' : ergebnis = zahl1-zahl2;
    break;
    case '*' : ergebnis = zahl1*zahl2;
    break;
    case '/' : ergebnis = zahl1/zahl2;
    break;
    case '%' : ergebnis = zahl1/100*zahl2;
    break;

    //Kein gültiges Rechenzeichen
    default: cout << "unbekanntes Rechenzeichen...\n";
    system("cls");
    }
    system("cls");
    cout << zahl1 << " " << rechenzeichen << " " << zahl2 << "=" << ergebnis << endl;
    system("pause");
    cout << " Wollen sie ihre eingabe wiederholen?. Ja oder Nein?" << endl;
    cin >> eingabe;
    system("cls");
    }
}



---
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 23.04.2014 um 12:32 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.04.2014, 13:44 Uhr
Hans
Library Walker
(Operator)


Hi,

zuerst einmal:

C++:
#include <string.h> // Das ist C (ohne ++) und wird nicht gebraucht, wenn
                    // man C++ schreibt
#include <stdio.h>  // Hierfür gilt das Selbe wie für <string.h>




Zitat:

Wie kann ich jetzt, statt mit cout den TR mit einer While Schleife zeichnen?


Ich denke mal, Du sollst einige cout-ausdrücke in eine Schleife packen, denn mit einer Schleifenanweisung selbst kann man nichts zeichnen. Also etwa so:

C++:
int i;

cout << c;
i=0;
while (i<26)
  { cout << g;
    i++
  }
cout << r << endl;


anstelle von:

C++:
    cout << c << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << g << r << endl;




Zitat:

Und wie schaffe ich es, das die letzten 10 Ein und Ausgabezeilen in einem von mir gezeichneten Kästchen als Laufschrift erscheinen?


Also das mit der Laufschrift würde ich jetzt nicht so interpretieren, wie man es in Filmen oder Spielen sieht, denn das ist viel zuviel Aufwand. Stattdessen würde ich das so deuten, dass erst mal die ersten 10 Zeilen vollgeschrieben werden. Dabei fängst Du oben an und immer wenn eine Zeile dazu kommt, verschiebst Du alle Zeilen um eins nach unten, bevor Du in der obersten Zeile was Neues ausgibst. Die unterste Zeile fliegt dann jeweils raus, d.h. deren Inhalt wird vom Programm "vergessen".
Da es sich bei den Ausgaben um Zahlen handelt, kannst Du die intern in einem einfachen Array oder Vector speichern, was sowieso eine notwendige Massnahme ist, da Du Daten ja brauchst, um sie in den einzelnen Zeilen auszugeben.

Dann noch zur Optik:
Nimm für die Tasten besser die einfachen Rahmen, denn die doppelten Rahmen wirken bei den Tasten eher nervend. Und dann mache einen durchgezogenen Rahmen um das Tastenfeld herum.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 23.04.2014 um 13:45 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: