string addieren,multiplizieren,....????

11/02/2010 17:38 MrSimonKeks#1
string addieren,multiplizieren,....????
Hi, die Überschrift ist etwas verwirrend ich weiß, aber ich habe keine Ahnung wie ich das Formulieren soll, deßhalb konnte ich auch nicht via sufu suchen oder Google...:D
Also ich sitze gerade daran einen Binomischen Formelrechner zu programmieren, da meine Klasse und ich, das Thema gerade in Mathe haben (für mich trivial) und ich meinen Mitschülern bei den Hausaufgaben etwas unter die Arme greifen möchte.:D
So, das ist mein Code:
Code:
#include <iostream>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
inline void keep_window_open() {char ch; cin>>ch;}
//-------------------------------------------------------
double x;
double y;
double square(double x)
{
    return x*x;
}
int main()
{
    const char beenden='j';
    char eingabe='n';
    while(eingabe!=beenden)
    {
        cout<<"Binomischer-Rechner by Simon\n";
        cout<<"Wählen sie zwischen den 3 Binomischen-Formel:\n";
        cout<<"Um die Erste zu wählen drücken sie die 1(gefolgt von enter)\n";
        cout<<"Um die Zweite zu wählen drücken sie die 2(gefolgt von enter)\n";
        cout<<"Um die Dritte zu wählen drücken sie die 3(gefolgt von enter)\n";
        cout<<"Welche möchten sie?:\n";
        char m;
        cin>>m;
        if(m=='1')
        {
        cout<<"Hier wird jetzt gerechnet (x+y)quadrat\noder auch x quadrat+2xy+y quadrat\n";
        cout<<"Geben sie ihre erste Zahl ein(x):";
        cin>>x;
        cout<<"Geben sie ihre zweite Zahl ein(y):";
        cin>>y;
        cout<<"Ergebnis:"<<(square(x))+(2*x*y)+(square(y))<<'\n';
        }
        if(m=='2')
        {
            cout<<"Hier wird jetzt gerechnet (x-y)quadrat \noder auch x quadrat-2xy+y quadrat\n";
            cout<<"Geben sie ihre erste Zahl ein(x):";
            cin>>x;
            cout<<"Geben sie jetzt ihre zweite Zahl ein(y):";
            cin>>y;
            cout<<"Ergebnis:"<<(x*x)-(2*x*y)+(y*y)<<'\n';
        }
        if(m=='3')
        {
            cout<<"Hier wird jetzt gerechnet (x-y)*(x+y) \noder auch x quadrat-y quadrat\n";
            cout<<"Geben sie ihre erste Zahl ein(x):";
            cin>>x;
            cout<<"Geben sie ihre zweite Zahl ein(y):";
            cin>>y;
            cout<<"Ergebnis:"<<(square(x))-(square(y))<<'\n';
        }
        else
        {
            cout<<"Falsche Eingabe!!!";
        }
        cout<<"Beenden?(ja=j,nein=n):";
        cin>>eingabe;
    }
    return 0;
}
Das Programm funktioniert an sich ja,... aber ich kann nur Zahlen rechnen sprich z.B. (5+3)² und keine Buchstaben z.B. (3x+7)².
Nun gehört zu einem richtigen Bionomischen Formelrechner aber natürlich z.B. die Aufgabe (12x+4np)².Und deßhalb wollte ich fragen ob man irgendwie z.B. die genannte Aufgabe (12x+4np)² auch rechnen kann, so dass bei diesem Beispiel jetzt als Ergebnis 144x+96npx+16np herauskommt???
Mfg Simon
11/02/2010 19:02 MoepMeep#2
Kann man bestimmt, aber wozu? Ob nun 12 oder 12x, das Ergebnis ist das 'gleiche' ;)

Falls du das wirklich machen willst. Die Zahlen als String bzw Char-Array abspeichern, durchgehen und die Zahlen raussuchen, in integer/float konvertieren. Dann ganz normal Rechnen und am Ende die beiden Buchstaben mit ausgeben.
11/02/2010 19:26 MrSimonKeks#3
Quote:
Originally Posted by MoepMeep View Post
Kann man bestimmt, aber wozu? Ob nun 12 oder 12x, das Ergebnis ist das 'gleiche' ;)

Falls du das wirklich machen willst. Die Zahlen als String bzw Char-Array abspeichern, durchgehen und die Zahlen raussuchen, in integer/float konvertieren. Dann ganz normal Rechnen und am Ende die beiden Buchstaben mit ausgeben.
Wozu? x ist in diesem Fall eine undefinierte Variable und der Unterschied zwischen 12x (auch 12*x) und 12 besteht darin, dass wenn x z.B. 3 ist das Ergebnis verändert wird.
Mfg Simon
Werde es nachher gleich mal ausprobieren bekommst schon einmal ein thx für die mühe hier etwas hinzuschreiben.
11/02/2010 19:47 MoepMeep#4
Quote:
Originally Posted by BliszZ View Post
Wozu? x ist in diesem Fall eine undefinierte Variable und der Unterschied zwischen 12x (auch 12*x) und 12 besteht darin, dass wenn x z.B. 3 ist das Ergebnis verändert wird.
Das ist mir Vollkommen bewußt. Für das auflösen der Binomischen Formel spielt das aber trotzdem keine wichtige Rolle ;)
11/02/2010 22:01 MrSimonKeks#5
Quote:
Originally Posted by MoepMeep View Post
Das ist mir Vollkommen bewußt. Für das auflösen der Binomischen Formel spielt das aber trotzdem keine wichtige Rolle ;)
Ja, ich hab wohl ein bisschen vorschnell geantwortet und vergessen zu schreiben, dass ich später noch ein Gadget einbauen kann, wo man den Variablen nachträglich noch Werte hinzufügen kann. (Soweit bin ich aber lange noch nicht ;D)
Edit: Ich weiß jetzt nicht genau ob ich das richtig verstanden habe...Du willst die Zahlen als strings einlesen lassen, dann die Zahlen aus dem string herausfiltern und dieses dann ausrechnen um dann am Ende die Buchstaben wieder hinten hinanzuhängen...Falls meine Interpretation deines Textes richtig ist, ist dies nicht das was ich bezwecken möchte...
Nehmen wir z.B. jetzt die Aufgabe (2x+2n)² und rechnen wir mit der Binomischen Formel so würde herauskommen: (2x+2n)²=4x²+8xn+4n² diese Zahlen kann man jedoch nicht zusammenfassen wenn ich es richtig verstanden haben würdest du jetzt wie folgt rechnen: (2x+2n)² [als string einlesen]
= (2+2)² [die Zahlen herausfiltern und ausrechnen] =4+6+4=14=14nx [die Buchstaben am Ende wieder hinzufügen]... Leider wäre das dann eine föllig verfälschte Lösung, da 4x²+8xn+4n² etwas völlig anderes ist als 14nx.
Und wenn ich das tun würde, dann wäre es nicht mehr ein Binomischer Rechner ^^
Mfg Simon
p.s. vllt. hast du jetzt verstanden was ich meine únd kannst mir eine bessere Auskunft geben
11/03/2010 19:02 MoepMeep#6
Reiner Pseudo-Code.
Code:
char a[] = "2x";
char b[] = "3y";
int zahl1 = 0;
int multiplikator = 1;
for(int i = sizeof(a);i>=0;i++)
{
    if(a[i] <= 9 || a[i] >= 0)
	{
		zahl1+=((int)a[i])*multiplikator);
	}
	multiplikator*=10;
}
Grober aufbau, das wird so nicht gehen ;) Und du musst überprüfen, ob das 1.Element des Arrays ein Minus ist.
Gibt vielleicht auch irgendeine String-Operation, die das übernimmt.

Du kannst natürlich auch die ganze Aufgabe einlesen, ist nur mehr arbeit :p

edit: Was mir grad so einfällt.

Code:
string a;
int zahl1;
cin >> zahl1 >> a;

Eingabe: zahl variable
Erspart dir die ganze Problematik :p
11/03/2010 19:36 MrSimonKeks#7
Quote:
Originally Posted by MoepMeep View Post
Reiner Pseudo-Code.
Code:
char a[] = "2x";
char b[] = "3y";
int zahl1 = 0;
int multiplikator = 1;
for(int i = sizeof(a);i>=0;i++)
{
    if(a[i] <= 9 || a[i] >= 0)
	{
		zahl1+=((int)a[i])*multiplikator);
	}
	multiplikator*=10;
}
Grober aufbau, das wird so nicht gehen ;) Und du musst überprüfen, ob das 1.Element des Arrays ein Minus ist.
Gibt vielleicht auch irgendeine String-Operation, die das übernimmt.

Du kannst natürlich auch die ganze Aufgabe einlesen, ist nur mehr arbeit :p

edit: Was mir grad so einfällt.

Code:
string a;
int zahl1;
cin >> zahl1 >> a;

Eingabe: zahl variable
Erspart dir die ganze Problematik :p
Gnaz schön starker Tobak für einen Anfänger :D Werde es versuchen nach und nach zu verstehen aber jetzt lese ich ersteinmal in meinem Buch Einführung in die Programmierung mit C++ weiter vllt. erübrigt sich das dann auch irgendwann...
Mfg Simon