Counter in while



  • Moin 🙂 ,

    ich bin seit kurzer Zeit dabei c++ zu erlernen.

    Ich will ein Programm schreiben, dass nach einer Eingabe, z.B. 40, alle Zahlen von
    2 bis 40 ausgibt und dann die Anzahl der Primfaktoren ausgibt, für jede Zahl. Ich habe zwei Lösungsansätze. Bei meinem ersten Programm habe ich nur eine Zahl als Ausgabe, hier werden jedoch die Primfaktoren und die Anzahl angezeigt. Also als Beispiel: 40 = 2*2*2*5 Faktoren: 4.

    In meinem zweiten Programm werden mir die Zahlen von 2 bis 40 aufgelistet aber die Anzahl der Primfaktoren fehlt hier ganz. Das sieht dann ungefähr so aus:

    2 = 0
    3 = 0
    4 = 0
    ...

    Dabei sollte es so aussehen:

    2 = 1
    3 = 1
    4 = 2

    Meine beiden Quellcodes:

    Programm 1:

    #include <iostream>
    #include <stdio.h>
    #include <ctime>

    int main () {

    int Zahl = 0;
    int i;
    int anz = 0;
    int count;

    count = 0;
    std::cout<<"Zahl: ";
    std::cin>>Zahl;
    std::cout<<Zahl<< " = ";

    for (i=2; i<=Zahl; i++)
    while (Zahl%i == 0)
    {
    if (anz == 0)
    std::cout<<i;
    else
    std::cout<< "*" <<i;
    anz++;
    Zahl/=i;
    count++;
    }

    std::cout<< " Faktoren:" << count << std::endl;
    return 0;

    }

    Programm 2:

    #include <iostream>
    #include <stdio.h>

    using namespace std;
    int main () {

    int Zahl;
    int count = 0;
    int c = 1;
    int anz = 0;

    std::cout<< "Zahl: ";
    std::cin>> Zahl;

    for (int i=2; i<= Zahl; i++)
    {
    while (c<Zahl)
    {
    c++;
    std::cout<< c << " = "<< " " <<anz<<i<< endl;

    }

    while (Zahl%i == 0)
    {
    Zahl /= i;
    anz++;
    count++;

    }

    }
    return 0;
    }

    Ich schaffe es einfach nicht diese beiden Programme zu Verknüpfen.

    Hat hier jemand schon einmal etwas ähnliches versucht oder sieht woran es liegt?
    Vielen Dank im Voraus.

    Grüße Lyrone



  • Nutze Funktionen!

    // Eingabe: eine Zahl und ein Teiler > 1 (bei 1 käme ja unendlich raus)
    // Ausgabe: Anzahl, wie oft die gegebene Zahl ohne Rest durch
    // den Teiler geteilt werden kann.
    int anzahlTeiler(int zahl, int teiler) {
      int result = 0;
      while (zahl % teiler == 0) {
        zahl /= teiler;
        ++result;
      }
      return result;
    }
    

    Das sollte erstmal zu einer einfachen und klaren Struktur führen.

    Ich weiß jetzt gar nicht, ob diese Funktion der optimale Ansatz ist, aber versuche generell Dinge in kleine, kurze, einfache Funktionen auszulagern. Und verknüpfe nicht die Ausgabe mit der Berechnung. Dann wird dein Code übersichtlicher und besser.



  • Vielen Dank für deine Nachricht. Ich habe das ein wenig anders gelöst. Wenn ich die Zeit habe kopiere ich den fertigen Quelltext gleich mit rein. 🙂

    wob schrieb:

    Nutze Funktionen!

    // Eingabe: eine Zahl und ein Teiler > 1 (bei 1 käme ja unendlich raus)
    // Ausgabe: Anzahl, wie oft die gegebene Zahl ohne Rest durch
    // den Teiler geteilt werden kann.
    int anzahlTeiler(int zahl, int teiler) {
      int result = 0;
      while (zahl % teiler == 0) {
        zahl /= teiler;
        ++result;
      }
      return result;
    }
    

    Das sollte erstmal zu einer einfachen und klaren Struktur führen.

    Ich weiß jetzt gar nicht, ob diese Funktion der optimale Ansatz ist, aber versuche generell Dinge in kleine, kurze, einfache Funktionen auszulagern. Und verknüpfe nicht die Ausgabe mit der Berechnung. Dann wird dein Code übersichtlicher und besser.


Log in to reply