Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

29.04.2013, 14:50

Exponentialfunktionen...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Exponentialfunktionen
#include <iostream>
using namespace std;
#include "windows.h"

int main()
{
    int Kästchen = 0; long Körner;
    cout << "Auf dem ersten Schachbrett liegt ein Korn und auf dem nächsten jeweils doppelt so viel..";
    cout << "\nGib ein, beim wievielten Kaestchen du wissen willst, wieviele Koerner dort liegen: ";
    cin >> Kästchen;
    if (Kästchen > 0 && Kästchen <= 64);
    {
        int Körner = (2^(Kästchen - 1));
        cout << "\nDie Anzahl der Koerner auf diesem Kaestchen betraegt: " << Körner;
        Sleep(10000);
    }
    if (Kästchen < 0 || Kästchen > 64)
    {
        cout << "Error.";
        Sleep(5000);
    }
    return 0;
}


Es kommen falsche Werte raus, ohne dass irgendein Fehler angezeigt wird ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

29.04.2013, 15:03

Bei C++ steht ^ für XOR. Im Math Header ist die pow Funktion. Das ist was du suchst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

29.04.2013, 15:13

Falls Du über die Aufgabe hinaus was lernen willst:

Die variable "Körner" ist doppelt definiert, einmal in der main() und einmal innerhalb des if()-Gültigkeitsbereichs. Damit "schattiert" die innere Variable die äußere, aber beide haben trotzdem voneinander unabhängige Werte. Lösche einfach die äußere, Du brauchst sie eh nicht.

Ein int hat in den meisten Fällen* nur 32 Bit, kann also nur Körnerzahlen bis 32 Kästchen aufnehmen. Du brauchst für die Variable "Körner" einen long long int oder besser einen uint64_t aus dem Header <stdint.h>.

Deine Formel-Klammersetzung ist falsch. Ein Kästchen enthält 1 Reiskorn, zwei Kästchen enthalten insg. 3 Körner, drei Kästchen enthalten 7... die Formel sollte also "Zwei hoch (Kästchen) minus 1" lauten.

Deine Formel klappt auch nach Umstellung auf uint64_t nur dank Überlauf für 64 Felder, da ein 64Bit-Integer nur Zahlen bis "2 hoch 64 minus 1" darstellen kann.



* Ein int oder unsigned int hat bei Visual C++ und auch bei GCC immer 32Bit. Sowohl in 32Bit-Programmen als auch in 64Bit-Programmen. Es gibt aber exotische Kompiler, bei denen in einer 64Bit-Anwendung ein int bereits 64Bit hat.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

4

29.04.2013, 15:28

Ich hab mich mal versucht, ein bisschen schlau zu machen, aber irgendein (wahrscheinlich kleiner) Fehler ist da immer noch:

Fehlermeldung:
1>c:\dokumente und einstellungen\denis\eigene dateien\visual studio 2010\projects\schachbrett\schachbrett\quelle2.cpp(14): error C2668: 'pow': Mehrdeutiger Aufruf einer überladenen Funktion
1> c:\programme\microsoft visual studio 10.0\vc\include\math.h(583): kann 'long double pow(long double,int)' sein
1> c:\programme\microsoft visual studio 10.0\vc\include\math.h(535): oder "float pow(float,int)"
1> c:\programme\microsoft visual studio 10.0\vc\include\math.h(497): oder "double pow(double,int)"
1> bei Anpassung der Argumentliste '(int, int)'

Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Exponentialfunktionen
#include <iostream>
using namespace std;
#include "windows.h"
#include "cmath"
int main()
{
    int Kästchen = 0;
    cout << "Auf dem ersten Schachbrett liegt ein Korn und auf dem nächsten jeweils doppelt so viel..";
    cout << "\nGib ein, beim wievielten Kaestchen du wissen willst, wieviele Koerner dort liegen: ";
    cin >> Kästchen;
    if (Kästchen > 0 && Kästchen <= 64);
    {
        long Körner = pow(2,(Kästchen-1));
        cout << "\nDie Anzahl der Koerner auf diesem Kaestchen betraegt: " << Körner;
        Sleep(10000);
    }
    if (Kästchen < 0 || Kästchen > 64)
    {
        cout << "Error.";
        Sleep(5000);
    }
    return 0;
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

29.04.2013, 15:47

Steht doch da. Er schlägt dir die Varianten vor die er kennt und welche er bei deiner Version annehmen kann. Du benutzt eine Version mit 2 int als Parameter. int würde er zum Beispiel in float, double oder long double casten. Als 2ter Parameter soll ein int Wert benutzt werden und als erster entweder long, double, oder long double.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

6

29.04.2013, 18:12

Danke an alle!
Der fertige, etwas überarbeitete Code lautet übrigens:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Exponentialfunktionen
#include <iostream>
using namespace std;
#include "windows.h"
#include "cmath"
int main()
{
    int Kästchen = 0;
    cout << "Auf dem ersten Schachbrett liegt ein Korn und auf dem nächsten jeweils doppelt  so viel..";
    cout << "\nGib ein, beim wievielten Kaestchen du wissen willst, wieviele Koerner dort lie- gen: ";
    cin >> Kästchen;
    if (Kästchen > 0 && Kästchen <= 64);
    {
        int x = (Kästchen - 1);
        double y = 2;
        double Körner = pow(y,x);
        system("cls");
        cout << "\nDie Anzahl der Koerner auf diesem Kaestchen betraegt: " << Körner;
        Sleep(5000);
    }
    if (Kästchen < 0 || Kästchen > 64)
    {
        system("cls");
        cout << "Error.";
        Sleep(5000);
    }
    return 0;
}

7

29.04.2013, 18:30

Kontrollier noch mal deine includes.
Und deine Formel ist immer noch falsch.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

29.04.2013, 19:50

Willst du wissen wie viele Körner auf der letzten Kachel sind, oder wie viele dann insgesamt da sind? Bei einem Feld hätte man ja 1 Korn. Bei 2 Flendern 1 + 2 = 3 Körner und so weiter. Vielleicht ist der Wikipediaartikel zu dem Thema ja interessant.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige