• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bin studierender Newbie und habe ne Frage

stf

Neues Mitglied
Hallo, ich mache gerade ein Fernstudium wo auch JavaScript enthalten ist. Da gibt es eine Frage bei der ich absolut nicht durchblicke und hoffe das hier jemand mir helfen könnte:
Thema der Aufgabe: Ermittlung von Primzahlen.
So etwa sieht das Script aus:
Code:
<script language="JavaScript">
<!--
var zahl = new Array (10);
zahl[0] = 7;
zahl[1] = 15;
zahl[2] = 23;
zahl[3] = 77;
zahl[4] = 83; 
zahl[5] = 51;
zahl[6] = 46;
zahl[7] = 17; 
zahl[8] = 3;
zahl[9] = 12;

var n=[COLOR=#ff0000][B]?[/B][/COLOR]; 
var flag=0;

while (n < [COLOR=#ff0000][B]??[/B][/COLOR]) 
{
    for(i=2; i <= zahl[[COLOR=#ff0000][B]?[/B][/COLOR]]/2; i++)
    {
        if(zahl[[COLOR=#ff0000][B]?[/B][/COLOR]]%i == 0)
        flag [COLOR=#ff0000][B]???[/B][/COLOR]
        }
        if (flag==0)
        document.write(zahl[[COLOR=#ff0000][B]?[/B][/COLOR]]+ "ist eine Primzahl [COLOR=#ff0000][B]???[/B][/COLOR]");
        else
        document.write(zahl[[COLOR=#ff0000][B]?[/B][/COLOR]]+ "ist keine Primzahl [COLOR=#ff0000][B]???[/B][/COLOR]");
        
        flag=[COLOR=#ff0000][B]?[/B][/COLOR];
        n++;
    }
//-->
</script>

Es geht um das korrekte Ergänzen der Fragezeichen.
Hier mal mein Script und welche Probleme da noch auftauchen:

Code:
<script language="JavaScript">
<!--
var zahl = new Array (10);
zahl[0] = 7;
zahl[1] = 15;
zahl[2] = 23;
zahl[3] = 77;
zahl[4] = 83; 
zahl[5] = 51;
zahl[6] = 46;
zahl[7] = 17; 
zahl[8] = 3;
zahl[9] = 12;;

var n=[COLOR=#ff0000][B]0[/B][/COLOR]; 
var flag=0;

while (n < [COLOR=#ff0000][B]1[/B][/COLOR]) 
{
    for(i=2; i <= zahl[[B][COLOR=#ff0000]0[/COLOR][/B]]/2; i++)
    {
        if(zahl[[B][COLOR=#ff0000]0[/COLOR][/B]]%i == 0)
        flag[B][COLOR=#ff0000]==0[/COLOR][/B]; 
        }
        if (flag==0)
        document.write(zahl[[COLOR=#ff0000][B]0[/B][/COLOR]]+ "ist eine Primzahl" + "<br />");
        else
        document.write(zahl[[COLOR=#ff0000][B]0[/B][/COLOR]]+ "ist keine Primzahl" + "<br />");
        
        flag=[COLOR=#ff0000][B]1[/B][/COLOR];
        n++;
    }
//-->
</script>

Nun tauchen bei mir folgende Probleme auf:
Es wird nicht wirklich erkannt ob es eine Primzahl ist oder nicht, bei jeder Ausgabe dieses Scriptes wird ausgegeben: [Zahl] ist eine Primzahl (auch wenn es keine ist z.B. die zahl[1]).
Ich bin tatsächlich mit dem Befehl flag (im Lehrbuch überhaupt nicht erwähnt) nicht klar gekommen, liegt hier das Problem? Wo sind noch Fehler?
Wer kann mir dieses Script richten und vielleicht auch dokumentieren (denn ich will auch aus diesen Fehlern lernen)?
Noch eine anschliesende Frage: Muss nun für jede zu prüfende Zahl das Script unten wiederholt werden (mit der richtigen Zahleneingabe) oder gibt es eine Möglichkeit dieses eine Script für alle zu prüfenden Zahlen einmalig zu verwenden?

Vielen Dank schon mal im vorraus!
 
Werbung:
in der while-Schleife sollen alle Zahlen im Array durchlaufen werden. Heißt also, in der Bedingung muss überprüft werden, ob "n" kleiner als die Anzahl der Elemente im Array ist (nicht < 1, sonst läuft das nur ein einziges Mal durch).

Innerhalb der while-schleife steht "n" dann für den Index der aktuellen Zahl, also zahl[n].


[EDIT]
Ich war gerade etwas verwirrt, weil bei den if-Abfragen keine geschweiften Klammern sind, kann man zwar so schreiben, erhöht aber nicht gerade die Nachvollziehbarkeit...

Die for-Schleife geht nun alle Zahlen von 2 bis Zahl/2 durch und überprüft, ob es einen Teiler gibt --> keine Primzahl. In diesem Falle muss du das Flag von 0 (bedeutet Primzahl) auf 1 setzen (bedeutet keine Primzahl). (also flag = 1). Dein Code flag==0 ist ein Vergleich, keine Zuweisung.

Sind alle Zahlen durchlaufen, wird geprüft, wie das Flag steht und die jeweilige Meldung ausgegeben. Darin enthalten ist die aktulle Zahl, also wieder zahl[n]

Am Schluss musst du das Flag für die nächste Zahl wieder auf den ursprünglichen Wert zurücksetzen (flag = 0)
 
Zuletzt bearbeitet:
Ich danke Dir für Deine prompte Antwort. Ich hatte den vorigen Beitrag gerade noch gesehen, die Erklärung zu flag war sehr gut und einleuchtend. Füge das in Deiner überarbeitenden Antwort bitte nochmal mit ein.
 
Werbung:
Code:
<script language="JavaScript">
<!--
var zahl = new Array (10);
zahl[0] = 7;
zahl[1] = 15;
zahl[2] = 23;
zahl[3] = 77;
zahl[4] = 83; 
zahl[5] = 51;
zahl[6] = 46;
zahl[7] = 17; 
zahl[8] = 3;
zahl[9] = 12;

var n=0; // Anfangswert der while Schleife
var flag=0; // Default Wert

while (n < 10) // Arraygrösse
{
    for(i=2; i <= zahl[n]/2; i++)
    {
        if(zahl[n]%i == 0) // wenn ohne Rest teilbar
        flag = 1; // keine Primzahl
    }
    if (flag==0)
    {
        document.write(zahl[n]+ "ist eine Primzahl<br>");
    }
    else
    {
        document.write(zahl[n]+ "ist keine Primzahl<br>");
    }        
    flag=0; // Rücksetzen auf Default
    n++;
}
//-->
</script>
 
Habe meinen Beitrag überarbeitet, in der urspünglichen Version hatte ich einen Denkfehler dank der fehlenden {} und der ungünstigen Einrückung.
Am besten schreibt man
Code:
for(...) {
   if(Bedingung) {
      mach dies
   } else {
      mach das 
   }
}
 
Ich danke Euch, irgendwie habe ich das jetzt sogar geschnallt. Super Forum aber leider keinen Thanks-Button, denn sonst hättet Ihr jeweils eins mehr :D.
 
Werbung:
Zurück
Oben