[Frage] Modulo

03/04/2014 12:35 KingwondA#1
Heey,
ich habe eine Frage zu folgendem Beispiel, nämlich wie erkennt Modulo die geraden Zahlen?

Was soll das Programm machen?
Das Programm soll einen Countdown darstellen, und wenn die Hälfte erreicht ist eine Meldung ausgeben.
Der Countdown soll nur ungerade Zahlen annehmen, wenn eine gerade Zahl eingegeben wird soll eine Fehlermeldung ausgegeben werden.

Kann mir wer erklären wie Modulo das berechnet?

Code:
Code:
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
	// Variablen
	//
	int CountdownStart; // Startwert des Countdown

	// Abfrage des Startwertes
	cout << "Startwert des Countdowns: ";
	cin >> CountdownStart;

	// Bei geradem Wert das Programm verlassen
	if (CountdownStart%2 == false)
	{
		cout << "Es wurde ein gerader Wert eingegeben " << endl;
	}
	// Ansonsten weiter
	else
	{
		// Schleife für den Countdown
		for (int i=CountdownStart; i>=0; i--)
		{
			cout << "Countdown: " << i << endl;

			// Meldung, wenn die Hälfte erreicht wurde
			if (i == CountdownStart/2 + 1)
				cout << "Die Haelfte ist vorbei" << endl;
		}
	}

	return 0;
}
MfG nico
03/04/2014 12:46 th0rex#2
false wird in c++ als 0 angesehen. Wenn der Rest von einer Teilung durch 2 0 ist, ist die Zahl gerade.
03/04/2014 13:14 Padmak#3
Das Programm sollte aber == 0 überprüfen und nicht == false
Es mag so funktionieren, ist aber nicht standardkonform

Padmak
03/04/2014 13:31 buFFy!#4
Kleine Anmerkung zum Code selbst:

using namespace std; ist schlechter Stil. Lieber std::cout und std::cin schreiben.
03/04/2014 16:11 Mirco'#5
Quote:
Originally Posted by buFFy! View Post
Kleine Anmerkung zum Code selbst:

using namespace std; ist schlechter Stil. Lieber std::cout und std::cin schreiben.
Wieso ist das benutzen von using namespace std; nicht so gut?
03/04/2014 16:19 Padmak#6
[Only registered and activated users can see links. Click Here To Register...]

Wurde schon das ein oder andere Mal hier erwähnt

Padmak
03/04/2014 16:48 MrSm!th#7
Quote:
Originally Posted by Padmak View Post
Das Programm sollte aber == 0 überprüfen und nicht == false
Es mag so funktionieren, ist aber nicht standardkonform

Padmak
Doch, das ist standardkonform, in C++ gibt es eine implizite Umwandlung von bool zu int.
Ist auf diese Art nur unschön weil missverständlich.
03/04/2014 17:04 KingwondA#8
Also lieber 0 als false verwenden. OK
03/04/2014 17:11 snow#9
Quote:
Kann mir wer erklären wie Modulo das berechnet?
Modulo gibt den Rest aus, der bei einer Division entsteht. 3 % 2 (3 / 2 == 1, Rest 1) ergibt z.B. 1, 4 % 2 (4 / 2 == 2, Rest 0) ergibt 0.

Code:
if (CountdownStart%2 == false)
false ist hier gleichzusetzen mit 0, somit wird überprüft, ob der Rest von CountdownStart / 2 == 0 ist.
03/04/2014 17:35 KingwondA#10
Quote:
Originally Posted by snow911 View Post
Modulo gibt den Rest aus, der bei einer Division entsteht. 3 % 2 (3 / 2 == 1, Rest 1) ergibt z.B. 1, 4 % 2 (4 / 2 == 2, Rest 0) ergibt 0.

Code:
if (CountdownStart%2 == false)
false ist hier gleichzusetzen mit 0, somit wird überprüft, ob der Rest von CountdownStart / 2 == 0 ist.
Ahhhh
Also Modulo teilt die Aufgabe, gibt aber nur den Rest aus.