Teilermenge einer ganzzahligen Zahl bestimmen



  • Guten Tag 🙂
    Bin neu hier im Forum, aus diesem Grunde entschuldige ich mich vorab für meine miserablen Kenntnisse in C! 🙂
    Ich habe die Aufgabe bekommen, via C ein Algorithmus (Struktogramm auch...) zu erstellen, welches mir alle ganzzahligen Teiler einer Zahl ausgibt.

    Bin stets dabei diese Aufgabe zu lösen, dennoch fällt es mir recht schwer einen Ansatz an sowas zu finden.
    Wie gehe ich am besten an ein solches an?
    Grundriss des Programms ist verständlich und akzeptiert.

    Aber wie geh ich genau an eine solche Aufgabenstellung ran?
    Viele Befehle hab ich mir ausgedruckt und studiert (bspw. %d etc.).

    MFG



  • [code]#include<stdio.h>

    int main() {

    /*Variablen zum Speichern der Zahlen*/
    int a,b,r;

    /*Eingabe der Ganzzahligen Zahl*/
    printf("Bitte geben Sie Ihre ganzzahlige Zahl ein!\n");
    scanf("%d",&a);

    system ("PAUSE");
    return 0;

    }



  • Es ist am Anfang keine schlechte Idee, das Ganze mal mit einem Stift auf einem Blatt Papier durchzuspielen.
    Da kannst du dann die einzelnen Schritte nachvollziehen die du machen musst.
    Beobachte dich dabei, was du machst.

    %d ist kein Befehl, sondern ein Formatspecifier (von scanf oder printf oder auch strftime)



  • Danke für die Rasche Antwort!
    Danke für den Tip! Meinte %d natürlich nicht als Befehl, sry 🙂

    Vorüberlegungen auf einem Blatt Papier habe ich schon getroffen.
    Hänge dennoch fest 😞 ...

    Festzuhalten ist, dass ich zunächst überlegt habe wie ich diese Aufgabenstellung ggf. auf eine Formel bringen kann oder dergleichen.
    Letztenendes halt ich fest, dass ich beispielsweise die Zahl 32 / 32 divdiere.
    Anschließend 32/16, 32/8, 32/4, 32/2 und 32/1 . Also immer dann die Hälfte meine Ursprungszahl. Somit erhalte ich auf meinem Blatt Papier vorerst meine gesuchten Zahlen (1,2,4,8,16,32)

    MFG



  • Elite123456 schrieb:

    Letztenendes halt ich fest, dass ich beispielsweise die Zahl 32 / 32 divdiere.
    Anschließend 32/16, 32/8, 32/4, 32/2 und 32/1 . Also immer dann die Hälfte meine Ursprungszahl.

    Nimm mal an, Deine Ursprungszahl wäre 21.



  • Hm, stimmt!
    Wäre dann nach meiner Reihenfolge 21/10,5=2, aber 2 gehört nicht zur Lösung!

    Also ist diese Überlegung auch für die Katz!



  • Jo, also: Wie bestimmst Du die Teiler von 21?



  • Festzuhalten ist, dass die Teilermenge einer Zahl immer 1 und die Zahl selber (in diesem Bsp. 21) ist. Zusätzlich müssen die Teilbarkeitsrgeln bekannt sein.
    Bei 21 multipliziere ich die linke Seite(2) mit 3 und addiere die rechte Seite (1) hinzu. Also 7. Und 7 lässt sich durch 7 teilen, also lässt sich auch die 21 teilen.



  • Gut, und wie bestimmst Du die Teiler von einer beliebigen Zahl X?



  • Ja da steh ich auf dem Schlauch!
    Das Problem ist, man muss es irgendwie miteinander "verheiraten", sodass ich eine beliebige Zahl (X) bestimmen kann.

    Gibt es da vlt. noch nen kleinen Tip? :p



  • Wie alt bist Du eigentlich?
    Wenn ich eine beliebige Zahl X habe, dann teile ich die durch alle Zahlen von 1 bis X-1 und prüfe, ob das Ergebnis ganzzahlig ist.
    Bzw. ich würde es so nicht machen, aber das ist doch erst mal der offensichtlichste Weg, der jedem als erstes einfallen sollte ...



  • Ich dachte man ist hier um ggf. neues zu lernen und nicht irgendwelche Fragestellungen bzgl. meiner Person zu tätigen



  • Na, wenn das neu für Dich ist, wie man Teiler einer Zahl ermittelt, dann sehe ich schwarz für Dein Programm ...
    Du kannst ja einem Programm nicht etwas beibringen, was Du selbst nicht kannst ...



  • Schaun wir ja dann. Hätten Sie denn einfach einen allgemeinen Ratschlag wie ich mich aus den bisher erkannten "Ratschlägen" weiterhin systematisch voran arbeiten könnte?

    MFG



  • Hab ich doch oben geschrieben: Durch alle kleineren Zahlen teilen und das Ergebnis auf Ganzzahligkeit prüfen.



  • Das ist nicht zu empfehlen. Wie soll man das denn in C umsetzen, die Division in double und dann gucken, ob beim Casten nach int und wieder zurück das gleiche rauskommt? Für sowas gibts den Modulo-Operator.



  • Wie genau man das in C umsetzt, kommt doch erst nachdem man überhaupt mal eine Idee für einen Algorithmus oder eine Vorgehensweise hat ...
    Und der Modulo-Operator macht schließlich genau das: dividieren und prüfen, ob ein Rest bleibt ...



  • Am einfachsten: Du probierts einfach alle durch.



  • Belli schrieb:

    Wie genau man das in C umsetzt, kommt doch erst nachdem man überhaupt mal eine Idee für einen Algorithmus oder eine Vorgehensweise hat ...

    Ja, aber deine Idee ist überspezifiziert. Was du eigentlich willst ist prüfen, ob eine Zahl Teiler einer anderen Zahl ist. Und dann überlegst du dir, wie du das in C umsetzt.

    Und der Modulo-Operator macht schließlich genau das: dividieren und prüfen, ob ein Rest bleibt ...

    Das ist für mich was anderes als prüfen, ob das Ergebnis ganzzahlig ist.



  • Mhm ... für mich ist das nur eine andere Terminologie für denselben Sachverhalt.


Log in to reply