Vorkompromierter Header

04/10/2012 13:45 aeo#16
Weshalb ist system("PAUSE") nicht ratsam?
Ich höre schon sehr oft dass diese Funktion sehr schlimm sei aber ich weiß leider nicht, wo die Begründung liegt.
Liegt es daran, dass das Programm "pausiert" wird und keine Antwort erwarten wird ?

Ich wollte es nur wissen, da es im Buch mit double steht, ob es bei dieser Funktion notwendig ist, eine doppelte Genauigkeit zu haben.
Double benötigt 8 Byte's und float nur 4 Byte's.
So kann ich die Hälfte der Byte's sparen, wenn ich float benutze.

Was meint den double mit "doppelte Genauigkeit"? Das es exakt und genau berechnet?
04/10/2012 15:53 .Infinite#17
Quote:
Weshalb ist system("PAUSE") nicht ratsam?
[Only registered and activated users can see links. Click Here To Register...]
04/10/2012 17:48 MrSm!th#18
Quote:
Originally Posted by dunkis View Post
Weshalb ist system("PAUSE") nicht ratsam?
Ich höre schon sehr oft dass diese Funktion sehr schlimm sei aber ich weiß leider nicht, wo die Begründung liegt.
Liegt es daran, dass das Programm "pausiert" wird und keine Antwort erwarten wird ?

Ich wollte es nur wissen, da es im Buch mit double steht, ob es bei dieser Funktion notwendig ist, eine doppelte Genauigkeit zu haben.
Double benötigt 8 Byte's und float nur 4 Byte's.
So kann ich die Hälfte der Byte's sparen, wenn ich float benutze.

Was meint den double mit "doppelte Genauigkeit"? Das es exakt und genau berechnet?
Du kannst natürlich auch nur einen float übergeben, das wird implizit konvertiert. Und das Ergebnis auch von Double einfach in einen Float konvertieren, dabei gehen halt nur Daten verloren, weil float nur halb so genau ist.

Wie du schon erkannt hast, hat Double 8 Bytes und Float nur 4. Mit Double lassen sich demnach mehr Nachkommastellen darstellen.
04/11/2012 10:48 .Punkt.#19
Quote:
Originally Posted by .Infinite View Post
[Only registered and activated users can see links. Click Here To Register...]
Danke habe das system("PAUSE") nur in einer Tutorialreihe auf Youtube gesehen und das dann einfach übernommen.
04/13/2012 13:49 aeo#20
Ich habe wieder was unaufgeklärtes.

Hier geht es um die Standardfunktionen: srand() & rand()

#1 Was bringt das, wenn eine Funktion kein "Return-Wert" oder "Argument" erhaltet?
// Vielleicht mit den oben genannten Standardfunktionen ein Beispiel machen.

#2 Wie kann ich srand ständig eine neue Zahl aufrufen lassen? Das sie zum Beispiel eine Zahl zwischen 1 und 100 auswählt.

#3 In der Aufgabenstellung stand, ich solle den Quelltext korrigieren, dabei fiel mir auf:
srand(12.5);

Das Argument ist 12.5 und das gibt er doch dem Return-Wert zurück -
Da es aber eine Gleitzahl ist, akzeptiert er es nicht.
Wie kann ich srand(12.5);
dazubringen, 12.5 zu akzeptieren?

Meine Lösungen wie: srand( double) oder srand(zahl1); blieben erfolglos.
// Dabei habe ich zahl1 als double definiert und den Wert 12.5 zugewiesen.


Was sagt ihr dazu?
04/13/2012 13:59 MoepMeep#21
Code:
  
srand ( time(NULL) );
val = rand() % max; //+1 wenn du keine 0 willst.
3. Garnicht? :>
Code:
 void srand ( unsigned int seed );
04/13/2012 14:07 aeo#22
Quote:
Originally Posted by MoepMeep View Post
Code:
  
srand ( time(NULL) );
val = rand() % max; //+1 wenn du keine 0 willst.
// Könntest du mir erklären, was diese Funktion macht? Und beschreiben? Sonst kann ich gleich copy&paste lernen :D

Code:
 void srand ( unsigned int seed );
damit willste mir was sagen?

srand erwartet kein Return-Wert aber als Argument möchte er eine Zahl zwischen 0 und +32767 von der variabel 'seed'?
Habe ich das richtig interpretiert und zur welche Frage soll die Antwort gehören.



Danke dir im voraus
04/13/2012 15:16 MrSm!th#23
Verstehe deine erste Frage nicht.

srand ist meines Wissens die Initialisierungsfunktion, mit rand erhälst du eine Pseudo-Zufallszahl.

Wenn sie zwischen 0 und 100 (wobei die 100 nicht dazu gehört) liegen soll, nimmst du den Modulo-Operator %, also
Code:
int i = rand() % 100;
//zwischen 1 und 100 (wobei die hundert dazu gehört)
int j = rand() % 100 + 1;
@3: Ich weiß nicht, was du immer mit deinem Return-Wert hast, srand ist vom Typ void oO
12.5 ist da ziemlich sinnlos, der Parameter ist vom Typ int, da wird also in 12 konvertiert, das .5 könnte man sich sparen.
12.5 wird akzeptiert, das wird nämlich konvertiert. Du hast nur nix von.

Ich weiß nun am Ende nicht ganz, was du von uns willst.
04/13/2012 16:23 Tyrar#24
Code:
srand ( time(NULL) ); // random func initialisieren, die zeit als parameter zu übergeben ist normal recht gut, so hängt das ergebnis von der zeit ab :)
val = rand() % max; // rest von 'rand()' geteilt durch 'max' plus 1
04/13/2012 16:55 MrSm!th#25
Eigentlich ist es nicht gut, weil für jemandem, der die Zeit vorhersagen kann, das Ergebnis vorhersehbar ist.
Besser sollte man zb. eine Checksum oder einen 32bit Hash von mehreren Faktoren für eine "richtige" Zufallszahl nehmen.

Quote:
rest von 'rand()' geteilt durch 'max' plus 1
Wo siehst du plus 1?
04/13/2012 18:55 Tyrar#26
Quote:
Originally Posted by MrSm!th View Post
Eigentlich ist es nicht gut, weil für jemandem, der die Zeit vorhersagen kann, das Ergebnis vorhersehbar ist.
Besser sollte man zb. eine Checksum oder einen 32bit Hash von mehreren Faktoren für eine "richtige" Zufallszahl nehmen.

Wo siehst du plus 1?
fail :D hab an deinen code ausschnitt gedacht :|

sicher, wenn man am besten noch system zeit + hwid + username + 1337 nimmt isses erst cool. aber die zeit ist schonmal nen guter ansatz!
04/14/2012 02:58 MoepMeep#27
Quote:
Originally Posted by dunkis View Post
damit willste mir was sagen?

srand erwartet kein Return-Wert aber als Argument möchte er eine Zahl zwischen 0 und +32767 von der variabel 'seed'?
Habe ich das richtig interpretiert und zur welche Frage soll die Antwort gehören.



Danke dir im voraus
Unsigned int ist maximal 32767? Alles klar :>
04/14/2012 03:56 MrSm!th#28
Nicht maximal, aber diese Range wird minimal vom Standard vorgeschrieben.
Ein Compiler darf also durchaus einem int diese Größe zuweisen.
Dass MS VS auch einem int 4 Byte und damit Zahlen bis 2^32 zuweist, ist erlaubt, aber nicht im Standard vorgeschrieben.
04/14/2012 12:47 MoepMeep#29
Quote:
Originally Posted by MrSm!th View Post
Nicht maximal, aber diese Range wird minimal vom Standard vorgeschrieben.
Ein Compiler darf also durchaus einem int diese Größe zuweisen.
Dass MS VS auch einem int 4 Byte und damit Zahlen bis 2^32 zuweist, ist erlaubt, aber nicht im Standard vorgeschrieben.
Die minimale Range von einem unsigned int ist ganz sicher nicht 32767. Wie kommst du immer auf so einen Schwachsinn?

Code:
signed int: -32767 to 32767
unsigned int: 0 to 65535
Muss ich dir den Unterschied zwischen signed und unsigned erklären? o.O
04/14/2012 14:33 Tyrar#30
Quote:
Originally Posted by MoepMeep View Post
Die minimale Range von einem unsigned int ist ganz sicher nicht 32767. Wie kommst du immer auf so einen Schwachsinn?

Code:
signed int: -32767 to 32767
unsigned int: 0 to 65535
Muss ich dir den Unterschied zwischen signed und unsigned erklären? o.O
sind 65535 nicht unsigned shorts? (mit 2byte)