Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Primzahlen und Schleifen (Hilfe)

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
02.12.2004, 11:10 Uhr
Metzzzo



Tagchen,
ich bin neu hier und durchaus neu auf dem Gebiet des Programmierens!

So einige Grundkentnisse habe ich bereits durch kleine Übungen und Berufsschule, wie dem auch sei. Ich häng hier gerade an einem Programm und komm net weiter bzw. keine Variante klappt so wie es soll.

Und zwar, ich soll mit Hilfe von Schleifen ein kleines Programm schreiben das mir einfach alle Primzahlen while(<100000) berechnet und ausgibt. (Ohne das der Benutzer vorher etwas eintippt).

Doch ich hängt irgendwie daran, das ich nicht hinbekomme die entsprechenden IF Teile zu schreiben die mir das ganze berechnen um sagen zu können, die zahl ist prim oder nicht!

Kann mir evtl. einer nen Tipp geben oder kurz erklären wie ich das machen könnte?

mfg
Metzzzo eigentlich Metzzo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.12.2004, 11:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


kannst mal im forum zu suchen hatten wir schon ein paar mal...
z.b. hier
betreff deines z's zuviel im Nick... schreib ne Postmessage an FloSoft der ändert das dann...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.12.2004, 11:37 Uhr
~Metzzzo
Gast


kann damit net viel anfangen is mir zu komplet da ich viele Sachen die darin enthalten sind, noch garnet kenne. auch jedenfall geht das einfacher..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.12.2004, 11:49 Uhr
(un)wissender
Niveauwart


Doller Kommentar...

Wie soll es noch einfach gehen?

C++:
#include <cmath>

unsigned isPrim(unsigned digit)
{
        if(digit % 2 == 0)
            return 0; //Zahl is gerade oder 0
        
        unsigned square_root = static_cast<unsigned>(std::sqrt(digit) + 1);
        
        for(unsigned i = 3; i < square_root; i += 2)
        {
            if(digit % i == 0)
                return 0;
        }
        
        return digit;
}


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 02.12.2004 um 11:57 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.12.2004, 11:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn du die einfache Universallösung rausbekommen hast kannst du die uns ja posten
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.12.2004, 12:54 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von (un)wissender:
Doller Kommentar...

Wie soll es noch einfach gehen?

C++:
#include <cmath>

unsigned isPrim(unsigned digit)
{
        if(digit % 2 == 0)
            return 0; //Zahl is gerade oder 0
        
        unsigned square_root = static_cast<unsigned>(std::sqrt(digit) + 1);
        
        for(unsigned i = 3; i < square_root; i += 2)
        {
            if(digit % i == 0)
                return 0;
        }
        
        return digit;
}




Überdenke den code. Ich habe ihn zwaqr noch nicht ausprobiert, aber er müsste falsche ergebnisse liefern (25, 49, 81 ...)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.12.2004, 13:03 Uhr
(un)wissender
Niveauwart


OK, der war ungetestet, jetzt wird getestet...
Nö ist korrekt.


C++:
#include <iostream>
#include <cmath>

unsigned isPrim(unsigned digit)
{
        if(digit % 2 == 0)
            return 0; //Zahl is gerade oder 0

        unsigned square_root = static_cast<unsigned>(std::sqrt(digit) + 1);

        for(unsigned i = 3; i < square_root; i += 2)
        {
            if(digit % i == 0)
                return 0;
        }

        return digit;
}

int main()
{
    for(unsigned i = 0; i < 100; ++i)
    {
        if(isPrim(i) != 0)
        {
            std::cout << i << "|";
        }
    }
    std::cout << std::endl;
    return 0;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.12.2004, 15:20 Uhr
~Metzzzo
Gast



Zitat von Verfasser:
unsigned square_root = static_cast<unsigned>(std::sqrt(digit) + 1);



mit der Zeile kann der compiler nix anfangen..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.12.2004, 15:55 Uhr
virtual
Sexiest Bit alive
(Operator)


@(un)wissender

1 ist keine Primzahl
2 ist eine Primzahl

Der Fehler ist zwar anders als erwartet, das gebe ich zu.

Vorschlag:

C++:
bool isPrime(unsigned n)
{
    if (n==2 || n==3) return true;
    if (n<5 || n%2==0) return false;

    for(unsigned i=3; i*i<=n; i+=2)
        if (n%i==0) return false;

    return true;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.12.2004, 18:07 Uhr
(un)wissender
Niveauwart


@virtual
Ok, dann halt so:

C++:
#include <iostream>
#include <cmath>

unsigned isPrim(unsigned digit)
{

        if(digit == 1)
            return 0;

        if(digit == 2)
            return digit;
            
        if(digit % 2 == 0)
            return 0; //Zahl is gerade oder 0

        unsigned square_root =
            static_cast<unsigned>(std::sqrt(static_cast<float>(digit)) + 1);

        for(unsigned i = 3; i < square_root; i += 2)
        {
            if(digit % i == 0)
                return 0;
        }

        return digit;
}

int main()
{
    for(unsigned i = 0; i < 100; ++i)
    {
        if(isPrim(i) != 0)
        {
            std::cout << i << "|";
        }
    }
    std::cout << std::endl;
    return 0;
}



@~Metzzzo
Ein cast fehlte, ist in der obigen Version korrigiert.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: