Frage von ProLogicMaster, 32

Wie lautet der korrekte Algorythmus für ein Programm, welches alle kleineren Teiler einer Zahl auflistet?

Schreiben Sie ein Programm, das alle Teiler einer natürlichen Zahl berechnet.

Eingabe: n (Datentyp long)

Außerdem soll der Benutzer beliebig viele Berechnungen innerhalb eines Programms ausführen können.

Anleitung: Der Divisionsrest kann mit dem Prozentoperator berechnet werden.

Das ist die aufgabenstellung, und ich habe überhaup keine Ahnung wie ich das am besten angehen soll, bitte um hilfe!

Expertenantwort
von TeeTier, Community-Experte für programmieren, 11

Vielleicht so:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
long n = 1234L;

printf("%ld ist teilbar durch 1", n);

long teiler = 2;

for (long i = 2, half = n / 2; i <= half; ++i) {
if (n % i == 0) {
++teiler;
printf(", %ld", i);
}
}

printf(" und sich selbst.\n");
printf("(Insgesamt als %ld Teiler)\n", teiler);

return EXIT_SUCCESS;
}

Das ist zwar ein Dummdidumm-Ansatz, aber als Richtungsweiser sollte es für dich reichen. Ich denke, den Rest bekommst du alleine hin.

Viel Spaß noch mit deinen Hausaufgaben! :)

Kommentar von TeeTier ,

PS: Wenn du auch korrektes Verhalten bei negativen Zahlen erwartest, dann initialisiere die Variable half wie folgt:

long half = (n < 0 ? -n : n) / 2; // bzw. abs(n)
Antwort
von TUrabbIT, 15

Am einfachsten ist zumindest bis zu einer gewissen Größe der Zahl eine Schleife die von 2 bis zu der Zahl alle Zahlen per Modulo Rechnung (besagter Divisionsrest (%)) berechnet, die bei denen die Berechnung 0 ergibt kannst du dann in einen String oder ein Array einfügen. Soweit, so einfach.

Bedeutet der zweite Teil, das du einen Taschenrechner implementieren sollst? Die Aufgabenstellung ist da nicht eindeutig.

Kommentar von ProLogicMaster ,

Also ich bin grade erst am Anfang mit C, weil ich es in der Fachschule brauche und wir sollen es so einfach wie möglich lösen, also bitte keine Fremdwörter und das, da bin ich noch nicht so weit vom Stoff her also wenns geht bitte bisschen einfacher erkären ^^

Kommentar von TeeTier ,

Alles richtig, außer dass man nicht bis n, sondern bis n/2 zählen muss. (da es keine ganze Zahl n gibt, die sich glatt durch eine Zahl größer als n/2 teilen lässt) :)

Kommentar von TUrabbIT ,

Ah ja stimmt, nicht bedacht gehabt

Keine passende Antwort gefunden?

Fragen Sie die Community