PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Primzahlen Programm Problem



suomisaundi
27.04.2010, 11:26
Hola!

Lerne seit gut 3 Wochen im Selbststudium C++ mit der C/C++ Referenz von Franzis, 5. Auflage und bin bei den Übungsaufgaben zur Schleifenkonstruktion angelangt, doch geht die eine Übungsaufgabe nicht bzw. ich stelle mich wohl wahrscheinlich blöd an..findet jemand den fehler?



//PrimzahlenProgramm
//In CPP
//Gibt Primzahlen von 2 bis 100 aus


#include <iostream>
#include <cmath>
using namespace std;

int main()
{

double zahl = 2, teiler, rest;
float maxteiler;

cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";

while(zahl<=100)

{
teiler = 1;

maxteiler = sqrt(zahl);

do {
teiler++;
rest = zahl / teiler;

}while((rest!=0) && (teiler<=maxteiler));

if(teiler>maxteiler)
{
cout<<zahl<<"\nIst eine Primzahl!";

}
zahl++;
}
return 0;
}
Es sollen alle Primzahlen von 2 bis 100 ausgegeben werden..
Kommen aber statt den Primzahlen alle Zahlen :/

suomi

Hu5eL
27.04.2010, 12:06
das sieht alles sehr nach cp aus... Hast du die logik verstanden? Weist du was primzahlen sind und wie du sin anhand einer schleifeerkennst?
Schon was von modulo gehört?
Ansonsten sieht das ganz gut aus.

suomisaundi
27.04.2010, 12:12
Jap, Logik ist drin.
Was Primzahlen sind und wie man diese anhand einer Schleife erkennt ist auch geläufig, modulo bzw. der restwert bei einer Division auch.

Bei der zeile mit dem Befehl wo der rest definiert ist hab ichs mit dem modulo probiert, sprich statt "/" "%", da kommt aber dann irg. von "unerlaubte Fließzahlbenutzung" oder sowas, was ja auf die float deklaration anspielt...ich hab keine Ahnung wo der Fehler liegt :/

ps: habs anhand einer Struktogramms was in dem Buch vorgegeben war gecoded, also müsste eigtl. schon stimmen

Hu5eL
27.04.2010, 12:14
bin leider im zug mim handy on und hab kein c compiler. Würde daheim mal nen vorschlag posten

Pekel
27.04.2010, 13:46
//PrimzahlenProgramm
//In CPP
//Gibt Primzahlen von 2 bis 100 aus


#include <iostream>
#include <cmath>
using namespace std;

int main()
{

char dumb;
int zahl = 2, teiler, rest; // int, da keine Kommastellen entstehen. (Modulo)
float maxteiler;

cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";

while(zahl<=100)

{
teiler = 1;

maxteiler = sqrt(zahl);

do {
teiler++;
rest = zahl % teiler;
// '/' durch '%' ersetzt;liefert sonst nicht den Rest zurück sondern Dezimalzahl
}while((rest!=0) && (teiler<=maxteiler));

if(teiler>maxteiler)
{
cout<<zahl<<"\nIst eine Primzahl!";

}
zahl++;
}
cin >> dumb;
return 0;
}

EBFE
27.04.2010, 14:23
Hat das einen besonderen Grund, warum du die Zahlen als Float haben möchtest?
Fließkommazahlen sind etwas zickig im Umgang (z.B weil man damit nicht jede Zahl exakt darstellen kann, sondern nur als Annäherung - und damit auch keine exakten Vergleiche anstellen sollte ;))
Sonst:


#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int zahl = 2, teiler, rest; //Zahlen statt Float als Int machen
int maxteiler;

cout<<"#############Die Primzahlen von 1 bis 100#############\n\n";

while(zahl<=100)
{
teiler = 1;
maxteiler = sqrt(zahl); //maximal soll der Test bis Wurzel laufen
do
{
teiler++;
rest = zahl % teiler; //bleibt bei der Division ein Rest?
}
while((rest!=0) && (teiler<=maxteiler));

if(teiler>maxteiler)
{
cout<<zahl<<"\nIst eine Primzahl!";
}
zahl++;
}
return 0;
}
Edit: ups, ich hätte den Tab mit dem Thread vor dem Lesen/Antworten nochmal aktualisieren sollen :|

suomisaundi
27.04.2010, 16:08
das mit dem modulo habe ich auch schon so versucht doch dann zickt borland und meint :
[C++ Fehler] primzahlen.cpp(15): E2015 Mehrdeutigkeit zwischen 'std::sqrt(double)' und 'std::sqrt(long double)'

deswegen hab ichs versucht mit double zu umgehen..doch dann kommt
: [C++ Fehler] primzahlen.cpp(19): E2060 Unzulässige Verwendung einer Fließkommazahl

wegen diesem Fehler hab ich es danach mit float probiert :/
jemand ne idee?

EBFE
27.04.2010, 16:20
Borland ist ... seltsam
einfach vorher die Zahl von int "manuell" in Double konvertieren

maxteiler = sqrt(double(zahl));

suomisaundi
27.04.2010, 16:28
funktioniert! dankeschön :)