Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche dringend hilfe

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 ] > 2 < [ 3 ]
010
14.11.2004, 19:52 Uhr
0xdeadbeef
Gott
(Operator)


Waaaaah! goto et al? Das ist mal ziemlich umständlich. Schau dir mal das hier an:

C++:
#include <iostream>
#include <cmath>

int op_menu() {
  int i;
  do {
    std::cout << "--- Rechner ---"    << std::endl
              << "(1) Addieren"       << std::endl
              << "(2) Subtrahieren"   << std::endl
              << "(3) Multiplizieren" << std::endl
              << "(4) Dividieren"     << std::endl
              << "(5) Quadrieren"     << std::endl
              << "(6) Wurzeln"        << std::endl
              << "(7) Beenden"        << std::endl;

    std::cin >> i;
  } while(i < 1 || i > 7);

  return i;
}

int main() {
  int op_code;
  bool quit = false;

  while(!quit) {
    double x, y;

    op_code = op_menu();
    switch(op_code) {
    case 1:
    case 2:
    case 3:
    case 4:
      std::cout << "Bitte geben Sie zwei Zahlen ein: " << std::flush;
      std::cin >> x >> y;
      switch(op_code) {
      case 1: std::cout << x << " + " << y << " = " << x + y << std::endl; break;
      case 2: std::cout << x << " - " << y << " = " << x - y << std::endl; break;
      case 3: std::cout << x << " * " << y << " = " << x * y << std::endl; break;
      case 4: std::cout << x << " / " << y << " = " << x / y << std::endl; break;
      }
      break;
    case 5:
    case 6:
      std::cout << "Bitte geben sie eine Zahl ein: " << std::flush;
      std::cin >> x;
      switch(op_code) {
      case 5: std::cout << x << "^2 = " << x*x << std::endl; break;
      case 6: std::cout << "sqrt(" << x << ") = " << std::sqrt(x) << std::endl; break;
      }
      break;
    default:
      quit = true;
    }
  }

  return 0;
}


Ich habs grad in ner Viertelstunde zusammengekloppt, ist also nicht der schönste Code, den ich je geschrieben habe, aber er funktioniert, und, großer Vorteil, er hat keine gotos drin. Vielleicht findest du ja ein paar Anregungen für deinen Code.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.11.2004, 19:58 Uhr
morbid



wah naja kein comentar wie gesagt ich bin ja anfänger^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
14.11.2004, 19:59 Uhr
morbid



hey aber ich hatte ein stylisches readme^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
14.11.2004, 20:51 Uhr
0xdeadbeef
Gott
(Operator)


Ich weiß nicht...ich finde, readmes sollten eher übersichtlich als stylisch sein...

Ich geb dir mal ein paar grundlegende Tips über Programmierstil, die dir weiterhelfen könnten:

1. keine gotos
2. keine gotos
3. keine gotos
4. Implementiere möglichst alles nur einmal. Doppelter Code wird schnell unübersichtlich - in diesem Fall zum Beispiel hab ich das einlesen der Zahlen gekapselt, so dass du nicht vier mal den Code zum Einlesen von zwei Zahlen und zweimal für eine Zahl hast.
5. Code sinnvoll kapseln. Ab einer bestimmten Größe werden Routinen unübersichtlich, deswegen macht es Sinn, code in Subroutinen auszulagern. Das ist übrigens auch eine gute Möglichkeit zur Codekapselung (siehe Punkt 4). In diesem Fall hab ich das zum Beispiel mit der Operationsauswahl gemacht.

Den Kram hab ich in diesem Beispiel auch nur so halb durchgezogen, ist wie gesagt nur so hingekladdet - verkaufen würd ich den Code niemandem
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.11.2004, 14:15 Uhr
morbid



es wa ja übersichtlich und äuserst stylish zu gleich muss ja nicht ein wiederspruch sein

man du hast wohl was gegen gotos.. ich weis nicht was an gotos so schlecht sein soll gut vielcht liegts daran das ich noch nicht so viel ahnung hab von c++ aber es scheint mir doch nicht übel zu sein gotos zu benutzen....
und zum andern was du gesagt hast:

jo stimmt^^

ahja doppelt wars ja nur weil ich 2 sprachen hatte.... aber naja ist ja auch wurscht ich glaub ich überarbeite das ganze nochmal und tue weita lernen^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
15.11.2004, 16:23 Uhr
0xdeadbeef
Gott
(Operator)


goto provoziert Spaghetti-Code. Mathematiker finden das toll, weil sich Spaghetti-Code so einfach analysieren lässt, aber als Programmierer schlägt man sich in aller Regel mit komplexeren Problemen als der Berechnung des kleinsten gemeinsamen Teilers rum, und da ist sowas tödlich. Komplexe Probleme erfordern nun mal komplexe Mittel - du kannst ja auch kein Auto mit einem Feuerstein bauen.

Ich hatte bei deinem Code zum Beispiel ernsthafte Verständnisprobleme, und ich nehme mal an, dass du beim Coden auch viele "Huh, wo war ich denn grad nochmal..."-Momente hattest. Wie viele Bugs sich noch darin verstecken, mag ich nicht mal abzuschätzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
15.11.2004, 18:23 Uhr
morbid



hm naja wenn mans so betrachtet...
aber solangs funktioniert^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
15.11.2004, 19:58 Uhr
(un)wissender
Niveauwart



Zitat von morbid:
[...]aber solangs funktioniert[...]

Sehr schlechte Einstellung...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
15.11.2004, 20:08 Uhr
morbid



hey ich mach goto weil ich das im moment nicht anders kann also ist es nicht weiter schlimm
wenn ich das mache
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
15.11.2004, 20:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


schon schlimm das du das machst, weil wenn man sich nicht gleich daran gewöhnt gotos mit while/for/sonstwas schleifen auszudrücken wirste auch nicht weiterkommen, also nochmal 5 tipps:

1. keine gotos
2. niemals gotos
3. absolut nie gotos
4. niemals basic-style-gotos
5. niemals nie gotos!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


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: