Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fennec Mini JLI'ler

Anmeldedatum: 02.05.2003 Beiträge: 19 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 02.05.2003, 21:26 Titel: frage zu meinem Rechen Programm |
|
|
Ich hab mal zur brobe ein Rechen Programm geschrieben aber der Code kommt mir umständlich vor:
Code: |
#include <iostream.h>
void main(void)
{
float aVar = 0.0f;
float bVar = 0.0f;
float cVar = 1.1f;
float ergebniss = 0.0f;
char rech;
cout << " Rechenprogramm\n" << '\b';
cout << "(...)\n\n";
cin >> aVar;
cin >> rech;
cin >> bVar;
if('+' == rech)
{
ergebniss = aVar + bVar;
}
else if('-' == rech)
{
ergebniss = aVar - bVar;
}
else if('*' == rech)
{
ergebniss = aVar * bVar;
}
else if('/' == rech)
{
ergebniss = aVar / bVar;
}
cout << '\n' << ergebniss << '\n';
while(cVar != 0)
{
cin >> rech;
cin >> cVar;
if('+' == rech)
{
ergebniss += cVar;
}
else if('-' == rech)
{
ergebniss -= cVar;
}
else if('*' == rech)
{
ergebniss *= cVar;
}
else if('/' == rech)
{
ergebniss /= cVar;
}
cout << ergebniss << '\n';
}
}
|
würde mich freuen wenn ihr mir sagen könntet wie ich das vereinfachen könnte und wie das hier hinbekomme :
Code: |
// Einagbe
2+2+2+2+2+2+2
0 // Lösungenen
4
6
8
10
12
14
|
ich hoffe ihr wisst wie ich meine
mfg
fennec |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 02.05.2003, 22:02 Titel: |
|
|
Also ich würde evtl. noch Funktionen nutzen.
Meine Empfehlung zu deinem Programm:
Zuerst abfragen des Rechenzeichens (evtl. mit switch), dann Abfragen wie viele Werte man (nacheinander) eintippen möchte, die dann mit dem abgefragten Rechenzeichen berechnet werden -> den Wert der Anzahl in eine Schleife einbauen in der der Benutzer die Zahlen eingibt.
Um die gesamte Rechnung nochmal anzuzeigen, könnte man mit dem Wert wie oft eingetippt wird ein Feld erzeugen, das die einzelnen Werte speichert
Code: |
float Zahlen[Wert];
|
und damit die Aufgabe zum Schluss wieder ausgibt, evtl. einmal die Aufgabe selbst und darunter die Zwischenergebnisse.  |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.05.2003, 22:08 Titel: |
|
|
Kennt jemand "Das große QBasic-Buch"?
Dort gab es ein Komplettes Kapitel, in dem eine Tabellenkalkulation programmiert wurde, vorallem Technicken zum Rechnen wurden vorgestellt.
Wenn es Euch interessiert, scanne ich die betreffenden Seiten mal ein und stelle sie zur verfügung, so dass ihr euch die entsprechenden Codestellen übersetzen könnt, die Technik ist die gleicht, auch wenn die Sprache ne andere ist. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 02.05.2003, 22:14 Titel: |
|
|
Man könnte es aber vermutl. auch so machen, dass man die komplette Rechnung als String (char) speichert und Stück für Stück auswerten lässt, was den Vorteil bringt, dass der Benutzer nicht entscheiden muss, wie viel er eintippt - so wäre folgendes als cin-eingabe möglich zu verarbeiten, ohne dass der Benutzer Rechenzeichen oder Anzahl im Voraus wissen muss.
Bsp.
Dabei wäre aber vorerst eine Beschränkung auf Plus und Minus sinnvoll, da man bei mal & geteilt auch noch Punkt vor Strich Beachtung einbauen müsste, was wieder etwas komplizierter wird.
Ich würde sagen, probier es mal nur mit Plus und Minus zu bauen, beachte aber dass du das Programm in sinnvolle Funktionen unterteilst, damit es 1. übersichtlich und 2. leichter zum hinzufügen weiterer Aufgaben wird.
Wenn das dann funktioniert, kannst du es wagen, Plus und Geteilt mit einzubauen.
Irgendwie fordert mich das auch heraus und habe Lust dazu es selbst auszuprobiern was ich dir da alles sage und werde es deshalb, wenn ich Zeit habe (kann evtl. paar Tage dauern - hab grad viel Anderes zu tun) versuchen zu bewerkstelligen.
Ich kann dir dann den Code vom Ergebnis posten, wenn du willst und wir könnten unsere Programme vergleichen.
Was hältst du davon?
(ich bin auch noch ziemlich programmier-noobig, noch )
@ AFE
Auch wenn es von dir sicherlich gut gemeint ist, ich glaube es geht ihm nicht um das Programm, sondern darum es selbst zu bauen um Erfahrung zu sammeln und sich besser in C++ einzuarbeiten-> da er ja in einem andern Thread nach Aufgaben suchte.
Glaub ich jedenfalls  |
|
Nach oben |
|
 |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 03.05.2003, 08:38 Titel: |
|
|
Hi,
die variante einen String einzulesen bringt zwar einige Vorteile, aber es macht die ganze Aktion auch sehr umfangrei und kompliziert. Ich habe mal so einen Taschenrechner programmiert (in TP).
Vorteil: dein Taschenrechner kann, wenn du es implementiert punkt- vor strichrechnung beachten. Auchklammern würden dann funktionieren. Und du könntest noch sachen wie bspw. (sin,cos,tan) mit einbauen.
Aber wie gesagt der Aufwand die ganze Sache zu durchsuchen ist extrem groß.
Ich kann dir nicht empfehlen, dein Programm zuerst nur auf Plus und Minus zu begrenzen, das tat ich auch damals und dann konnte ich große Teile des Codes wieder verwerfen als ich dann weitere Operationen implementieren wollte.
Ich habe es damals so geregelt, dass ich den Operatoren bestimmte Wertigkeiten gegeben habe (Achtung: Klammern brauchen höchste Wertigkeit und bei mehreren Verschachtelungen müssen innere Klammern immer +1 erhalten) und dann die String nach der höchsten Wertigkeit durchsucht habe. Und immer so weiter bis ich dann schließlich bei der Wertigkeit Null ankam und also fertig war. Dabei musst du auch beachten, dass es mehrere Teile in deiner Rechenaufgabe mit der gleichen Wertigkeit geben kann.
Ich persönlich halte diese übrigens für die beste Methode, allerdings ist es auch eine sehr aufwendige.
Gruss Tarek |
|
Nach oben |
|
 |
Ranma JLI'ler

Anmeldedatum: 10.12.2002 Beiträge: 167 Wohnort: Cadolzburg Medaillen: Keine
|
Verfasst am: 03.05.2003, 08:52 Titel: |
|
|
ich habe aus Spaß mich ne dreiviertelte Stunde hingesetzt und hab ne
Consolenanwendung geschrieben die fast alle Funktionen kann wie du willst außer der letzten in der du verlangst das bei jedem Wertepaar ein Ergebniss kommt (dazu war ich zu faul)
Es hat 120 zeilen deswegen kopier ich nicht alles rein nur nachm anfang der main funktion bis dem ende der main funktion so spar ich so 10 Zeilen
Code: | double Ergebniss;
double ChangeVar;
char RechenZ;
double InsertZ[50];//um alle Zahlen zu speichern
int IZA=0;
char InsertCH[50];//um alle rechenzeichen zu speichern
int ICHA=0;
cout <<"Der Taschenrechner 0.5"<<endl;
cin >>Ergebniss;
InsertZ[IZA]=Ergebniss;
IZA++;
while(RechenZ != '=')
{
cin >>RechenZ;
switch(RechenZ)
{
case '+':
cin >>ChangeVar;
Ergebniss=Ergebniss+ChangeVar;
cout <<"="<<endl;
cout <<Ergebniss<<endl;
//Eingegebene Zahl speichern
InsertZ[IZA]=ChangeVar;
IZA++;
//eingegebenes Zeichen speichern
InsertCH[ICHA]=RechenZ;
ICHA++;
break;
case '-':
cin >>ChangeVar;
Ergebniss=Ergebniss-ChangeVar;
cout <<"="<<endl;
cout <<Ergebniss<<endl;
//Eingegebene Zahl speichern
InsertZ[IZA]=ChangeVar;
IZA++;
//eingegebenes Zeichen speichern
InsertCH[ICHA]=RechenZ;
ICHA++;
break;
case '*':
cin >>ChangeVar;
Ergebniss=Ergebniss*ChangeVar;
cout <<"="<<endl;
cout <<Ergebniss<<endl;
//Eingegebene Zahl speichern
InsertZ[IZA]=ChangeVar;
IZA++;
//eingegebenes Zeichen speichern
InsertCH[ICHA]=RechenZ;
ICHA++;
break;
case '/':
cin >>ChangeVar;
Ergebniss=Ergebniss/ChangeVar;
cout <<"="<<endl;
//Eingegebene Zahl speichern
InsertZ[IZA]=ChangeVar;
IZA++;
//eingegebenes Zeichen speichern
InsertCH[ICHA]=RechenZ;
ICHA++;
break;
case '=':
//eingegebenes Zeichen speichern
InsertCH[ICHA]=RechenZ;
ICHA++;
break;
default:
cout<<"Falsches Rechenzeichen!Es wird nicht gewertet"<<endl;
cout <<Ergebniss<<endl;
break;
}
}
cout <<endl<<endl<<"EndErgebnis = "<<Ergebniss<<endl;
cout <<endl<<"Auflistung: "<<endl;
for(int x=0;x<(ICHA);x++)
{
cout <<InsertZ[x]<<" "<<InsertCH[x]<<" ";
}
cout <<Ergebniss<<endl;
|
hoffe alles ist klar
meine Lösung ist nicht die beste aber eine variante _________________ "Deutsche Sprache schwere Sprache"
sprach der C++er |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 03.05.2003, 09:14 Titel: |
|
|
@ Ranma
Ja, sieht eigentlich meinen (ersten) Vorstellungen nach aus.
Funktioniert das Programm denn schon mit allen Rechenarten?
@ Tarek
Wegen nur Plus und Minus zu Beginn.
Ich habe ja extra erwähnt, dass man es sinnvoll in Funktionen einteilen soll, damit es sich einfach, d.h. problemlos erweitern lässt.
So sollte man eigentlich immer Programmieren, vor allem gerade bei Spieleprogrammierung
Bsp.:
Stell dir vor du programmierst ein komplexeres 2D Ballerspielchen und im Nachhinein kommen ja logischerweise neue Ideen dazu - wäre doch etwas ... wenn man den ganzen Code nochmal wegwerfen und von neuem beginnen müsste nur um eine neue Idee zu realisieren...  |
|
Nach oben |
|
 |
Ranma JLI'ler

Anmeldedatum: 10.12.2002 Beiträge: 167 Wohnort: Cadolzburg Medaillen: Keine
|
Verfasst am: 03.05.2003, 10:01 Titel: |
|
|
@nepomuk wie weit ich es getestet habe funktionniert es schon man darf
halt keine Fehler bei der Eingabe machen außerdem ist mir noch ein kleiner Fehler aufggefallen (ohne große Bedeutung verwirrt den benützer
vielleicht) also wärs ausprobieren will
einfach den Anfang einer Normalen Konsolenanwendung schreiben text reinkopieren und beenden
um den Fehler auszubessern
by:
case '/':
cin >>ChangeVar;
Ergebniss=Ergebniss/ChangeVar;
cout <<"="<<endl; <- hier noch zeile einfügen in der das Ergebniss ausgegeben wird also cout <<Ergebniss<<endL; das kann den Benützer sonst verwirren
/ /Eingegebene Zahl speichern
also zum Thema "unktioniert das Programm denn schon mit allen Rechenarten?"
also ich denke es gibt mehr Rechenarten als +,-,* oder /
die Funktionieren einmann frei und die anderen einzufügen wäre auch nicht
schwer einfach nen neuen
case '*' mit dem Rechenzeichen, darf aber nur eines sein und
dann die Variable 'Ergebniss' verändern
das einzige problem wäre Punkt vor Strich
denn man muss ja nicht immer bestätigen wenn
man so eingiebt:
3 + 15 *2 kommt 36 raus statt durch Regel 33 _________________ "Deutsche Sprache schwere Sprache"
sprach der C++er |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 03.05.2003, 11:22 Titel: |
|
|
Ranma hat Folgendes geschrieben: |
also zum Thema "unktioniert das Programm denn schon mit allen Rechenarten?"
also ich denke es gibt mehr Rechenarten als +,-,* oder /
die Funktionieren einmann frei und die anderen einzufügen wäre auch nicht
schwer einfach nen neuen
case '*' mit dem Rechenzeichen, darf aber nur eines sein und
dann die Variable 'Ergebniss' verändern
|
Pardon, ich meinte Grundrechenarten und somit + - * /  |
|
Nach oben |
|
 |
fennec Mini JLI'ler

Anmeldedatum: 02.05.2003 Beiträge: 19 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 03.05.2003, 18:52 Titel: |
|
|
@Ranma
Der Coode sieht schon besser als meiner aus nur find ich das man am Ende noch mal alles auflisten muss die Ergebnisse stehen ja schon an dem rand
Ich würde gerne wissen wie ich das hinbekomme:
Code: |
// Einagbe
2+2+2+2+2+2+2
0 // Lösungenen
4
6
8
10
12
14
|
@nepomuk
Ich kann dir dann den Code vom Ergebnis posten, wenn du willst und wir könnten unsere Programme vergleichen.
Was hältst du davon?
(ich bin auch noch ziemlich programmier-noobig, noch )
Wir könne ja immer wieder ein prog. schreiben und gegenseitig schicken um zu schauen was man besser machen könnte ?!
Danke
mfg
fennec |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 03.05.2003, 19:00 Titel: |
|
|
fennec hat Folgendes geschrieben: |
Ich würde gerne wissen wie ich das hinbekomme:
Code: |
// Einagbe
2+2+2+2+2+2+2
0 // Lösungenen
4
6
8
10
12
14
|
|
Wenn ich mich nicht irre, speichert Ranma alle einzelnen eingegebenen Zahlen ja in einem Feld ab -> damit kann man das dann ja leicht realisieren.
Jo, das mit dem vergleichen und so können wir machen  |
|
Nach oben |
|
 |
fennec Mini JLI'ler

Anmeldedatum: 02.05.2003 Beiträge: 19 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 03.05.2003, 19:21 Titel: |
|
|
Mir fällt trotzdem nicht ein wie ich es machen soll  |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 03.05.2003, 19:23 Titel: |
|
|
Das bedeutet du hast dich evtl. noch nicht mit Feldern beschäftigt?
Oder nur (noch) keine Vorstellung wie das funzt?  |
|
Nach oben |
|
 |
fennec Mini JLI'ler

Anmeldedatum: 02.05.2003 Beiträge: 19 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 03.05.2003, 19:28 Titel: |
|
|
doch hab mich schon damit beschäftigt aber ich hab kein plan wie ich den abstand vom rand hin bekomme |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 03.05.2003, 19:52 Titel: |
|
|
Das ist ja das einfachste ;) Einfach vor die Ausgabe ein paar Leerzeichen packen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
|