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

...komplette Frage anzeigen Primzahlen ermitteln - (Informatik, Visual Basic, prozedur)

3 Antworten

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

CrystalixXx 31.08.2016, 19:50

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.

1

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

LeffyTeffy 31.08.2016, 19:01

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.

0
NeoExacun 31.08.2016, 19:02
@LeffyTeffy

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

0

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".)

 - (Informatik, Visual Basic, prozedur)

Was möchtest Du wissen?