Erste Programme zum Laufen bringen



  • @_) ich danke dir. Jetzt gehts.
    Ich versteh nur nicht, warum er uns dann sowas vorgibt, wenn dann die Hälfte vom Programm nicht funktioniert. ^^

    Danke auch an die anderen. Ich werd mich noch häufiger an euch wenden ;). Will ja die Prüfung bestehen.



  • Das Programm funktioniert einwandfrei. Nur bleibt die Konsole halt nicht offen (:

    Eine Alternative ist übrigens std::cin.get(); (anstelle des cin).



  • Mittlerweile hat unser Prof gemeint, dass dies so gedacht war um uns anfänglich etwas zu verwirren.

    Es reicht wenn wir
    #include <conio.h>
    und am Ende
    getch();
    eingeben.

    Ich habe wie versprochen mittlerweile wieder eine Frage:

    #include <iostream>
    #include <conio.h>

    using namespace std;

    int main()
    {
    int zahl,z2;
    cout << "Gib eine Zahl zwischen 5 - 15 ein" << endl;

    cin >> zahl;

    if (zahl < 5 || zahl > 15)
    { cout << "Ungueltige Zahl!" << endl;
    getch();return(0);
    }
    cout << "Geben Sie eine 2. Zahl im Bereich von 5 - 15 an" << endl;
    cin >> z2;
    if (zahl < 10 && z2 < 10)
    { cout << "Die Zahlen sind beide unter 10!"<<endl;}
    else if (zahl==z2) {cout << "Die Zahlen sind Beide gleich"<<endl;}
    else {cout << "Die Summe lautet " << zahl + z2 <<endl;}

    getch();return(0);
    }

    Die dickgedruckte Zeile wird bei mir in keinem Fall ausgegeben. Wo liegt der Fehler? Wär euch wirklich sehr dankbar.

    Habe schon paar Blätter überprüft, aber ich seh den Fehler mit meinem ungeschulten Auge nicht.



  • "conio.h" ist ein DOS-Header und hat als solcher wenig mit Standard-C++ zu tun...ein cin.get() tut's da auch, und ist noch dazu unabhängig vom Betriebssystem.

    Ein Tipp zu deinem Problem: Gib mal zwei gleiche Zahlen ein, die beide >= 10 sind und sieh dir die Verwendung von else if nocheinmal an. Na?



  • Mittlerweile hat unser Prof gemeint, dass dies so gedacht war um uns anfänglich etwas zu verwirren.

    An welcher Uni bist du denn? oO



  • Ein Tipp zu deinem Problem: Gib mal zwei gleiche Zahlen ein, die beide >= 10 sind und sieh dir die Verwendung von else if nocheinmal an. Na?

    Vielen Dank, ich habs kapiert. Wenn ich Zahlen unter 10 angebe, dann wird es automatisch:

    { cout << "Die Zahlen sind beide unter 10!"<<endl;}

    Danke.



  • Neue Frage:

    Wir haben gestern ein paar Übungen bekommen, die wir lösen sollen bzw. am Montag will der Prof sie uns erklären. Ich will aber schonmal bissl Vorarbeit leisten.

    Ich muss dazu den Befehl fixed einbinden um z.B. die Zahl PI mit 3 Nachkommastellen auszugeben:

    #include <iostream>
    #include <iomanip>
    #include <math.h>

    using namespace std;

    int main()
    {

    double atan(double),a;

    a = 4 * atan(1.0);

    fixed; cout.precision(3) << a << endl;

    Ich weiß nur leider nicht, wie ich dieses fixed miteinbaue, sodass keine Fehlermeldung kommt. Ansonsten müsste ja der Vorgang so passen oder?

    Das gleiche Problem habe ich auch bei: scientific

    double c;

    c = a /= 100;

    scientific; cout.precision(2) << c << endl;

    getch();return(0);



  • cout << setprecision(2) << scientific << d << endl;
    


  • Dankeschön 🙂

    Nun funktioniert es.



  • Hallo,

    ich habe wiedermal ein kleines Problem bei der Schreibweise eines Befehls:

    q = (1+Zins)/(12*100);

    Summe = Rate * (1-q pow(n)) / (q pow(n) - q pow(n+1));

    Mir wurde gesagt, dass man z.b. 1^2 in C++ nicht schreiben kann. Darum muss man math.h einbinden und dann mit pow(n) arbeiten.
    In dem Fall wäre es halt z.b. q^n. Ich weiß nur nicht wie ich das sinnvoll mit pow eingeben kann, den wenn ich es wie oben machen, dann kommt eine Fehlermeldung im Compiler.


  • Administrator

    1. Fehlermeldung immer mit angeben!
    2. Man kann 1^2 schon schreiben, nur bedeutet es in C++ xor.
    3. Du sollst nicht math.h sondern cmath verwenden.
    4. RTFM 😉

    Grüssli



  • Vielen Dank Dravere. Mein Programm funktioniert nun. Habe es so gemacht, wies es bei dem Link angegeben war.
    Ich finds immer toll, wie schnell hier geantwortet wird. Ist super! 🙂

    Eine kleine Verständnisfrage hätte ich noch. math.h ist ja noch von C oder?
    Hat es jetzt irgendwelche Auswirkungen wenn ich dies verwende und nicht das neuere?

    Viele Grüße

    dumdidu



  • Dumdidu1 schrieb:

    Eine kleine Verständnisfrage hätte ich noch. math.h ist ja noch von C oder?
    Hat es jetzt irgendwelche Auswirkungen wenn ich dies verwende und nicht das neuere?

    Ja, <math.h> ist ein C-Header. Die Funktionen werden nicht in den Namensraum std eingebunden, mit <cmath> allerdings schon. Genau genommen wäre es dann z.B. std::pow() .



  • Ich habe wieder ein Problem mit pow():
    Nun soll ich die die Annuität ausrechnen:

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;

    int main()
    {
    cout << "*** Berechnung der jaehrlichen Annuität A ***\n" << endl;

    float a,s,z,erg;

    while (1)
    {

    cout << "Wie hoch ist die Annuitaetenschuld in EURO?" << endl;
    cin >> a;
    if (a == 0) { cout << "Das war ungueltig! " << endl; getch(); return(0); }
    cout << "In wievielen Jahren soll die Annuitaetenschuld getilgt werden?" << endl;
    cin >> s;
    if (s == 0) { cout << "Das war ungueltig! " << endl; getch(); return(0); }
    cout << "Wie hoch ist der Zinssatz?" << endl;
    cin >> z;
    if (z == 0 || z>1) { cout << "Das war ungueltig! " << endl; getch(); return(0); }

    cout << "Ihre eingegebenen Werte im Ueberblick: " << endl;
    cout << "Annuitaetenschuld:";
    cout << setfill ('.') << setw (20);
    cout << a << endl;
    cout << "Jahre:";
    cout << setfill ('.') << setw (28);
    cout << s << endl;
    cout << "Zinssatz:";
    cout << setfill ('.') << setw (20);
    cout << z << endl;

    erg = s * (z/(1-(1/((pow(1+z,s))));

    cout >> erg;

    }
    getch();
    }

    Fehlermeldung kann ich leider nicht kopieren -.-.
    Das Programm geht, solange bis ich das schwarz gedruckte eingebe. Dann funktioniert nichts mehr.



  • Irgendwie sind die Klammern falsch. Wieso zwei um pow() ?

    Außerdem hast du gar keine Abbruchsequenz für die while schleife

    Dazu noch "cout >>" statt "cout <<" Also ungefähr so:

    erg = s * (z/(1-(1/(pow(1+z,s)))));

    cout << erg << endl;



  • Das mit der Abbruchsequenz wollt ich eigentlich so haben, sodass man dass immer wieder durchmachen kann, ohne abzubrechen.
    An sich wird jetzt keine Fehlermeldung mehr angezeigt:

    In meinem Buch steht die Formel:
    Annunitätenschuld: 60000€
    8% / 0.08 jährliche Verzinsung
    Laufzeit : 5 Jahre

    Annuität = 60000*(0.08/(1-(1/1.08^5))) = 15027,39, was ich auch mit dem Taschenrechnen ausgerechnet habe.

    erg = s * (z/(1-(1/(pow(1+z,s))))); ist ja auch das gleiche, nur kommt was ganz anderes raus... Seht ihr da den Fehler? Ich sehe ihn nicht.

    Danke erstmal für deine Hilfe TheCrip, jetzt steht schonmal was da ^^.


  • Administrator

    1. Wieso kannst du die Fehlermeldung nicht kopieren?
    2. Wieso kannst du keine Beschreibung zum Fehler geben? "Funktioniert nichts mehr" kann alles heissen. Ungenauer kann man es gar nicht beschreiben.
    3. Nimm solche Formeln auseinander und mach Zwischenschritte rein.
    4. Verwende mehr Leerschläge.
    5. Du machst pow(1 + z, s) , 1.08^60000 . Korrekt wäre wohl eher pow(1 + z, 5) .
    Edit: Boah, kommt von diesen schecklichen Variablennamen (6.), dass s ist ja die Laufzeit, dass a die Schuld. Also sollte es a * z / (1 - (1 / pow(1 + z, s))) heissen, wenn mich nicht alles täuscht. Also wirklich Punkt 6: Verwende Variablen mit sinnvollen Namen.

    Grüssli



  • Zu 1. : Die Fehlermeldung erscheint bei mir in Visual Studio 2008-Eingabeaufforderung und dort kann ich nichts markieren und mit STRG+C kopieren bzw. auch so nicht kopieren, weil ich nichts - wie soll ich es sagen - greifen kann.
    Zu 2. : Man muss dazusagen, dass sich ja der Fehler auf die schwarz gekennzeichnete Zeile bezieht und das habe ich ja dazugeschrieben.
    Zu 3. und 4. : Werde ich bei den weiteren Schritten beachten. Ich hoffe, dass ich da nicht mehr auf euch zurückkommen muss :).
    Zu 5. und 6. : Oh jetzt sehe ich den Fehler erst.
    Ich stehe halt noch am Anfang und muss mich da erstmal zurecht finden und ich denke mal das solche Fehler am Anfang normal sind.
    Ich versuche aber, das nächste Mal meine Punkte konkreter zu nennen bzw. auch den Variablen sinnvollere Namen zu geben.
    Sry, aber ich hoffe, du kannst das nochmal durchgehen lassen ^^. Irgendwie muss ich mich da halt durchkämpfen, weil am Schluss ne Prüfung ansteht 🙂

    Grüsse



  • Dumdidu schrieb:

    Zu 1. : Die Fehlermeldung erscheint bei mir in Visual Studio 2008-Eingabeaufforderung und dort kann ich nichts markieren und mit STRG+C kopieren bzw. auch so nicht kopieren, weil ich nichts - wie soll ich es sagen - greifen kann.

    Doch, kannst du. Einfach im "Ausgabe"-Fenster nachschauen.

    Dumdidu schrieb:

    Zu 2. : Man muss dazusagen, dass sich ja der Fehler auf die schwarz gekennzeichnete Zeile bezieht und das habe ich ja dazugeschrieben.

    Es wäre trotzdem besser, du könntest uns den entsprechenden Fehler mitteilen. Zunächst einmal können sehr viele Dinge falsch sein.



  • Die Funktion braucht 2 Parameter. Der erste ist die Basis und der zweite der Exponent. Also: 4² wird zu pow(4, 2)


Anmelden zum Antworten