bedinung zahl=ungerade?



  • athan schrieb:

    mhm kannste das erklären 🙄
    was bedeutet denn dann zb zahl=gerade?

    das wäre der 'else' zweig.
    🙂



  • The-Kenny schrieb:

    if(zahl%2 == 0)
    {
         //Ohne Rest durch 2 teilbar (rest 0)
    }
    else if(zahl%2 == 1)
    {
         //Nicht ohne Rest durch 2 teilbar (rest 1)
    }
    

    du musst nicht 2 mal den rest ermitteln. zahl%2 ist entweder 0 oder 1 (false oder true) d.h. beim 'else' ist kein weiterer test nötig.
    🙂



  • oha sry ich hab mei frage bissl falsch gestellt merk ich grad ^^
    will ne bedinung die so aussieht: "zahl=ganze zahl"
    kp voll vertan +g+



  • Bouncer schrieb:

    The-Kenny schrieb:

    if(zahl%2 == 0)
    {
         //Ohne Rest durch 2 teilbar (rest 0)
    }
    else if(zahl%2 == 1)
    {
         //Nicht ohne Rest durch 2 teilbar (rest 1)
    }
    

    du musst nicht 2 mal den rest ermitteln. zahl%2 ist entweder 0 oder 1 (false oder true) d.h. beim 'else' ist kein weiterer test nötig.
    🙂

    War nur als Beispiel gedacht, um zu zeigen, wie man auf ungerade Zahlen prüfen kann 😉



  • Dann liegt deine Zahl vermutlich als Gleitkommazahl vor. Hier hilft floor weiter.

    if (x - floor(x) < epsilon)
    {
        // x ist eine Ganzzahl
    }
    

    epsilon ist die gewünschte Genauigkeit. Als default kann man hier

    #include <climits>
    std::numeric_limits<T>::epsilon()
    // bzw.
    FLT_EPSILON
    DBL_EPSILON
    LDBL_EPSILON
    

    verwenden. Je nach dem, welchen Typ deine Zahl hat.



  • groovemaster schrieb:

    Dann liegt deine Zahl vermutlich als Gleitkommazahl vor.

    der OP fragte nach 'gerade' oder 'ungerade'. die unterscheidung gibts nicht bei reellen zahlen.
    🙂



  • Du solltest lesen lernen. 😉



  • groovemaster schrieb:

    Du solltest lesen lernen. 😉

    na, so ein schlingel aber auch 😉



  • ja sorry ^^

    also das is so, ich versuche ein programm zu schreiben, das mir alle primzahlen zwischen 0 und 100 ausgibt. soweit ich bis jetzt geschrieben habe müsste das eigentlich auch funzen, mein einziges problem ist eben, dass ich net weiss, wie ich dem pc klarmachen soll, dass eine bedinung nur dann erfüllt is, wenn eine bestimmte variable eine ganze zahl ist.

    und ich weiss eben net wie ich sone bedingung formulieren soll. eigentlich sowas wie if (variable==ganze zahl) hab auch schon if (variable==integer) probiert 🙄

    mfg
    ps: sorry nochmal, is jetz alles durcheinabder hier +g+



  • athan schrieb:

    also das is so, ich versuche ein programm zu schreiben, das mir alle primzahlen zwischen 0 und 100 ausgibt.

    primzahlen sind doch sowieso nur 'natürliche zahlen'. von daher brauchste dich gar nicht mit floats herumzuärgern.
    🙂



  • Äh.
    Wenn du z.B. prüfen willst ob das Ergebnis einer Division eine ganze Zahl ist, dann prüfst du das mit dem % Operator (der Ermittelt den Rest der Division):

    if ((a % b) == 0)
    {
        // "a / b" ist eine ganze zahl
    }
    

    Sonst wüsste ich nicht wo man zum Primzahlen Berechnen prüfen müsste ob irgendwas eine ganze Zahl ist, da man nur mit ganzen Zahlen arbeitet.



  • Wenn es ne voll stylische primzahlenberechnung sein soll, dann mach es so.

    void prim(int a,int max) {
    	int b=1;
    	switch(a-max) {
    		for(;b<a;b++){
    			switch(a%b){
    				case 0:
    					prim(++a,max);
    					return;
    				default:
    					continue;
    			}
    			default:
    				continue;
    		}
    		std::cout<<a<<std::endl;
    		prim(++a,max);
    		case 0:
    			break;
    	}
    }
    
    int main (void) {
    	prim(2,100);
    	return 0;
    }
    

    😃



  • also ich 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:

    for (zahl=1; zahl<100; ++zahl)
    {
    zahl2=zahl;
    while (zahl2>0)
    {
    zahl/zahl2=erg;

    if (erg == ganze zahl)
    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!



  • steht doch schon da



  • hustbaer schrieb:

    (...)Sonst wüsste ich nicht wo man zum Primzahlen Berechnen prüfen müsste ob irgendwas eine ganze Zahl ist, da man nur mit ganzen Zahlen arbeitet.

    wollte nur erlären warum ich auf ganze zahlen prüfen will 😉



  • außerdem hilft mir das leider immernochnet weiter.
    wenn du dir ma meinen quelltext ansiehst, kannste sehen, dass dein vorschlag da nicht reinpasst 😕

    ich will doch einfach nur (erg=ganze zahl?!) formulieren, geht das denn nicht??



  • klar geht das, wurd ja auch schon mehr als einmal erwähnt 😃

    if(zahl % 2)
      // rest == 1: ungerade
    else
      // rest == 0: gerade
    


  • ich rede aber schon lange netmehr von gerade und ungerade 😃



  • athan schrieb:

    ich rede aber schon lange netmehr von gerade und ungerade 😃

    thordk lebt noch in der Steinzeit ...



  • Wie es mit "ganze zahl" geht wurde auch schon gesagt. 🙄


Anmelden zum Antworten