Ergebnis 1 bis 9 von 9
  1. #1
    Anfänger
    Registriert seit
    03.05.2009
    Beiträge
    15

    Standard Primzahlen Programm Problem

    Hola!

    Lerne seit gut 3 Wochen im Selbststudium C++ mit der C/C++ Referenz von Franzis, 5. Auflage und bin bei den Übungsaufgaben zur Schleifenkonstruktion angelangt, doch geht die eine Übungsaufgabe nicht bzw. ich stelle mich wohl wahrscheinlich blöd an..findet jemand den fehler?

    Code:
    //PrimzahlenProgramm
    //In CPP
    //Gibt Primzahlen von 2 bis 100 aus
    
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
    
      double zahl = 2, teiler, rest;
      float maxteiler;
    
       cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";
    
       while(zahl<=100)
    
       {
          teiler = 1;
    
          maxteiler = sqrt(zahl);
    
          do {
                teiler++;
                rest = zahl / teiler;
    
              }while((rest!=0) && (teiler<=maxteiler));
    
      if(teiler>maxteiler)
          {
            cout<<zahl<<"\nIst eine Primzahl!";
    
          }
        zahl++;
       }
       return 0;
    }
    Es sollen alle Primzahlen von 2 bis 100 ausgegeben werden..
    Kommen aber statt den Primzahlen alle Zahlen :/

    suomi

  2. #2
    Capt'n Crunch
    Registriert seit
    10.07.2008
    Beiträge
    999

    Standard

    das sieht alles sehr nach cp aus... Hast du die logik verstanden? Weist du was primzahlen sind und wie du sin anhand einer schleifeerkennst?
    Schon was von modulo gehört?
    Ansonsten sieht das ganz gut aus.
    bitcoin. Banking Is Necessary. Banks Are Not. - by Lincoln6Echo

    Das ganze Mysql usw is mir zu viel arbeit um es zu lernen

  3. #3
    Anfänger
    Registriert seit
    03.05.2009
    Beiträge
    15

    Standard

    Jap, Logik ist drin.
    Was Primzahlen sind und wie man diese anhand einer Schleife erkennt ist auch geläufig, modulo bzw. der restwert bei einer Division auch.

    Bei der zeile mit dem Befehl wo der rest definiert ist hab ichs mit dem modulo probiert, sprich statt "/" "%", da kommt aber dann irg. von "unerlaubte Fließzahlbenutzung" oder sowas, was ja auf die float deklaration anspielt...ich hab keine Ahnung wo der Fehler liegt :/

    ps: habs anhand einer Struktogramms was in dem Buch vorgegeben war gecoded, also müsste eigtl. schon stimmen

  4. #4
    Capt'n Crunch
    Registriert seit
    10.07.2008
    Beiträge
    999

    Standard

    bin leider im zug mim handy on und hab kein c compiler. Würde daheim mal nen vorschlag posten
    bitcoin. Banking Is Necessary. Banks Are Not. - by Lincoln6Echo

    Das ganze Mysql usw is mir zu viel arbeit um es zu lernen

  5. #5
    W32.FunLove
    Registriert seit
    11.08.2008
    Beiträge
    128

    Standard

    Code:
    //PrimzahlenProgramm
    //In CPP
    //Gibt Primzahlen von 2 bis 100 aus
    
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
    
      char dumb;
      int zahl = 2, teiler, rest;  // int, da keine Kommastellen entstehen. (Modulo)
      float maxteiler;
    
       cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";
    
       while(zahl<=100)
    
       {
          teiler = 1;
    
          maxteiler = sqrt(zahl);
    
          do {
                teiler++;
                rest = zahl % teiler;
    //  '/' durch '%' ersetzt;liefert sonst nicht den Rest zurück sondern Dezimalzahl
              }while((rest!=0) && (teiler<=maxteiler));
    
      if(teiler>maxteiler)
          {
            cout<<zahl<<"\nIst eine Primzahl!";
    
          }
        zahl++;
       }
       cin >> dumb;
       return 0;
    }

  6. #6
    OpCodeKiddy Avatar von EBFE
    Registriert seit
    30.03.2009
    Beiträge
    442

    Standard

    Hat das einen besonderen Grund, warum du die Zahlen als Float haben möchtest?
    Fließkommazahlen sind etwas zickig im Umgang (z.B weil man damit nicht jede Zahl exakt darstellen kann, sondern nur als Annäherung - und damit auch keine exakten Vergleiche anstellen sollte )
    Sonst:
    Code:
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
      int zahl = 2, teiler, rest;           //Zahlen statt Float als Int machen
      int maxteiler;
    
      cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";
    
      while(zahl<=100)
        {
          teiler = 1;
          maxteiler = sqrt(zahl);          //maximal soll der Test bis Wurzel laufen
          do
            {
              teiler++;
              rest = zahl % teiler;       //bleibt bei der Division ein Rest?
            }
          while((rest!=0) && (teiler<=maxteiler));
    
          if(teiler>maxteiler)                  
            {
              cout<<zahl<<"\nIst eine Primzahl!";
            }
          zahl++;
        }
      return 0;
    }
    Edit: ups, ich hätte den Tab mit dem Thread vor dem Lesen/Antworten nochmal aktualisieren sollen :|
    Geändert von EBFE (27.04.2010 um 14:26 Uhr)
    TrueCrypt/RAR/Zip Passwort vergessen und das Bruten dauert ewig? Oder brauchst du fein abgestimmte Wortlisten? Hilf dir selbst mit WLML - Word List Markup Language
    Gib Stoned/Mebroot/Sinowal und anderen Bootkits keine Chance: Anti Bootkit v 0.8.5

  7. #7
    Anfänger
    Registriert seit
    03.05.2009
    Beiträge
    15

    Standard

    das mit dem modulo habe ich auch schon so versucht doch dann zickt borland und meint :
    [C++ Fehler] primzahlen.cpp(15): E2015 Mehrdeutigkeit zwischen 'std::sqrt(double)' und 'std::sqrt(long double)'

    deswegen hab ichs versucht mit double zu umgehen..doch dann kommt
    : [C++ Fehler] primzahlen.cpp(19): E2060 Unzulässige Verwendung einer Fließkommazahl

    wegen diesem Fehler hab ich es danach mit float probiert :/
    jemand ne idee?

  8. #8
    OpCodeKiddy Avatar von EBFE
    Registriert seit
    30.03.2009
    Beiträge
    442

    Standard

    Borland ist ... seltsam
    einfach vorher die Zahl von int "manuell" in Double konvertieren
    Code:
    maxteiler = sqrt(double(zahl));
    TrueCrypt/RAR/Zip Passwort vergessen und das Bruten dauert ewig? Oder brauchst du fein abgestimmte Wortlisten? Hilf dir selbst mit WLML - Word List Markup Language
    Gib Stoned/Mebroot/Sinowal und anderen Bootkits keine Chance: Anti Bootkit v 0.8.5

  9. #9
    Anfänger
    Registriert seit
    03.05.2009
    Beiträge
    15

    Standard

    funktioniert! dankeschön

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •