was geht da vor sich?
-
hallo,
ich habe das folgende programm bei wikipedia gefunden, es gibt primzahlen aus.
ich bin in c noch nicht besonders bewandert und möchte einach gerne wissen, was genau jede einzelne zeile macht *g*.main (x,y) { for(;x++;) for(y=2;x%y!=0;) printf(++y/x+"\0%d\n",x); }
schonmal vielen dank
mfg
pawi
-
Hi pawi,
Zeile 1.) Deine Einsprungfunktion Main mit zwei parametern x und y.
Zeile 2.) For-Schleife. Initialisierung wurde ausgelassen, Abbruchbedingung wurde ausgelassen, Incrementierung von x um 1 bei jeden Schleifendurchlauf.Zeile 3.) For-Schleife. Initialisierung von y mit 2, Abbruchbedingung wenn der Wert von x geteilt durch den Wert von y gleich 0 ist bricht sie ab. Du musst das so lesen, solange der wert ungleich 0 ist wird weitergelaufen. Keine Increment oder Decrement Anweisungen weiterhin.
Zeile 4.) printf ausgabe solange obrige Bedingung ungleich 0 ist wird y nun hier erst um eins erhöht, dann durch x geteilt und der relustierende Wert ausgegeben. Denke ich mal.
Ich muss zugeben die Zeile vier ist ein sonderbares Konstrukt, das ich so noch nicht gesehen habe.
Effektiv wird hier in Zeile drei versucht einen Wert zu finden der durch sich selbst aber durch keinen anderen Wert Teilbar ist. Defination einer Primzahl eben.
codeman
-
printf(++y/x+"\0%d\n",x) <==> ++y; printf("\0%d\n" + (y/x), x) <==> ++y if (y<x) printf("\0"); // stringende, nix weiter wird ausgegeben else if (y==x) // "string"+1 ==> "tring" pintf("%d\n", x) else // kann nicht - wird durch Zeile 3 abgefangen: // (x==y <==> x%y==0)
Für Primzahlen:
y läuft von 2..x-1
wenn (y+1)<x wird ein leerer String ausgegeben ("\0" und nix weiter)
wenn y+1==x, hat x keine Teiler <= x-1, ist also prim
in dem Fall wird wird praktisch "printf("%d\n",x) ausgeführt, also x ausgegebenFür nicht-Primzahlen bricht die inner Schleife beim ersten Teiler ab und es geht zum nächsten x
hübsch