Module umgekehrt



  • Ich mache seid einer Woche C und kenn mich noch nicht gut aus



  • Mit keinem Operator (wie der Modulo) und keiner Funktion, es sei denn du schreibst sie selbst. Gegenfrage: wozu brauchst du das denn?



  • Wenn das eine kleine Lernaufgabe für dich sein soll du die Ergebnisse einfach nur auf der Konsole ausgeben willst (sie also nicht für weitere Verwendung gespeichert werden müssen), kann man das eigentlich ganz simpel gestalten. Baue dir einfach eine Funktion, die die 2 festen Werte (6 und 2) entgegennimmt und in einer for-Schleife alle Möglichkeiten durchprobiert (wenn 6 % x == 2, dann gib x aus). x könnte dann z.B. von 0 bis zur 6 laufen.



  • Versuche ich aber warum stützt es ab 😕

    #include <iostream>
    using namespace std;

    int main ()
    {
    for (int x=0; x<=1000; x++)
    cout << 6 % x;
    }



  • modulo schrieb:

    Versuche ich aber warum stützt es ab 😕

    #include <iostream>
    using namespace std;

    int main ()
    {
    for (int x=0; x<=1000; x++)
    cout << 6 % x;
    }

    Weil im ersten Durchlauf durch 0 dividiert wird! Und ich hab dir das auch noch so gesagt... 🤡 Fang einfach bei 1 an, dann klappt es bestimmt.

    Bei dir fehlt aber noch eine Abfrage, ob die Modulo-Operation einen bestimmten Rest ergibt (wolltest du ja ursprünglich haben).



  • Das funktioniert auch nicht

    int main ()
    {
    for (int x=0; x<=1000; x++)
    {
    if ( (6 % x) = 2 ) cout << 6 % x;
    }
    }
    error C2106: '=' : left operand must be l-value 😡



  • modulo schrieb:

    Das funktioniert auch nicht

    int main ()
    {
    for (int x=0; x<=1000; x++)
    {
    if ( (6 % x) = 2 ) cout << 6 % x;
    }
    }
    error C2106: '=' : left operand must be l-value 😡

    Fehler 1 habe ich schon geasgt (Division durch 0), Fehler 2 ist, dass du "=" und "==" verwechselst. "=" Ist der Zuweisungsoperator. Damit weist du einer Variablen einen Wert zu. "==" ist der Vergleichsoperator, mit dem du 2 Werte auf Gleichheit prüfen kannst (den wolltest du eigentlich verwenden).



  • Juchhhhuuuu es geht 🤡 🕶
    Aber ohne Schleife geht es nicht oder?

    int main ()
    {
    for (int x=1; x<=1000; x++)
    {
    if ( (6 % x) == 2 ) cout << x;
    }
    }



  • Naja das einfachste um 6%x == 2 zu lösen, ist natürlich einfach 6-2 zu rechnen...



  • Mit grösseren Werten funktioniert es nicht

    int main ()
    {
    for (int x=1; x<=1000; x++)
    {
    if ( (500 % x) == 2 ) cout << x;
    }
    }

    3683166249498

    Warum kommt so eine grosse Zahl raus 😕



  • modulo schrieb:

    Juchhhhuuuu es geht 🤡 🕶
    Aber ohne Schleife geht es nicht oder?

    int main ()
    {
    for (int x=1; x<=1000; x++)
    {
    if ( (6 % x) == 2 ) cout << x;
    }
    }

    Du willst doch eine Aufgabe mehrfach erledigen. Dafür nimmt man halt meistens Schleifen. es gibt noch andere Möglichkeiten, Aufgaben zu wiederholen (goto, Rekursion), aber hier ist der für dich beste Weg sicher eine for-Schleife.

    Eine gute Übung wäre wohl, das Ganze jetzt in eine Funktion zu packen, wie ich anfangs geschrieben hatte. Die nimmt dann 2 Parameter (z.B. 6 und 2). Eine Funktion zu bilden schafft Übersicht und Struktur im Code, außerdem kann sie immer wieder verwendet werden. Wenn du den Vorgang für 2 Argumentenpaare durchführen willst, musst du nicht den vorhandenen Code nochmal drunterkopieren, sondern rufst einfach die Funktion mit anderen Parametern auf.

    P.S.: Schließe deinen Code bitte in Zukunft in [cpp] und [/cpp] ein, damit er schön formatiert und besser lesbar ist. So wie hier:

    int main() {
      bla();
      if(b) {
        blub();
      }
    }
    

    Dann bleibt auch die Einrückung erhalten (die du hoffentlich anwendest).

    Das kannst du auch mit dem C/C++-Button unter den Smileys machen.



  • Man braucht die Schleife nur von 3 bis 6 laufen lassen. Allgemein: Will man a%x=b lösen, muss man nur von b+1 bis a durchsuchen.



  • modulo schrieb:

    Mit grösseren Werten funktioniert es nicht

    int main ()
    {
    for (int x=1; x<=1000; x++)
    {
    if ( (500 % x) == 2 ) cout << x;
    }
    }

    3683166249498

    Warum kommt so eine grosse Zahl raus 😕

    Das Ergebnis kann doch nicht für x herausgekommen sein, wenn deiner Schleife von 1 bis 1000 läuft...

    Ansonsten einfach mal Bashars Tipp berücksichtigen.



  • modulo schrieb:

    3683166249498
    Warum kommt so eine grosse Zahl raus 😕

    Weil die Ausgabe keine Trennzeichen vorgesehen hat:

    3683166249498
    3 6 83 166 249 498
    

    Wie man Trennzeichen in die Ausgabe kriegt, weiß ich leider nicht. Mein Kompiler kennt kein cout. 🙂


Anmelden zum Antworten