Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Problem mit do-while-Schleife
TomberryX
30.06.2005, 19:47
ich habe dieser kleine do-while-schleife hier die einfach nicht wiederholt wird. es soll geprüft werden ob phi und e teilerfremd sind und das macht er irgendwie nicht. bestimmt irgendein kleiner fehler den ich übersehe und gama auch(von ihm kommt auch der threadtitel)
do
{
cout<<"zu "<<phi<<" teilerfremde zahl eingeben"<<endl;
cin>>e;
if(phi>e)
{
for(int a=e;a<1;a--)
{
if(phi%a==0)
{
if(e%a==0)
z=false;
}
}
}
else
{
for(int a=phi;a<1;a--)
{
if(phi%a==0)
{
if(e%a==0)
z=false;
}
}
}
}
while(z!=true);
Ich verstehe den Algorythmus zwar nicht komplett, aber wenn ich davon ausgehe, dass du positive Integer Werte eingeben wirst, so werden deine For-Schleifen nie durchlaufen, da die Bedingung (a < 1) nicht erfüllt wird. Das bedeuted ebenfalls, dass z nie auf false gesetzt wird und die Schleife abgebrochen wird.
edit:
Es muss fast daran liegen, denn wenn du negative Int Werte eintippst werden sich deine For-Schleifen aufhängen. Deswegen versuche mal a > 1 als Abbruchbedinung der For-Schleifen.
Wie ist e deklariert, wie ist phi deklariert, wie ist z deklariert?
edit:
Ja, stimmt. Irgendwie ist a<1;a-- unsinnig. 0o
TomberryX
30.06.2005, 20:01
hab jetzt a>1 gemacht und nun bricht er bei teilerfremdheit nicht mehr ab. (was er ja soll)
e is ne eingabe, z is auf true gesetzt und phi ist ein positives produkt
hab jetzt a>1 gemacht und nun bricht er bei teilerfremdheit nicht mehr ab. (was er ja soll)
e is ne eingabe, z is auf true gesetzt und phi ist ein positives produktIch mein die Deklaration im Programm, also int e; oder bool z = false; oder sowas. :)
TomberryX
30.06.2005, 20:04
Ich mein die Deklaration im Programm, also int e; oder bool z = false; oder sowas. :)
upsa >_> *begriffe gern mal vertauscht*
int e,phi;
bool z=true;
Also meinem Verstaendnis nach ist
for(int a=e;a<1;a--)
absolut korrekt und auch sinvoll
Die Zahl A vird auf e gesetzt, und dann solange in einerschritten verkleinert, bis sie 0 erreicht. Ums in Pascal auszudruecken: for i:=e downto 1 do ...
Euer Fehler ist, dass es immer eine Zahl a gibt, die mit beiden Zahlen Mod a == 0 ergibt, naemlich a==1 ...
Q % 1 == 0 <- diese Aussage ist immer Wahr, wodurch euer z zwangsweise zu false wird, und euere Schleife beendet.
PS: printf ist der beste debugger, gebraucht hab ich ihn aber nicht ^^
TomberryX
01.07.2005, 12:14
hatte heut früh nenn geistesblitz durch den die schleife funktioniert.
hab das z=true in die schleife gesetzt wodurch er nicht mehr das problem hat dass nach fehlerhafter eingabe z auf false bleibt sobald die schleife wieder an den anfang geht.
*sich bei allen bedankt die hilfe anboten*
und ineluki, in der falschen variante die du kopiert hast geht er erst garnicht in die schleife rein da e>1 ist und er die schleife solange wiederholt wie a<1 was ja nicht gegeben ist. wenn man dann a>1 als wiederholungskriterium nimmt wird a zwar am ende 1,aber die er geht dann aus der schleife raus. *mal sagen musste*
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.