Ergebnis 1 bis 8 von 8

Thema: [C++] Problem mit do-while-Schleife

  1. #1

    [C++] Problem mit do-while-Schleife

    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)

    Code:
            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);

  2. #2
    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.

  3. #3
    Wie ist e deklariert, wie ist phi deklariert, wie ist z deklariert?

    edit:
    Ja, stimmt. Irgendwie ist a<1;a-- unsinnig. 0o

  4. #4
    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

  5. #5
    Zitat Zitat von TomberryX
    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
    Ich mein die Deklaration im Programm, also int e; oder bool z = false; oder sowas.

  6. #6
    Zitat Zitat von Dingsi
    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;

  7. #7
    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 ^^

    Geändert von Ineluki (30.06.2005 um 21:38 Uhr)

  8. #8
    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*

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •