» Zerlegung in Primfaktoren, ein Sourcecode zum rumbasteln und lernen.

C programmieren lernenNeuen Thread eröffnenNeue Antwort erstellenKleines Beispiel zur Winkelberechnung mit Klasse, Konstruktor und Destruktor
AutorNachricht
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
06.01.2014, 18:44
zitieren

Hier ein kleiner Code um (natürliche) Zahlen in ihre Primfaktoren zu zerlegen.
Man kann auch unter Angabe der Ober- und Untergrenze sich die Primzahlen
anzeigen lassen.
Die Funktion für den Test ob eine Primzahl vorliegt oder nicht, wurde überarbeitet.
Wurde in Codeblocks 17.12 geschrieben.

#include <iostream>
#include <iomanip>
#include <cmath>

void clpuf(void);
int primtest( unsigned long nummer);
void teilbarkeit(unsigned long zahl);
void Probe (unsigned long faktoren[], unsigned long d);
int MenueFrage(void);


int main(void)
{
 unsigned long zahl, slei, sleib, a, b, c, d, e, faktoren[100], kleinste, groesste;
 int frage = 12, stellen = 0;

do
switch(frage)
{
 default:
      std::cout << std::endl << "\nPrimfaktorenrechner" << std::endl;
      std::cout << "Programm beenden...............0" << std::endl;
      std::cout << "Zahlen auf Primfaktorenfrüfen..1" << std::endl;
      std::cout << "Primzahlen errechnen...........2" << std::endl;
      frage = MenueFrage();
     break;

 case 0:
      std::cout << "Programm beendet" << std::endl;
      frage = 12;
     break;

 case 1:
      std::cout << std::endl << "Primfaktorenrechner:";
      std::cout << std::endl << "Bitte eine Zahl eingeben: ";
      std::cin >> zahl;
      c = primtest(zahl);
      stellen = (int)log10(zahl) + 1; clpuf();
      if(c == 1)
       std::cout << std::endl <<" Zahl ist selber Primzahl: " << c;

      std::cout << std::endl << "Weiter mit berechnen" << std::endl;

      teilbarkeit(zahl);

       a = zahl;
       b = d = e = 0;

    for (slei= 2; slei <= zahl; slei++)
     {
      c = primtest(slei);
      if (c == 1) /// wenn c primzahl ist
      {
       for (sleib = 2; sleib <= 20; sleib++)
        {
         b = a / slei;
         d = a % slei;
         if (d) break; /// Wenn zahl durch Primzahl ein Rest bleibt
         std::cout << std::endl << "b = a / " << std::setw(stellen) << b << " = "<< std::setw(stellen) <<  a << "/ "<< std::setw(stellen) << slei << "(primzahl)";
         faktoren[e++] = slei;
         a = b;
        }
       }
      }

    std::cout << "\n-------------------------" << std::endl;
    Probe (faktoren, e);
   frage = 11;
  break;

  case 2:
       std::cout << std::endl << "Primzahlen zeigen";
       std::cout << std::endl << "Bitte kleinste Zahl eingeben: ";
       std::cin >> kleinste;
       std::cout << std::endl << "Bitte größte Zahl eingeben: ";
       std::cin >> groesste;
       std::cout << std::endl;
       for (slei = kleinste; slei <= groesste; slei++)
        {
         c = primtest(slei);
         if (c == 1) std::cout << " " << slei << " ";
        }
        frage = 11;
     break;


}while(frage != 0);

 return 0;
}

///--------------------------Ende main---------------------

void clpuf(void)
 {
 while (getc(stdin) != '\n')
    ;
 }


int primtest( unsigned long nummer)
{
 unsigned long slei, a, c, e;
 e = 1; /// Wenn primzahl e == 1 sonst 0
 a = (nummer / 2) + 2;
 // Testet nummer auf Teilbarkeit durch slei nur bis kleiner nummer, da jede Zahl durch sich selbst teilbar ist
 for(slei = 2; slei < a; slei++)
     {
      c = nummer % slei;
      //cout << "nummer=" << nummer << " slei=" << slei << " c=" << c << endl;
      /// Wenn nummer keine Primzahl ist, abbrechen, da weitere Überprüfung unnötig
      if((c == 0) && (slei < nummer)) { e = 0; break; }
     }

 return e;
}

void teilbarkeit(unsigned long zahl)
{
 unsigned long slei, c, e;
  std::cout << std::endl << "Zahl teilbar durch " << std::endl;
    for(slei = 2; slei <= zahl; slei++)
     {
      c = zahl % slei;
      if(c== 0)
       {
        std::cout << slei << "  ";
        e = primtest(slei);
        if (e == 1) std::cout << "(Primzahl) ";
        }
      }
 std::cout <<"\n--------------------------" << std::endl;
}


void Probe (unsigned long faktoren[], unsigned long d)
{
unsigned long zahl, slei;

std::cout << std::endl << "Probe: " << std::endl;
std::cout << "Zahl der Faktoren: " << d << std::endl;
for ( slei = 0; slei < d; slei++)
  std::cout << std::endl << "Faktor " << slei << " = " << faktoren[slei] ;
std::cout << std::endl;
zahl = 1;
for ( slei = 0; slei < d; slei++)
 {
  std::cout << faktoren[slei] ;
  if (slei < d - 1) std::cout << "*";

  zahl *= faktoren[slei];
 }
std::cout << "=" << zahl << std::endl << "Zahl wurde berechnet\n";
}

int MenueFrage(void)
{
 int frage = 18, i;
 std::string wastun = "";
 std::string erge[16] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","11","12","13","14","15"};

 std::cout << std::endl << "Ihre Wahl: ";
 std::cin >> wastun; // frage

 for (i = 0; i < 16; i++)
  {
   if (wastun.compare(erge[i]) == 0)
   {
frage = i;
    break;
   }
 }
 clpuf();

 return frage;
}


pn
Gast 
06.01.2014, 18:44
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Zerlegung in Primfaktoren, ein Sourcecode zum rumbasteln und lernen." gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Funktionen NORMVERT und NORMINV in c++ sourcecode!
Hallo Leute! Für alle, welche sich mal den Sourcecode für die Funktionen NORMVERT undNORMINV wünschen. Allerdings hat hier die Funktion NORMVERT den Namen NormalDistribution. Hab ich irgendwo im Netz gefunden und Umgeschrieben für codeblocks und...
[C++]von Guiseppe
0
404
01.05.2017, 14:02
Guiseppe
ITR Rückbank Zerlegung! Fragen und Erfahrungen
Ich habe vor eine ITR Rückbank komplett zu zerlegen. Weiß jemand, ob sie geklebt wurde oder ob der Stoff mit Draht an dem Polster fixiert...
von crx-88
2
193
13.02.2012, 20:28
crx-88
Fragen zur Tacho Zerlegung! Nadeln, Umbau etc.
Ich habe eine EM1 Si Tacho wo Tank und Kühlwassernadel ab sind und ich frage mich nun, wie ich die anderen Nadeln abbekomme ohne sie abzubrechen bzw. diese wieder funktionstüchtig bekommen. Oder ist sie evtl. nicht mal abgebrochen? Ich kann sie wieder...
von crx-88
4
395
20.01.2012, 00:13
vtec_paule
Zerlegung eines PDF-Files in binärer Form und anschliessendes Zusammensetzen
Hallo zusammen, vielleicht kann mir jemand bei meinem ziemlich exotischen Problem bzgl. PDFs weiterhelfen. Ich programmiere zur Zeit Cobol85 auf einer Tandem-Großrechner-Maschine. Hierbei ist es erforderlich zum Druck eines PDFs, welches als Binärffile...
[Cobol]von spurkpeter
0
505
18.06.2012, 14:18
spurkpeter
Ich will programmieren lernen
Hallo Ich habe einige fragen wie z.b. wie lange braucht man um programmieren zu können. welche sprache benötigt man wofür und wie werden solche apps erstellt, mit welcher sprache. Mit freundlichen...
[Allgemein]von nabilo
5
670
18.01.2012, 13:32
CppCoder
C programmieren lernen
Hallo Liebe Programmierer 1.Kennt Jemand eine Web Site auf der Man Programmieren Lernen Kann oder gegebenen Falls Ein Schlaues Buch indem man Programmieren lernen Kann den in dem C++ das ich im moment habe steht nichts weiter drin auser das man Vorher...
[C++]von Mr.Silent
8
688
06.07.2013, 15:46
Guiseppe
passende Programmiersprache lernen
Hallo, ich habe noch nicht viel Ahnung vom Programmieren. Ich möchte aber ein Programm entwickeln, in dem ich Informationen eingeben und aufrufen kann und dies man PC und auch von einer Handy-App darauf zugreifen kann. Meine Frage ist, welche...
[Allgemein]von sima
0
172
07.01.2019, 09:08
sima
Japaner lernen Englisch
lol...
von Vtec-Power
6
362
24.08.2007, 15:02
mgutt
wie richtig für den führerschein lernen???
leude wie lern ich den richtig :hmm: ich hab hier von meiner fahrschule nen fetten ordner bekommen mit allem scheiz wo auch unter anderen nen frage bogen drine ist von min. 500 fragen wen nicht mehr nur wie mach ich das den jetzt richtig? einfach...
von dbmaster
28
15.844
30.04.2006, 00:49
dbmaster
C++ Debuging problem beim Lernen
#include <iostream> #include <cstdio> using namespace std int main &#40;&#41; &#123; int x,y=10; for&#40;x=1; x<=5; x++&#41; &#123; cout << y << endl; y = y +5; &#125; getchar&#40;&#41;;...
[C++]von Mr.Silent
2
323
10.05.2013, 18:18
Mr.Silent
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |