Prozent



  • Kara-Duza schrieb:

    Wie sieht denn diese Formel aus, die wir da eingeben sollen?

    was prozente usw. sind, wirst du ja wissen. die rechenwege dafür finden sich sicher schnell mit google, falls nötig (dreisatz etc).
    die umsetzung im programm ist dann im prinzip nichts anderes mehr, als es mit einem taschenrechner auszurechnen.

    dieses kleine beispiel rechnet auf dem üblichen dreisatz-weg aus, wie viel 50% von 150 sind:

    double ergebnis = (150.0 / 100.0) * 50.0;
    

    das heißt auf deutsch: das ergebnis ist eine reelle zahl (d.h. mit komma) und errechnet sich aus 150 dividiert durch 100, multipliziert mit 50.
    hilft das?



  • Hallo Rant,
    Laut Aufgabenstellung soll es ein Programm sein welches es ermöglicht den Prozentwert, den Grundwert oder den Prozentsatz zu ermitteln.
    Von Was er ermittelt werden soll ist dabei unerheblich. Der Nutzer soll dann selber eingeben können. Also, wenn er den Grundwert ermitteln will, dann eben die anderen beiden Werte eingeben. Es soll in alle 3 Richtungen gerechnet werden können.
    Ich hoffe ich habe so geschrieben das du weist was ich mein. 🙄



  • Hallo Analysator,
    die allgemeinen Regeln für Prozentrechnung sind bekannt, aber wie kriegen wir die Befehlsstruktur so hin, das es funktioniert? 😕



  • Was hier noch fehlt ist die andere Hälfte der Aufgabenstellung. Gib mal die kommplette Aufgabenstellung (inkl. der Details) raus.

    Soll vorher gewählt werden was (Prozensatz/Grundwert/Prozentwert) ausgerechnet werden soll oder müssen die Zinsen (Zinsrechnung) für die Tage ausgerechnet werden etc.?

    Wie du vielleicht siehst ist es uns nicht möglich zu helfen (obwohl das eher wie Hausaufgaben machen aussieht), weil uns Grundlegende Informationen fehlen.

    Gruß
    Rudi G



  • Da hast du fast recht.
    Mein Sohn soll ein kleines Rechenprogramm erstellen, welches Prozentsatz, Prozentwert sowie Grundwert errechnen kann. Dabei möchte ich meinen Sohn etwas helfen und ihn wenigstens in die richtige Richtung schubsen, habe aber leider gar keine Ahnung von solchen Sachen. Ich kann dir ja mal reinstellen was wir schon zusammenbekommen haben. Leider geht der letzte Teil gar nicht und der vorletzte Teil rechnet falsch.
    Hier nun der Teil den wir schon gemacht haben:

    // C++.cpp: Hauptprojektdatei.

    #include "stdafx.h"

    using namespace System;

    int main(array<System::String ^> ^args)

    {
    String^ Eingabe;
    Int32 ZahlPW;
    Int32 ZahlPS;
    Int32 ZahlGW;
    Console::WriteLine("Was möchten sie berechnen?");
    Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");
    Eingabe=Console::ReadLine();
    Console::WriteLine();
    if (Eingabe == "PW") {
    Console::WriteLine("Sie möchten also den Prozentwert berechnen.");
    Console::Write("Geben sie den Grundwert ein: ");
    ZahlGW=Convert::Console::ReadLine();
    Console::Write("Geben sie den Prozentsatz (%)ein: ");
    ZahlPS=Convert::ToInt32(Console::ReadLine());
    Console::Write("{0}/{1}\t\t= ",ZahlGW,ZahlPS);
    Console::WriteLine(ZahlGW / ZahlPS);
    Console::Write(" Rest ");
    Console::WriteLine(ZahlGW % ZahlPS);
    Console::WriteLine();
    Console::WriteLine("Was möchten sie berechnen?");
    Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");
    Eingabe=Console::ReadLine();
    Console::WriteLine();
    if (Eingabe == "PS") {
    Console::WriteLine("Sie möchten also den Prozentsatz berechnen.");
    Console::Write("Geben sie also den Grundwert ein: ");
    ZahlGW=Convert::Console::ReadLine();
    Console::Write("Geben sie also den Prozentwert ein: ");
    ZahlPW=Convert::ToInt32(Console::ReadLine());
    Console::Write("{0}/{1}\t\t= ",ZahlGW,ZahlPW);
    Console::WriteLine(ZahlGW / ZahlPW);
    Console::Write(" Rest ");
    Console::WriteLine(ZahlGW % ZahlPW);
    Console::WriteLine();
    Console::WriteLine("Was möchten sie berechnen?");
    Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");
    Eingabe=Console::ReadLine();
    Console::WriteLine();
    if (Eingabe == "GW") {
    Console::WriteLine("Sie möchten also den Grundwert berechnen.");
    Console::Write("Geben Sie also den Prozentwert ein: ");
    ZahlPW=Convert::Console::ReadLine();
    Console::Write("Geben sie also den Prozentsatz ein: ");
    ZahlPS=Convert::ToInt32(Console::ReadLine());
    Console::Write("{0}/{1}\t\t= ",ZahlPW,ZahlPS);
    Console::WriteLine(ZahlPW,ZahlPS);
    Console::Write(" Rest ");
    Console::WriteLine(ZahlPW % ZahlPS);
    Console::WriteLine();
    }

    }
    }
    return 0;

    }

    Wäre für ein paar Tipps 💡 Dankbar.



  • Du solltest lernen deinen Quelltext vernüntig (und vorallem gut leserlich) "formatieren", dazugehören Absätze, nach Kommatas ein Leerzeichen etc. und natürlich die Einrückung.

    Dabei fallen die Fehler meist viel schneller auf. Desweiteren solltest du die C++-Tags im Forum benutzen wenn du Quelltext postest.

    Einfach auf die Schaltfläche "C/C++" im Editor drücken, Quelltext rein und anschließend nochmals auf die Schaltfläche "C/C++" klicken. Dann wird alles was zwischen den

    [ cpp]mein Quelltext[ /cpp]
    

    steht schön "Gehighlightet".

    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    
    {
       String^ Eingabe;
       Int32 ZahlPW;
       Int32 ZahlPS;
       Int32 ZahlGW;
    
       Console::WriteLine("Was möchten sie berechnen?");
       Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");
       Eingabe = Console::ReadLine();
       Console::WriteLine();
    
       if (Eingabe == "PW") {
          Console::WriteLine("Sie möchten also den Prozentwert berechnen.");
          Console::Write("Geben sie den Grundwert ein: ");
          ZahlGW = Convert::Console::ReadLine();
          Console::Write("Geben sie den Prozentsatz (%)ein: ");
          ZahlPS = Convert::ToInt32(Console::ReadLine());
          Console::Write("{0}/{1}\t\t= ", ZahlGW, ZahlPS);
          Console::WriteLine(ZahlGW / ZahlPS);
          Console::Write(" Rest ");
          Console::WriteLine(ZahlGW % ZahlPS);
          Console::WriteLine();
    
          Console::WriteLine("Was möchten sie berechnen?");
          Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");  
          Eingabe=Console::ReadLine();
          Console::WriteLine();
       } // Die hier hattest du nicht
    
       if (Eingabe == "PS") {
          Console::WriteLine("Sie möchten also den Prozentsatz berechnen.");
          Console::Write("Geben sie also den Grundwert ein: ");
          ZahlGW=Convert::Console::ReadLine();
          Console::Write("Geben sie also den Prozentwert ein: ");
          ZahlPW = Convert::ToInt32(Console::ReadLine());
          Console::Write("{0}/{1}\t\t= ", ZahlGW, ZahlPW);
          Console::WriteLine(ZahlGW / ZahlPW);
          Console::Write(" Rest ");
          Console::WriteLine(ZahlGW % ZahlPW);
          Console::WriteLine();
    
          Console::WriteLine("Was möchten sie berechnen?");
          Console::Write("Geben sie 'PW' für 'Prozentwert', 'PS' für 'Prozentsatz' und 'GW' für 'Grundwert' ein: ");
          Eingabe=Console::ReadLine();
          Console::WriteLine();
       } 
    
       if (Eingabe == "GW") {
          Console::WriteLine("Sie möchten also den Grundwert berechnen.");
          Console::Write("Geben Sie also den Prozentwert ein: ");
          ZahlPW = Convert::Console::ReadLine();
          Console::Write("Geben sie also den Prozentsatz ein: ");
          ZahlPS = Convert::ToInt32(Console::ReadLine());
          Console::Write("{0}/{1}\t\t= ", ZahlPW, ZahlPS);
          Console::WriteLine(ZahlPW, ZahlPS);
          Console::Write(" Rest ");
          Console::WriteLine(ZahlPW % ZahlPS);
          Console::WriteLine();
       }
       // Du hast alle If's hier unten abgeschlossen '}'
       // Das heißt nur wenn du bei der ersten Auswahl "PW" gewählt hättest, würdest du die möchlichkeit bekommen auch mal eine Andere Rechnung durch zuführen.
       return 0;
    
    }
    

    Ich würde das Programm aber folgendermaßen schreiben (Achtung: Ungetestet):

    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    
    {
       Int32 Eingabe;
       Double ZahlPW;
       Double ZahlPS;
       Double ZahlGW;
    
       Bool wiederholen = true;
    
       while (wiederholen)
       {
          Console::WriteLine("Was möchten sie berechnen?");
          Console::Write("Geben sie '1' für 'Prozentwert', '2' für 'Prozentsatz', '3' für 'Grundwert' und '0' für Programmende ein: ");
          Eingabe = Convert::Console::ReadLine(); // Funktioniert das mit Convert::Console::ReadLine() so, ich kenne das nur so Convert::ToInt32(Console::ReadLine())
          Console::WriteLine();
    
          switch(Eingabe) 
          {
             case 1:
                Console::WriteLine("Geben Sie bitte den Grundwert ein: ");
                ZahlGW = Convert::ToDouble(Console::Read());
                Console::WriteLine("Geben Sie bitte den Prozentsatz ein: ");
                ZahlPS = Convert::ToDouble(Console::Read());
                ZahlPW = ZahlPW * 100.0 / ZahlGW; // 100.0 damit das Ergebnis mit nachkomma stellen ist
                Console::WriteLine("Der Prozentwert von {0} bei einem Prozentsatz von {1} ist {2}", ZahlGW, ZahlPS, ZahlPW);
                break;
             case 2:
                //
                break;
             case 3:
                //
                break;
             case 0:
                wiederholen = false;
             default:
                Console::WriteLine("Ungueltige Eingabe");
          }
       }
    
       return 0;
    }
    

    Die restlichen Zweige (2+3) solltest du jetzt alleine machen können.

    Wie gesagt ich habe das aus dem Kopf geschrieben und ich habe schon etwas länger nicht mit CLI gearbeitet. Deswegen kann ich dir nicht garantieren das es so funktioniert, als Anregung/Lösungsansatz sollte das aber reichen.

    Gruß
    Rudi G



  • Wir haben auch schon diverse Bücher gekauft, aber bis man da drin ist vergeht bestimmt erst mal ein viertel Jahr

    Eher ne Woche, um so ganz simple Sachen machen zu können. Sieht am Anfang immer alles ganz furchtbar und unschaffbar aus, man muss sich aber nur mal dahintersetzen und die Härte haben ein paar Stunden/Tage dranzubleiben, dann kommt man schon voran.

    Und... wenn es nicht vorgegeben ist/verlangt wird würde ich *NICHT* gerade C++/CLI empfehlen, sondern "reines" C++!

    C++/CLI ist so ziemlich die komplexeste, schwierigste Sprache die es gibt (abgesehen von Exoten und "Scherzsprachen"). C++/CLI zu verwenden macht eigentlich nur in einigen wenigen, sehr speziellen Situationen Sinn.



  • Danke für den Tipp,
    leider wenden die in der Schule diese Sprache an. und das in der 8. Klasse 🤡 .
    Bald gibt es ein neues Thema und dies hier hat sich erst mal erledigt. Ich werde aber trotzdem des öfteren mal schaun, wer sich hier so rumtreibt auf diesen Seiten. Hat mir wirklich weitergeholfen. 👍 Besten Dank nochmal dafür. 🙂

    Gruß 🙂



  • Hi,

    @Kara-Duza: Du gehst auf mein letztes Posting/Quelltextbeispiel überhaupt nicht ein. Hat es bei dir funktioniert? War es richtig? Konntest du damit etwas anfangen bzw. konntest du etwas anwenden?

    hustbaer schrieb:

    Wir haben auch schon diverse Bücher gekauft, aber bis man da drin ist vergeht bestimmt erst mal ein viertel Jahr

    Eher ne Woche, um so ganz simple Sachen machen zu können. Sieht am Anfang immer alles ganz furchtbar und unschaffbar aus, man muss sich aber nur mal dahintersetzen und die Härte haben ein paar Stunden/Tage dranzubleiben, dann kommt man schon voran.

    Besonders weil man die unendlich vielen und nützlichen Klassen von .NET benutzen kann.

    hustbaer schrieb:

    Und... wenn es nicht vorgegeben ist/verlangt wird würde ich *NICHT* gerade C++/CLI empfehlen, sondern "reines" C++!

    Kann sein das es für das Verständnis besser ist, denn irgendwann wenn man einige "alte" Libs benutzen muss kommt man mit den Standard C++ Bibliotheken in Kontakt, aber mir persönlich hat die große Möglichkeit und einfach Benutzung der Klassen/Typen etc. sehr gut geholfen in die Programmierung "einzulernen".

    Damit man nicht dauernd den Code (managed und unmanaged etc.) vermischt und dadurch komplett durcheinander kommt, ist C# bestimmt besser da es eine "festere" Syntax/Form vorgibt (das habe ich aus den Empfehlungen einiger Mods/User hier im Forum rausgelesen)

    hustbaer schrieb:

    C++/CLI ist so ziemlich die komplexeste, schwierigste Sprache die es gibt (abgesehen von Exoten und "Scherzsprachen"). C++/CLI zu verwenden macht eigentlich nur in einigen wenigen, sehr speziellen Situationen Sinn.

    Wie gesagt ich hatte nur den Einstieg in C++/CLI gemacht, aus beruflichen Gründen habe ich dann C++/Qt, ISO C++, WIN API und Delphi anwenden/lernen müssen aber so extrem schwer/komplex fand ich das (C++/CLI) nicht.

    Es kann natürlich sein das wenn man tiefer in die Materie reingeht das es zutrifft aber am Anfang habe ich ziemlich wenig von der schwierigkeit bzw. komplexität gemerkt.

    Das ist nur meine Meinung, die ich mir gebildet habe in dem ca. einem Jahr in dem ich C++/CLI gelernt habe.

    Gruß
    Rudi G



  • @Rudi G:
    C++ bietet für sich viele Fallstricke und viele viele Möglichkeiten.
    Die .NET Sprachen bieten für sich nochmal viele Fallstricke und viele Möglichkeiten.
    Beides zusammen ist IMO ganz sicher zu viel, gerade für Anfänger. Mal ganz abgesehen von den "Sonderfällen", die sich an manchen Stellen ergeben (warum kann man .NET Exceptions z.B. nicht mit ihrem Typ fangen, wenn man sie "re-throwed", C++ Exceptions aber schon?).

    Auch kann man die beiden Welten kaum sinnvoll mischen, d.h. man muss immer irgendwo eine saubere Grenze im Programm ziehen, wo man von einer Welt (GC) in die andere wechselt (new/delete). Tut man das nicht, kommen ganz grausame Programme dabei raus.

    Weiters gibt es in C++/CLI viele Dinge die gleich aussehen, aber in Wirklichkeit total anders sind. Beispielsweise Destruktoren und Dispose. Beide schreibt man mit ~T, aber sie tun komplett unterschiedliche Dinge. Auch denke ich mir wird es für einen Anfänger total unverständlich sein wieso bei "nicht ref" Klassen gewisse Dinge gehen, die bei "ref" Klassen nicht gehen (z.B. Mehrfachvererbung), und umgekehrt.

    Und wenn man dann endlich halbwegs C++/CLI kann, dann wird man sich schön wundern, warum in C# auch einge ".NET Sachen" total anders funktionieren als man sie von C++/CLI her kennt. Beispielsweise die Implementierung von IDisposable, oder die Verkettung von Finalizern.

    ----

    Lieber halbwegs gut C++ oder C# können als vermurkstes C++/CLI. Und zu mehr als vermurkstem C++/CLI reicht die Zeit in einer Schlue einfach nicht.

    Ich weiss auch nicht, wieviele Firmen bereit sind, einen Programmierer frisch von der Schule weg einzustellen, wenn er im Job dann C++/CLI programmieren muss. Ich weiss nur, die Firmen die das tun, tun mir jetzt schon leid.



  • Hallo Rudi G
    Es hat leider nicht funktioniert, aber deine Strukturierungstipps haben uns weitergeholfen. Auf Einzelheiten möchte ich hier aber jetzt nicht eingehen. Leider hab ich eben viel anderen beruflichen Krams um die Ohren.
    Wenn ich mehr Zeit hab versuch ich mal das Programm einzustellen.

    Gruß K.-D.


Anmelden zum Antworten