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

1

01.02.2005, 14:38

Übungsaufgaben 1.4.7, 2. Aufgabe (Seite 39)

Hi @ll,
habe auch das Buch am Sa. gekauft, und finde es absolut klasse! Und nun eine Frage: in der 2. Aufgabe muss man 2 Speicherbereiche reservieren, diese mit Zufallszahlen belegen und dann die Reihen vertauschen. Nun, es klappt wunderbar mit tb-Methoden, aber ... wie belege ich nun die einzelne Speicherstellen? Gibt es dazu eine tb-Methode? Mit tbInitRandom() generiert man nur eine Zufallszahl, und nicht die Reihe oder?
Danke im Voraus,
Cya

Goergi

Frischling

Beiträge: 85

Wohnort: NÖ

  • Private Nachricht senden

2

01.02.2005, 15:32

Das hab ich mich auch schon gefragt...
ich habe deshalb vorgesorgt und mir gestern c++ für spieleprogrammierer bei amazon gekauft.
Get Firefox!!!
http://www.mozilla.com

3

01.02.2005, 18:16

also ich würde sagen das geht mit

x = tbIntRandom(0, 50)

in dem fall würde er EINE zufallszahl in x erzeugen (muss dementsprechend int sein) die werte im bereich von 0 bis 50 annehmen kann

um ne reihe vollzumachen würde ich einfach ein array erstellen und per schleife vollladen

4

02.02.2005, 10:39

Hi,
ich frage mal anders: Wie kann ich den mit tbMemAlloc(); reservierten Speicher belegen? Es muss doch eine Methode dafür geben oder?
oder : hat jemand die Lösung für die 2.Aufgabe?
Cya
::check your reality::

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

02.02.2005, 11:22

So viel ich weiß, liefert die Funktion tbMemAlloc einen void-Pointer zurück. Auf den kannst Du doch ohne weiteres zugreifen. Die Größe des reservierten Bereichs weißt Du auch, der wurde ja schließlich vorher der Funktion tbMemAlloc übergeben.

C-/C++-Quelltext

1
2
3
4
5
6
char* ptr = (char*) tbMemAlloc( _size_ );
assert(ptr); // Oder welche Fehlerbehandlung auch immer...

for (int i = 0; i < _size_; i++)
{
        ptr[i] = f( i ); // f steht hier jetzt für irgendeine "Datenquelle".

}

f steht hier jetzt für irgendeine "Datenquelle" in Form einer Tabelle, Funktion (z.B. random?) oder was auch immer...

Es gibt aber mindestens eintausend verschiedene Wege den Puffer mit Daten zu füllen. Das war jetzt eine sehr einfache.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

02.02.2005, 13:38

memcpy ist einfacher als ne schliefe....

7

02.02.2005, 14:18

Hi,

Steven77`s Vorschlag habe ich versucht zu implemtieren, es hat aber nicht geklappt:

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>

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,INT)
{
    if(tbInit())
    {
        tbWriteToLog("Error...");
    }
    else
    {
        tbWriteToLog("Engine initialisiert...");

        int size=1000*sizeof(int);

        void* memory1=tbMemAlloc(size);
        void* memory2=tbMemAlloc(size);
        void* temp=tbMemAlloc(size);

        tbWriteToLog("Speicher1 reserviert...          %d",tbMemGetSize(memory1));
        tbWriteToLog("Speicher2 reserviert...          %d",tbMemGetSize(memory2));
        tbWriteToLog("Temporärer Speicher reserviert...%d",tbMemGetSize(temp));

        for(int i=0;i<tbMemGetSize(memory1);i++)
        {
//          memory1[i]=tbIntRandom(0,1000);

        }

        memcpy(temp,memory1,size);
        memcpy(memory1,memory2,size);
        memcpy(memory2,temp,size);

        tbMemFree(memory1);
        tbMemFree(memory2);
        tbMemFree(temp);
    }

    tbExit();

    return 0;
}

Auskommentiertes funktioniert nicht (nur memory1!!!);
Andere Möglichkeit den Speicher mit Zufallszahlen zu belegen? Wie greife ich auf z.B 2.,3., oder 4. Speicherstelle?![/b]

Cya
::check your reality::

Goergi

Frischling

Beiträge: 85

Wohnort: NÖ

  • Private Nachricht senden

8

02.02.2005, 14:19

so weit ich weiß, ist ja der reservierte speicher kein array?!?
Get Firefox!!!
http://www.mozilla.com

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

02.02.2005, 14:44

((int*)(memory1))

10

02.02.2005, 20:02

Hi,

@ Nox: Danke, der Cast funktioniert jetzt, aber.... kommt ein Ausnahmefehler:

C-/C++-Quelltext

1
((int*)(memory1))[i]=tbIntRandom(0,10);

Nicht abgefangene Ausnahme in Uebung1_2.exe: 0xC0000005: Access Violation.
Wenn ich aber tbIntRandom() weglasse, geht das Compiliren ohne Probs.:

C-/C++-Quelltext

1
((int*)(memory1))[i];//=tbIntRandom(0,10);
Liegt ein Fehler in der tbIntRandom vor? :rolleyes:

Cya
::check your reality::

Werbeanzeige