PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inkrement/dekrement



Homer
25.03.2005, 16:29
Hi @ all!

So das wird leider etwas viel zum durchlesen aber naja hoffe jemandem von euch ist grad langweilig... :)
(hoffe das man es einigermaßen entziffern kann, ist ja nicht grad übersichtlich gegliedert)

#include <iostream.h>


bool istprim(int zahl)
{
bool loesung = 1;
int rest;
int teiler;

for(teiler = 2;teiler <= zahl - 1; teiler = teiler + 1)
{
rest = zahl%teiler;

if (rest == 0)
{
loesung = 0;
break;
}
else
continue;
}

return loesung;
}

void main()
{
cout << "***Programm zur Primzahlen berechung***" << endl << endl;

int zahl;
bool prim;

for(zahl = 1; zahl <= 100; zahl++)
{
prim = istprim(zahl);

if(prim == 0)
continue;

else
cout << zahl << endl;
}
}

also das ist ein typisches n00b 8) prog. das die primzahlen von 1-100 auflisted und jedes mal wenn ich bei der for schleife der funktion statt dem:

for(teiler = 2;teiler <= zahl - 1; teiler = teiler + 1)

das ganze mit inkrement und dekrement versuche,
for(teiler = 2;teiler <= zahl--; teiler++)

gibt das programm völlig falsche zahlen aus.
meine frage jetzt, warum? :confused:
kann mir das bitte jemand erklären, hab eine ewigkeit gebraucht um herauszufinden was falsch ist und jetzt will ich aus dem fehler auch was lernen :rolleyes:

Firzen
25.03.2005, 16:43
Die Zeile müsste lauten:

for(teiler = 2; teiler <= zahl-1; teiler++)

zahl-- heißt ja zahl = zahl - 1.
Das heißt zahl wird bei jedem Schleifendurchlauf um eins verringert, das darf es aber nicht.

teiler++ ist korrekt, da ja teiler bei jedem Schleifendurchlauf um eins erhöht werden soll, damit die Schleife irgendwann einmal aufhören soll...

Rolus
25.03.2005, 16:48
for(teiler = 2;teiler <= zahl--; teiler++)
Durch zahl-- wird zahl bei jedem Durchlauf um eins verringert. Deshalb geht diese Schleife nur etwa halb so lange, wie sie eigentlich gehen sollte. Natürlich wird nachher immer Blödsinn ausgegeben, da ja die Schleife nicht bis zum Ende ausgeführt wurde und die Zahl immer verkleinert wurde. An teiler++ ist aber nicht falsch. teiler++ entspricht teiler = teiler + 1, aber zahl-- entspricht nicht zahl - 1! Sondern eher zahl = zahl - 1, aber das wolltest du ja gar nicht. Ich hoffe das Problem ist etwas klarer geworden, ansonsten einfach nochmal nachfragen.
edit: Hm, etwas zu spät. Aber doppelt hält besser.

freundliche Grüße, Rolus

Homer
27.03.2005, 15:25
oh sh*t!
ein blöder fehler!! naja trotzdem vielen dank fürs helfen