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

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

1

06.06.2007, 22:35

Musterlösungen zu Aufgaben?

So, ich bin jetzt im Vektoren-Kapitel angelangt. Ich habe mich auch schon an der ersten Aufgabe probiert. Ich habe sie auch soweit gemeistert, weiß nur nicht, ob das so auch stimmt.
Ich schreibe
x=-0.062946; y=-0.058946; z=-0.053277;
in die Logdatei. Im Buch steht ja, dass es annähernd 0,0,0 sein soll. Ist das genau genug? Bzw. im Buch steht auch etwas davon, dass die Lösungen auf der Seite veröffentlicht werden, finde aber nichts :(

Hoffe, da gibts was.

Hier nochmal mein 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <TriBase.h>
#include <windows.h>
#include <iostream>
#include <string>


using namespace std;


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int showCmd)
//int main()

{
    if(tbInit())
        tbWriteToLog("TriBase konnte nicht initialisiert werden!");
    else
    {
        tbVector3 *vectors = new tbVector3[5000];
        tbVector3 all;

        for( int i = 0; i < 4999; i++)
        {
            vectors[i] = tbVector3Random();
            vectors[i]*tbFloatRandom(0.0f, 10.f);
            all += vectors[i];
        }

        all /= 5000;
        char buffer[50];

        sprintf(buffer, "x=%f; y=%f; z=%f;", all.x, all.y, all.z);
        tbWriteToLog(buffer);


        TB_SAFE_DELETE_ARRAY(vectors);

    }


    tbExit();
}



MfG

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

06.06.2007, 22:42

Das passt schon so... Das soll nur zeigen, dass das Integral der Zufallswerte Null ist... Kurz, dass die RandomFunktion richtig arbeitet... ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

06.06.2007, 23:41

Einen Fehler hast du aber drin... entweder du verwendest 5000 Vektoren oder du teilst durch 4999 - ein Mix aus beiden Varianten ist zwar real kein Problem aber theoretisch falsch ;)

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

4

07.06.2007, 00:02

Ich hatte hier letztens irgendwann mal gelesen, dass man da 1 abziehen muss... eigentlich doch auch richtig, da vectors von [0] bis [4999] geht, oder?

Naja, mit 5000 in der for-schleife gehts auch^^

5

07.06.2007, 01:32

bei 4999 dann mit <= statt <
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

07.06.2007, 02:03

Zitat von »"Schnitter"«

Ich hatte hier letztens irgendwann mal gelesen, dass man da 1 abziehen muss... eigentlich doch auch richtig, da vectors von [0] bis [4999] geht, oder?

Naja, mit 5000 in der for-schleife gehts auch^^


Die Abbruchbedingung ist ja i < 5000 (sprich: i kleiner als 5000) nicht i <= 5000 (sprich: i kleiner oder gleich 5000). Darum nimmt i einen Maximalwert von 4999 an.

Warum nicht statt:

C-/C++-Quelltext

1
TB_SAFE_DELETE_ARRAY(vectors);


einfach:

C-/C++-Quelltext

1
delete [] vectors;


? :roll:

Und statt sprintf( ... ) lieber eine sichere C++ Alternative?
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

07.06.2007, 08:52

Das genialste an SAVE_DELETE... find ich immer, dass nicht einer von den Leuten die das nutzen testet, ob der Pointer nach dem new zufällig NULL ist :badgrin:

Schnitter

Treue Seele

  • »Schnitter« ist der Autor dieses Themas

Beiträge: 141

Wohnort: Remshalden

Beruf: Schüler

  • Private Nachricht senden

8

07.06.2007, 09:05

Zitat


Warum nicht statt:

C-/C++-Quelltext

1
TB_SAFE_DELETE_ARRAY(vectors);

einfach:

C-/C++-Quelltext

1
delete [] vectors;


?:roll:

Ok, hört sich auch nett an^^


Zitat


Und statt sprintf( ... ) lieber eine sichere C++ Alternative?

Was wäre denn z.B. eine?

Ok, die Sache mit den 5000 hab ich jetzt verstanden ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

07.06.2007, 09:08

Zitat von »"grek40"«

Das genialste an SAVE_DELETE... find ich immer, dass nicht einer von den Leuten die das nutzen testet, ob der Pointer nach dem new zufällig NULL ist :badgrin:


bei nem normalen new kann er das auch net sein ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

07.06.2007, 11:36

Zitat von »"dot"«

Zitat von »"grek40"«

Das genialste an SAVE_DELETE... find ich immer, dass nicht einer von den Leuten die das nutzen testet, ob der Pointer nach dem new zufällig NULL ist :badgrin:


bei nem normalen new kann er das auch net sein ;)


Ja, der Operator new gibt laut Standard niemals einen 0 Pointer zurück sondern wirft eine Exception vom Typ std::bad_alloc. Aber es gibt ein Alternatives new das keine Exception wirfst und einen Nullpointer zurückgibt (wie früher, in den guten alten Zeiten ;)):

C-/C++-Quelltext

1
int* ptr = new (std::nothrow) int;


Zitat von »"Schnitter"«

Zitat



Zitat


Und statt sprintf( ... ) lieber eine sichere C++ Alternative?

Was wäre denn z.B. eine?



Zum Beispiel std::stringstream.
@D13_Dreinig

Werbeanzeige