Teilbarkeit in c/c++?

5 Antworten

Folgender Source-Code wurde mit codeblocks 13.12 geschrieben auf Suse Linux 13.1 besser dargestellt im www.programmierer-forum.de unter c++

include

using namespace std;

int primtest( unsigned long nummer) { unsigned long slei, a, c, e; e = 0; a = (nummer / 2) + 2; for(slei = 2; slei <= a; slei+= 1) { c = nummer % slei; if(c == 0) e++; } if (e == 0) e = 1; return e; }

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

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

cout << endl << "Probe: " << endl; cout << "Zahl der Faktoren: " << d << endl;

for ( slei = 0; slei < d; slei++) cout << endl << slei +1 << ". ter Faktor " << " = " << faktoren[slei] ; cout << endl;

zahl = 1; for ( slei = 0; slei < d; slei++) { cout << faktoren[slei] ; if (slei < d - 1) cout << "*";

zahl = faktoren[slei]; } cout << "=" << zahl << endl << "Zahl wurde berechnet"; } unsigned long Faktorentest(unsigned long zahl, unsigned long (faktoren)[100]) { unsigned long slei, sleib, a, b, c, d, e;

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

for (slei= 2; slei <= ((zahl / 2) + 2); slei++)
 {
  c = primtest(slei);
  if (c == 1)
  {
   for (sleib = 2; sleib <= 25; sleib++)
    {
     b = a / slei;
     d = a % slei;
     if (d) break;
     cout << endl << "b = a / slei: " << b << " = " <<  a << "/ " << slei << "(primzahl)";
     (*faktoren)[e++] = slei;
     a = b;
    if (b == 1) goto fertig;
    }
   }
  }

fertig: return e; } int main(void) { unsigned long zahl, c, e, faktoren[100]; char frage;

eingabe: cout << endl << "Primfaktorenrechner:"; cout << endl << "Bitte eine Zahl eingeben: "; cin >> zahl; c = primtest(zahl); if(c == 1) { cout << endl <<" Zahl ist selber Primzahl: " << c; goto frage; }

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

teilbarkeit(zahl); e = Faktorentest(zahl, &faktoren);

Probe (faktoren, e);

frage: cout << endl << "nocheinmal(j/n): "; cin >> frage; if (frage == 'j') goto eingabe;

cout << endl << "Programmende" ; }

Zuerstmal: Keine gotos verwenden! Zumindest nicht als Anfänger, das ist schlechter Stil.

Zur eigentlichen Frage:

     if(7 % 4 == 0)
         cout << "teilbar!";
     else
         cout << "nicht teilbar";
ceevee  12.12.2012, 23:28

Zuerstmal: Keine gotos verwenden! Zumindest nicht als Anfänger [..]

Fortgeschrittene und Profis sollten auch auf goto verzichten. :)

0
DoTheBounce  12.12.2012, 23:37
@ceevee

Ich hab da mal einen Satz gelesen, den fand ich ganz passend. Bekomme ihn leider nicht mehr zusammen, aber sinngemäß war er: Schlechte Programmierer verwenden häufig gotos, gute Programmierer verwenden niemals gotos, ausgezeichnete Programmierer erkennen, wann sie geeignet sind.

Ich denke gotos können (!) eine elegante Lösung sein, allerdings nur in äußerst seltenen Fällen - und diese Fälle muss man eben in der Lage sein erkennen zu können, deswegen macht meist mehr Sinn ganz darauf zu verzichten

0

... Ich hoffe erstmal das mit "goto" ist nicht wörtlich gemeint. goto befehle sollten immer vermieden werden und gerade als Anfänger solltest du die finger davon lieber ganz lassen. Die meisten goto's lassen sich aber auch problemlos zbs. durch schleifen ersetzen.

Zu deinem Problem:

Das Schlüsselwort heißt modulo bzw. rest. Unter C++ mit "%" ausgedrückt. dh. zbs.:

9%9==rest 0
9%8==rest 1

Du brauchst also nur abzuprüfen ob der Rest == 0 ist. Zbs. so:

if((Zahl % Teiler)==0)
    //Zahl ist teilbar.
else
    //Zahl ist nicht teilbar.

Zahl ist natürlich die Zahl welche du prüfen willst und Teiler der Teiler auf Welchen Geprüft werden soll.

LG SK

cheater67 
Fragesteller
 13.12.2012, 18:32

Genau das habe ich gemeint! Danke. Das mit den ganzen gotos war hingekackt ich hatte keine zeit um hier einen quellcode hinzustampfen :D

0

Danke an alle! ich hab jetzt einene simplen code: #include

include

using namespace std;

int main(int argc, char *argv[]) { int Biszu, Zahl = 4, momentan = 2; cout << "Bis zu welcher Zahl sollen die Primzahlen berechnet werden? "; cin >> Biszu; cout << "Die Primzahlen bis " << Biszu << " sind:" << endl;

while (momentan < Zahl) { while (Zahl <= Biszu) { while ((Zahl % momentan) != 0)

         momentan++;
         if (momentan == Zahl) cout << Zahl << ", ";


              Zahl++;
              momentan = 2;

              }}                  

  cout << "2,"  << Zahl << ", ";







system("PAUSE");
return EXIT_SUCCESS;

}

habt ihr noch tipps?

Über modulo, das gibt dir den Rest der Division raus glaub ich.

Musste mal googlen.

cheater67 
Fragesteller
 12.12.2012, 23:02

Meinst du dann if (derRestDa==0) mach blablabla?

0