Frage von LeffyTeffy, 52

Hallo, kann mir jemand die Prozedur dieser Visual Basic Prozedur erklären?

Um die For Schleife zu verstehen möchte ich gerne den Rechenweg wissen. Bin ich hiermit auf dem richtigen Weg:

i = 2 und zählt bis 100, dann wird es durch 2 geteilt, also 50

j = 2 und zählt bis 100, dann wird es durch 50 geteilt, also 2

aByte (50*2) = 0 (Was passiert dann???)

oder versteh ich das einfach falsch. Ich zerbreche mir schon seit geraumer Zeit den Kopf und wäre sehr dankbar über eine Erklärung.

Antwort
von BTyker99, 16

Deine Erklärung ist nicht korrekt. Es wird nicht erst gezählt und dann geteilt.

Die Schleife zählt von 2 bis Max/2 hoch, also von 2 bis 50.

Die zweite Schleife zählt jeweils von 2 bis Max/i, also beim ersten Durchlauf von 2 bis 50; beim nächsten Durchlauf von 2 bis 33 (100/3), dann von 2 bis 25 (100/4) usw...

Beim ersten Ändern des Feldes aByte wird also zuerst aByte(4) = 0 gesetzt, da i und j jeweils 2 sind.

Daraufhin wird j um 1 erhöht, es wird also das Feld aByte(6) = 0 gesetzt, da i=2 und j=3.

j wird solange erhöht, bis es =50 ist, so dass dann Feld aByte(100)=0 gesetzt wird (i=2 und j =50), erst dann wird i um 1 erhöht und die j-Schleife beginnt wieder bei 2.

Dabei werden manche Felder auch mehrfach auf 0 gesetzt, daher denke ich, dass man den Algorithmus noch optimieren könnte. Vermutlich wäre es möglich, die zweite Schleife auf "For j = i to Max / i" zu ändern!? Ich bin gerade zu faul, um das zu verifizieren, aber du kannst es ja mal testen...

Kommentar von CrystalixXx ,

Die Optimierung ist ein guter Hinweis. Schaut man in die von mir verlinkte Excel-Tabelle dann fällt die Sinnhaftigkeit der Optimierung direkt ins Auge.

Antwort
von NeoExacun, 27

Du solltest dir nochmal die Funktionsweise von Schleifen anschauen. Wenn es schon daran scheitert brauchst du über Arrays noch nicht nachdenken.

Kommentar von LeffyTeffy ,

Ja das werde ich auch, aber für eine kurze Erklärung wäre ich dennoch dankbar.
Da ich es dann beim wiederholen des Schleifenthemas besser nachvollziehen kann.

Kommentar von NeoExacun ,

aByte (50*2) = 0 setzt das 100. Element des Arrays aByte auf 0.

Antwort
von CrystalixXx, 15

Die beiden Schleifen bilden im Grunde das Kleine/Große/Mittlere (welches auch immer) 1x1 ab.

Die äußere Schleife ist der erste Faktor i von 2 bis 50. Die innere Schleife ist der zweite Faktor j von 2 bis Größtes-Produkt-Kleiner-Gleich-MAX. Ich habe das mal in einer Excel-Tabelle dargestellt. Vertikal ist i, horizontal ist j. Die Zahlen mit dem roten Hintergrund sind jene Produkte, die sich aus den Schleifendurchläufen ergeben. Diese Produkte sind keine Primzahlen und werden deswegen mit

aByte(i * j) = 0 

gesetzt. (Offensichtlich steht 1 für "ist Primzahl" und 0 für "ist keine Primzahl".)

Keine passende Antwort gefunden?

Fragen Sie die Community