Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » bedingung (erg==ganze zahl)??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.10.2007, 11:26 Uhr
~athan
Gast


hi!
ich habe das problem, dass ich net weiss, wie ich bedinungen wie (erg==ganze zahl)? formulieren soll. geht das überhaupt?
ich will ein programm schreiben, dass mir alle primzahlen zwischen 0 und 100 ausgibt und hatte mir das so gedacht:

eine schleife wird solange ausgeführt, wie die zahl kleiner als 100 ist, und wird mit jedem durchlauf um 1 erhöht. d.h. schonmal, dass ich eine zahl nach der anderen auf primzahlen prüfen will. im schleifenkörper soll dann eine 2. zahl mit der ersten gleichgesetzt werden (sozusagen ein klon). dann kommt eine weitere schleife, die solange ausgeführt wird, wie zahl2 größer als 0 ist (die wird mit jedem durchlauf um 1 verringert). und dann wird zahl mit zahl2 (die ja immer kleiner wird) dividiert. und dann soll ein x immer dann um 1 erhöht werden, wenn das ergebnis eine ganze zahl war!
und dann kann ich sagen, dass die zahl eine primzahl ist, wenn x=2 ist, weil es dann nur 2 zahlen gab, durch die man die zahl teilen konnte (nämlich 1 und sich selbst)!
dann ist der erste schleifenkörper vorbei, die zahl wird um 1 erhöht und das ganze geht wieder von vorne los. das sieht dann so aus:



C++:
for (zahl=1; zahl<100; ++zahl)
{
zahl2=zahl;

while (zahl2>0)
{
erg=zahl/zahl2;

if (erg == ganze zahl) <<< :screwy:
x=x+1;

--zahl2;
}
if (x==2)
printf ("%d", zahl);
printf ("\n");
}



und ich würde das gerne SO lösen dass ihr das mit links macht, is mir klar, aber ich weiss, dass mein programm funzen würde, wenn ich nur wüsste, wie man diese eine (kursive^^) bedingung da formuliert!

Dieser Post wurde am 28.10.2007 um 12:24 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.10.2007, 12:02 Uhr
mischa
Fragender


Dafür gibt es den Modulo Operator "%". Er gibt einem den Rest zurück.
c=3%2 c=1
c=3%3 c=0
Prüf einfach ob der Rest 0 ist, dann ist es eine ganze Zahl.
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.

Dieser Post wurde am 28.10.2007 um 12:05 Uhr von mischa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.10.2007, 13:37 Uhr
~athan
Gast


so?


C++:
(...)
rest=zahl%zahl2;
                  
if (rest == 0)
(...)



geht leider nicht..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.10.2007, 15:02 Uhr
Blubber2063



Nein da wird getest ob das eine gerade Zahl ist nicht eine ganze. Da ich hier davon ausgehe das du mit Integern arbeitest hast du eh nur ganze Zahlen, Nachkommastellen werden einfach abgerundet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.10.2007, 15:59 Uhr
~athan
Gast


nein hab auch float variablen und das hat auch seinen grund, ich will ja gerade mit den nachkommastellen prüfen, ob es ne primzahl is oder net. wenn x am ende = 2 ist, bedeutet das, dass nur bei 2 zahlen eine ganze zahl bei der division rausgekommen is (1 und sich selbst) und das is dann ne primzahl.

also ganz ehrlich kann man (erg==ganze zahl) <<<SO formulieren? wenn ja wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.10.2007, 16:54 Uhr
xXx
Devil


ehm das ist ne nicht so dolle Idee für einen Algo, um Primzahlen raus zu finden ...

Also ... wenn du alle Ganzzahlen haben willst, dann geht einfach:

C++:
#include <cmath>

bool is_integer(double value)
{ return (std::ceil(value) == value); }
wenn du aber gucken willst ob es eine Gerade zahl ist, dann wäre das:

C++:
bool is_even_integer(double value)
{ return is_integer() && value % 2 == 0; }
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.10.2007, 17:10 Uhr
Suba Esel



oder statt return (std::ceil(value) == value); (btw: was macht ceil eigentlich?) return (int(value) == value);

mit int(value) wird value nach int gecastet, d.h. die Nachkommastellen werden abgeschnitten.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.10.2007, 17:16 Uhr
xXx
Devil


Joa ... ist die Frage ob 2 cast's(zu int, zu double) performanter sind als der Aufruf von std::ceil(Aufrunden, egal was kommt ) ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.10.2007, 17:58 Uhr
0xdeadbeef
Gott
(Operator)


Vor allem stellt sich die Frage, wie genau der Vergleich sein soll. Zum Beispiel wird 1.0 / 3.0 * 3.0 unter Umständen nicht genau 1 sein, weil der Rechner das nicht genau darstellen kann. Für eigentliche Rechenaufgaben empfiehlt sich daher ein sog. Epsilon-Vergleich, das sieht dann so aus:

C++:
#include <cmath>

bool epsilon_equal(double x, double y, double epsilon = 1e-8) {
  return std::abs(x - y) < epsilon;
}

bool is_integer(double x, double epsilon = 1e-8) {
  return epsilon_compare(x, std::floor(x + epsilon), epsilon);
}


Damit wird dann auf 8 Nachkommastellen Genauigkeit verlangt, d.h., 0.999999999 würde als ganze Zahl erkannt. Je nachdem, wie viele Nachkommastellen du da willst, kannst du statt 1e-8 auch ein anderes Epsilon setzen, oder es hier auch einfach als Parameter angeben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.10.2007, 22:12 Uhr
öni




C++:
if (erg == ganze zahl)

ist ja nun in dem Sinne gleich bedeutend wie

C++:
if((erg%1)==0) //ganze Zahl!


Somit kann man sagen wenn die Zahl durch 1 teilbar ist dann ist sie immer gerade und nicht mit einer Nachkommastelle versehen! Auser, das weiß ich aber nicht, kann sein das wenn man 5.345%1 dann doch 0 rauskommt? Naja müsste man ausprobieren, aber das wäre die Lösung auf Athan's Problem!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: