JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ed18cdbc77d8feabadef0d46c080471bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

frage zu meinem Rechen Programm
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fennec
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 19
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 22:26    Titel: frage zu meinem Rechen Programm Antworten mit Zitat

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';
      }
   
}


Very Happy 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 Smile

mfg

fennec
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 23:02    Titel: Antworten mit Zitat

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. Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 23:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 02.05.2003, 23:14    Titel: Antworten mit Zitat

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.
Code:

34+56-34+2+6-2

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. Smile

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. Cool

Was hältst du davon? Very Happy
(ich bin auch noch ziemlich programmier-noobig, noch Wink)

@ 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 Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 39
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 09:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ranma
JLI'ler



Anmeldedatum: 10.12.2002
Beiträge: 167
Wohnort: Cadolzburg
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 09:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 10:14    Titel: Antworten mit Zitat

@ 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 Wink

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... Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ranma
JLI'ler



Anmeldedatum: 10.12.2002
Beiträge: 167
Wohnort: Cadolzburg
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 11:01    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 12:22    Titel: Antworten mit Zitat

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 + - * / Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fennec
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 19
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 19:52    Titel: Antworten mit Zitat

@Ranma

Der Coode sieht schon besser als meiner aus Smile 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 ?! Very Happy

Danke

mfg

fennec
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 20:00    Titel: Antworten mit Zitat

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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fennec
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 19
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 20:21    Titel: Antworten mit Zitat

Mir fällt trotzdem nicht ein wie ich es machen soll Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 20:23    Titel: Antworten mit Zitat

Das bedeutet du hast dich evtl. noch nicht mit Feldern beschäftigt?
Oder nur (noch) keine Vorstellung wie das funzt? Shocked
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fennec
Mini JLI'ler



Anmeldedatum: 02.05.2003
Beiträge: 19
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 20:28    Titel: Antworten mit Zitat

doch hab mich schon damit beschäftigt aber ich hab kein plan wie ich den abstand vom rand hin bekomme
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 03.05.2003, 20:52    Titel: Antworten mit Zitat

Das ist ja das einfachste ;) Einfach vor die Ausgabe ein paar Leerzeichen packen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum