Primfaktorzerlegung in C mit Schnittstelle
Verfasst: Fr Mai 15, 2015 1:24 pm
Ich habe folgende Rahmenbedingungen:
- keine globalen Variablen
- innerhalb der Funktion keine Ein- und Ausgabe erlaubt
- die Kommunikation muss über die Schnittstelle erfolgen
Also das Programm mit der Primfaktorzerlegung muss in folgende Schnittstelle gepackt werden:
int primfaktor ( int );
Die Funktion gibt bei jedem Funktionsaufruf mit einem Parameter n den nächsten Primfaktor von n
zurück (also numerisch aufsteigend, mehrfach vorkommende Faktoren werden auch mehrfach zurückgegeben). Sobald sich der Wert der übergebenen Zahl n ändert beginnt die Funktion wieder von vorne mit der Primfaktorzerlegung. Hat die Funktion alle Primfaktoren für ein n errechnet und zurückgegegeben so gibt sie (bis zum Aufruf mit einem neuen Wert n) immer -1 zurück.
Im Fehlerfall gibt die Funktion immer den Wert -2 zurück.
Mir fehlt jetzt eigentlich nur noch das mit -1 und mit -2 aber wie bau ich das noch ein?
Die Ausgabe sollte so aussehen:
2
2
3
7
-2 usw.
- keine globalen Variablen
- innerhalb der Funktion keine Ein- und Ausgabe erlaubt
- die Kommunikation muss über die Schnittstelle erfolgen
Also das Programm mit der Primfaktorzerlegung muss in folgende Schnittstelle gepackt werden:
int primfaktor ( int );
Die Funktion gibt bei jedem Funktionsaufruf mit einem Parameter n den nächsten Primfaktor von n
zurück (also numerisch aufsteigend, mehrfach vorkommende Faktoren werden auch mehrfach zurückgegeben). Sobald sich der Wert der übergebenen Zahl n ändert beginnt die Funktion wieder von vorne mit der Primfaktorzerlegung. Hat die Funktion alle Primfaktoren für ein n errechnet und zurückgegegeben so gibt sie (bis zum Aufruf mit einem neuen Wert n) immer -1 zurück.
Im Fehlerfall gibt die Funktion immer den Wert -2 zurück.
Mir fehlt jetzt eigentlich nur noch das mit -1 und mit -2 aber wie bau ich das noch ein?
Code: Alles auswählen
#include <stdio.h>
#include <math.h>
int primfaktor(int n)
{
int i;
while (n%2 == 0)
{
printf("%d ", 2);
n = n/2;
}
for (i = 3; i <= sqrt(n); i = i+2)
{
while (n%i == 0)
{
printf("%d ", i);
n = n/i;
}
}
if (n > 2)
printf ("%d ", n);
}
int main()
{
int pf;
while ((pf = primfaktor (12))> 1)
printf ("%d\n", pf);
while ((pf = primfaktor(7)) > 1)
printf ("%d\n", pf);
printf ("%d\n" , primfaktor (1));
system("PAUSE");
return 0;
}
2
2
3
7
-2 usw.