Primzahlenzerlegung
-
hmm ka glaube er ist richtig gut er ist ja unser prof von de uni. er programmiert in seinem job auch sehr erfolgreich cad programm oder sowas
-
ist denn so jetzt besser anzugucken?
#include <iostream> #include <cmath> using namespace std; void main (void) { int faktor=2, zahl , rest ; cout >> "Bitte die Zahl die zerlegt werden soll eingeben!!! " cin << Zahl; do { rest = zahl % faktor; if( rest == 0) { cout << faktor << "\zahl"; zahl = zahl / faktor; } else { faktor = faktor + 1; } } while { ( faktor<=sqrt(zahl)); } }
-
Auf Anhieb fällt mir dort nichts gravierendes auf - was sagt denn dein Compiler?
-
1>------ Erstellen gestartet: Projekt: Aufgabe_04, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Primzahlzerlegung.cpp
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1016): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1016): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1016): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1016): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1009): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1009): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1009): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,unsigned char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1009): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1002): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1002): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1002): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char &)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(1002): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(995): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(995): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(995): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<char,_Traits> &std::operator >>(std::basic_istream<char,_Traits> &,signed char *)": template-Argument für "std::basic_istream<char,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(995): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem &)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(971): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem &)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(971): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem &)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(971): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem &)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(971): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem *)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(930): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem *)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(930): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem *)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(930): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2784: "std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &,_Elem *)": template-Argument für "std::basic_istream<_Elem,_Traits> &" konnte nicht von "std::ostream" hergeleitet werden.
1> c:\programme\microsoft visual studio 8\vc\include\istream(930): Siehe Deklaration von 'std::operator >>'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2676: Binärer Operator '>>': 'std::ostream' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'cin'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(8) : error C2065: 'Zahl': nichtdeklarierter Bezeichner
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(14) : warning C4129: 'z': Nicht erkannte Folge von Escapesequenz
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(24) : error C2059: Syntaxfehler: '{'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(24) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
1>d:\dokumente und einstellungen\niklas\eigene dateien\visual studio 2005\projects\informatikpraktikum i\aufgabe_04\primzahlzerlegung.cpp(25) : error C2668: 'sqrt': Mehrdeutiger Aufruf einer überladenen Funktion
1> c:\programme\microsoft visual studio 8\vc\include\math.h(581): kann 'long double sqrt(long double)' sein
1> c:\programme\microsoft visual studio 8\vc\include\math.h(533): oder "float sqrt(float)"
1> c:\programme\microsoft visual studio 8\vc\include\math.h(128): oder "double sqrt(double)"
1> bei Anpassung der Argumentliste '(int)'
1>Das Buildprotokoll wurde unter "file://d:\Dokumente und Einstellungen\Niklas\Eigene Dateien\Visual Studio 2005\Projects\InformatikPraktikum I\Aufgabe_04\Debug\BuildLog.htm" gespeichert.
1>Aufgabe_04 - 30 Fehler, 1 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
Ups - die IO-Operatoren am Anfang sind ja auch verkehrt herum gesetzt ("cout**<<..." bzw. cin>>**...").
-
hmm also ich habs jezt. läuft so einigermassen aber glaub die funktin stimmt noch nit ganz so:
#include <iostream> #include <cmath> using namespace std; void main (void) { int faktor=2, zahl , rest ; cout << "Bitte die Zahl die zerlegt werden soll eingeben!!! "; cin >> zahl; do { rest = zahl % faktor; if( rest == 0) { cout << faktor << "zahl"<<endl; zahl = zahl / faktor; } else { faktor = faktor + 1; } } while ( faktor<=sqrt((double)zahl)); }
-
a) achte mal auf die Groß/Kleinschreibung - zahl und Zahl sind zwei verschiedene Namen.
b) Es gibt keine Escape-Sequenz '\z' - dort ist der Backslash überflüssig.
c) die Abbruchbedingung der while-Schleife muß (genauer darf) nicht in {...} eingeschlossen werden.
-
CStoll schrieb:
a) achte mal auf die Groß/Kleinschreibung - zahl und Zahl sind zwei verschiedene Namen.
b) Es gibt keine Escape-Sequenz '\z' - dort ist der Backslash überflüssig.
c) die Abbruchbedingung der while-Schleife muß (genauer darf) nicht in {...} eingeschlossen werden.
OK DANKE HABS SELBER ALLES SCHON GEFUNDEN.
aber irgendwie stimmt da was noch nit oder? bzw ich versteh wenn die ergebniss nit)
-
Ne, stimmt auch so nicht - du hast einfach ohne zu gucken den if-Code von Braunstein kopiert, und der hat extra nicht den vollständigen richtigen Code dafür gepostet. Guck dir das nochmal genau an, bzw vergleiche es einfach mit dem Diagramm.
-
naja kopiert nit aber als Hilfe genommen;) Ok ich gucke noch mal:)
#include <iostream> #include <cmath> using namespace std; void main (void) { int faktor=2, Zahl , rest ; cout << "Bitte die Zahl die zerlegt werden soll eingeben: "; cin >> Zahl; do { rest = Zahl % faktor; if( rest == 0) { cout << faktor << "Zahl"<<endl; Zahl = Zahl / faktor; faktor =2; } else { faktor = faktor + 1; } } while ( faktor<=sqrt((double)Zahl)); }das faktor =2 hatte ich vergessen oder?? ich glaub aber in der ausgabe cout << faktor<<"Zahl"<< endl;
da stimmt glaube ich noch was nit.
-
Soweit richtig, fehlt nur noch die letzte Zeile des Struktogramms

-
hmm wenn ichs drunter schreib dann macht ers immer noch nit ganz wie muss ich den nda die klammern setzen?
#include <iostream> #include <cmath> using namespace std; void main (void) { int faktor=2, Zahl , rest ; cout << "Bitte die Zahl die zerlegt werden soll eingeben: "; cin >> Zahl; do { rest = Zahl % faktor; if( rest == 0) { cout << faktor << "Zahl"<<endl; Zahl = Zahl / faktor; faktor = 2; } else { faktor = faktor + 1; } } while ( faktor<=sqrt((double)Zahl)); cout<<Zahl<<endl; }
-
wog schrieb:
hmm wenn ichs drunter schreib dann macht ers immer noch nit ganz
aha...
-
So, jetzt habe ich mal deine Hausaufgaben gemacht. Im Großen und Ganzen habe ich deinen obigen Quelltext abgeschrieben und die Klammern und Operatoren mal sinnvoll lesbar gesetzt.
Gewöhn dir bitte recht schnell einen vernünftigen Stil an, damit du selbst noch durch deinen Code durchblickst:
(Soll nicht heißen, dass man Stil das gelbe vom Ei ist, eben nur ein Beispiel)
#include <iostream> #include <cmath> using namespace std; int main() // alternativ "int main(int argc, char** args)", wenn // Kommandozeilenparameter verwendet werden { int faktor = 2; int zahl; cout << "Bitte die Zahl eingeben, die zerlegt werden soll:" << endl; cin >> zahl; do { int rest = zahl % faktor; // Variablen können in C++ auch dort deklariert (und auch // zugewiesen werden, wo sie benötigt werden. if(rest == 0) { cout << faktor << endl; zahl = zahl / faktor; faktor = 2; } else { faktor = faktor + 1; } } while(faktor <= sqrt(zahl)); cout << zahl << endl; return EXIT_SUCCESS; }Sinnvolle Einrückungen und ein paar Leerzeichen um die Operatoren gestalten das ganze doch schon lesebarer. So kann man den Text auch leichter nachvollziehen.
Grüße... Heiko
-
So nach langen Machen und Hilfen von euch habe ichs gepackt!
#include <iostream> #include <cmath> using namespace std; void main (void) { int Faktor=2, Zahl , Rest ; cout << "Bitte die Zahl die zerlegt werden soll eingeben: "; cin >> Zahl; do { Rest = Zahl % Faktor; if ( Rest == 0) { cout << Faktor<<"x"; Zahl = Zahl / Faktor; Faktor = 2; } else { Faktor = Faktor + 1; } } while (Faktor<=sqrt((double)Zahl)); cout<<Zahl<<endl; }Im Laufe des We muss ich noch die Fibonacci Reihe Programmieren also macht euch auf was gefasst es kommen noch viele dumme Fragen:)
Danke noch mal für alles.
wog
-
bwbg schrieb:
So, jetzt habe ich mal deine Hausaufgaben gemacht. Im Großen und Ganzen habe ich deinen obigen Quelltext abgeschrieben und die Klammern und Operatoren mal sinnvoll lesbar gesetzt.
Gewöhn dir bitte recht schnell einen vernünftigen Stil an, damit du selbst noch durch deinen Code durchblickst:
(Soll nicht heißen, dass man Stil das gelbe vom Ei ist, eben nur ein Beispiel)
#include <iostream> #include <cmath> using namespace std; int main() // alternativ "int main(int argc, char** args)", wenn // Kommandozeilenparameter verwendet werden { int faktor = 2; int zahl; cout << "Bitte die Zahl eingeben, die zerlegt werden soll:" << endl; cin >> zahl; do { int rest = zahl % faktor; // Variablen können in C++ auch dort deklariert (und auch // zugewiesen werden, wo sie benötigt werden. if(rest == 0) { cout << faktor << endl; zahl = zahl / faktor; faktor = 2; } else { faktor = faktor + 1; } } while(faktor <= sqrt(zahl)); cout << zahl << endl; return EXIT_SUCCESS; }Sinnvolle Einrückungen und ein paar Leerzeichen um die Operatoren gestalten das ganze doch schon lesebarer. So kann man den Text auch leichter nachvollziehen.
Grüße... Heiko
boah danke
Habs aber ja selber hinbekommen ich wills ja selber verstehen aber besten dank. Ihr wart mir eine rießen Hilfe. Ist nit meine Hausaufgabe ist für die Uni ne Übung die kontrolliert wird;)
Wir sehen uns bei der Fiboannci Reihe:)
-
Hallo,
ich muss ein C-Programm für die Primzahlenzerlegung eines Zahlenbereichs schreiben, was auch geschehen ist, es tauchen aber Probleme auf bei denen ich nicht weiterkomme, da ich nicht weis warum das passiert.Die Funktion des Programms ist, Einlesen einer oder zwei Zahlen in einen String, zwischen den Zahlen dürfen auch Leerzeichen und/oder Buchstaben stehen, die Zahl(en) werden zerlegt und wieder ausgegeben.
Hier erstmal der Code:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> void prim_zerlegung(int zahl) { int zahl1, teiler; teiler = 2; zahl1 = zahl; if (zahl1 > 1) { printf("%d: ", zahl1); while (teiler <= zahl1) [b]// 1. PROBLEM //[/b] { while (zahl1 % teiler == 0) { zahl1 = zahl1 / teiler; printf("%d ", teiler); } teiler++; } if (zahl1 != 1) { printf("%d", teiler); } } else { printf("Die Eingabe ist kleiner gleich 1 => keine Zerlegung möglich.\n"); } } int main (void) { int erste_zahl=0, zweite_zahl=0, i=0, a=1, b=1, hilfs_var1, hilfs_var2; char str[100]; printf("Programm zur Primfaktorzerlegung eines Zahlenbereichs\n\n"); printf("Eingabezeile: "); fflush(stdin); gets(str); while (str[i] != '\0') [b]// 2. PROBLEM //[/b] { while (isdigit(str[i]) && i >= 0) { hilfs_var1 = str[i] - '0'; erste_zahl = erste_zahl + hilfs_var1 * a; a = a * 10; i++; } while (isspace(str[i]) || isalpha(str[i])) { i++; } while (isdigit(str[i]) && i >= 0) { hilfs_var2 = str[i] - '0'; zweite_zahl = zweite_zahl + hilfs_var2 * b; b = b * 10; i++; } i++; } if (zweite_zahl != 0) { if (erste_zahl == 0 && zweite_zahl == 0) { printf("Keine Zerlegung moeglich.\n"); } else { if (erste_zahl <= zweite_zahl) { while (erste_zahl <= zweite_zahl) { prim_zerlegung(erste_zahl); printf("\n"); erste_zahl++; } } else if (zweite_zahl <= erste_zahl) { while (zweite_zahl <= erste_zahl) { prim_zerlegung(zweite_zahl); printf("\n"); zweite_zahl++; } } } } else { prim_zerlegung(erste_zahl); } printf("\n\n"); getch(); return (0); }1. Problem: taucht in der Fkt. prim_zerlegung() auf und zwar gibt die Fkt. einen falschen Wert aus, wenn ich die while-Schleife (siehe // 1. PROBLEM //) auf while(teiler <= sqrt(zahl1)) z.B. gibt er mir bei der Eingabe 7 die Zahl 3 aus, wenn ich sqrt weglasse ist die Ausgabe 7 = 7 richtig. Auch bei 99 z.B. mit sqrt: 99 = 3 3 4, und ohne: 99 = 3 3 11(richtig).
Woran könnte das liegen?2. Problem: taucht im Hauptprogramm auf, ich nehme an in den ersten while-Schleifen. Es geschiet folgendes: wenn man eine oder zwei zahlen eingibt werden sie umgedreht. z.B.: aus 24 wird 42, aus 15 und 16 werden 51 und 61, die umgedrehten Zahlen werden an die Fkt. prim_zerlegung() weitergegeben, da werden sie berechnet und ausgegeben: 24 wird zu 42 = 2 3 7 ; 42 wird zu 24 = 2 2 2 3.
3.Problem: ich hätte gerne, dass zwischen den Zahlen das *-Zeichen kommt:
24 = 2 * 2 * 2 * 3, ich weis aber nicht wo ich printf(" * "); setzen soll, damit es die gewünschte Ausgabe gibt. Ich habe es z.B. schon bei versucht:void prim_zerlegung(int zahl) { int zahl1, teiler; teiler = 2; zahl1 = zahl; if (zahl1 > 1) { printf("%d: ", zahl1); while (teiler <= zahl1) { while (zahl1 % teiler == 0) { zahl1 = zahl1 / teiler; printf("%d ", teiler); printf(" * "); [b]// 3. PROBLEM //[/b] } teiler++; } if (zahl1 != 1) { printf("%d", teiler); } } else { printf("Die Eingabe ist kleiner gleich 1 => keine Zerlegung möglich.\n"); } }aber es wird dann folgendes ausgegeben: 24 = 2 * 2 * 2 * 3 *
Danke sehr für die Hilfe.