Array scheibchenweiße ausgeben
David
- javascript
Hallo,
so das Script mixt mir jetzt die Anzahl der Mitglieder und gibt diese aus. Jetzt kommt der nächste Punkt, wenn man z.B. 5Gruppen eingestellt hat. Also 20/5 = 4 . Soll der 5*4 Grüppchen ausgeben. Wie kann ich jetzt die ersten 4 ausem Array holen und dann die nächsten 4 bis 20 .. und diese dann getrennt darstellen.
<html>
<head>
<script type="text/javascript">
function arrayShuffle()
{
var tmp, rand;
for(var i =0; i < this.length; i++)
{
rand = Math.floor(Math.random() * this.length);
tmp = this[i];
this[i] = this[rand];
this[rand] =tmp;
}
}
Array.prototype.shuffle =arrayShuffle;
function bla()
{
var mitglieder=document.Form.mitglieder.value;
var gruppe=document.Form.gruppe.value;
var anzahl=mitglieder/gruppe;
var anzahl2=mitglieder/gruppe;
var start=0;
var array=new Array();
for(i=0; i<mitglieder;i++)
{
array[i]=i+1;
}
array.shuffle();
}
</script>
</head>
<body>
<form name="Form">
Mitglieder<input type="text" name="mitglieder">
<Gruppeinput type="text" name="gruppe">
<input type="button" value="mach Was" onClick="bla()">
</form>
</body>
</html>
Gruß
Hallo,
Du benutzt ja immer noch die schlechte shuffle-Funktion. Gunnar hat dir doch im anderen Thread gezeigt, dass die keine gute Zufallsmischung produziert und es sind auch bessere vorgeschlagen worden. Das ist dir wohl egal, oder wie? Hauptsache irgendwie zusammengepfuscht... *kopfschüttel*
Um ein Array auseinander zu nehmen, schaust du dir am besten in SELFHTML die Methoden des Array-Objekts an.
Gruß, Don P
Habs ejtzt so gelöst. Immer Opera und Firefox läuft es , aber im InternetExplorer noch nicht ?
Weiß vllt jemand warum?
Ist das Script so einigermassen in Ordnung?
<html>
<head>
<script type="text/javascript">
function arrayShuffle()
{
var tmp, rand;
for(var i =0; i < this.length; i++)
{
rand = Math.floor(Math.random() * this.length);
tmp = this[i];
this[i] = this[rand];
this[rand] =tmp;
}
}
Array.prototype.shuffle =arrayShuffle;
function bla()
{
if(document.Form.mitglieder.value%document.Form.gruppe.value!=0)
{
alert("Mitglieder / Gruppen muss eine gerade Zahl ergeben !!!");
}
else
{
var mitglieder=document.Form.mitglieder.value;
var gruppe=document.Form.gruppe.value;
var anzahl=mitglieder/gruppe;
var anzahl2=mitglieder/gruppe;
var array=new Array();
var start=0;
var zaehler=0;
var prozentAngabe=100/anzahl;
for(i=0; i<mitglieder;i++)
{
array[i]=i+1;
}
array.shuffle();
document.write("<table>");
document.write("<tr>");
document.write("<td><font size="5">Anzahl der Schüler :</font></td>");
document.write("<td><font size="5">"+mitglieder+"</font></td>");
document.write("</tr>");
document.write("<tr>");
document.write("<td><font size="5">Anzahl der Gruppen :</font></td>");
document.write("<td><font size="5">"+gruppe+"</font></td>");
document.write("</tr>");
document.write("</table>");
document.write("<hr>");
while(zaehler!=gruppe)
{
zaehler++;
document.write("<font size="3"><b>Gruppe"+zaehler+"</b></font>");
document.write("<table border="1" width="300" frame="void" foreground="vordergrundFarbe">");
document.write("<tr>");
for(i=start; i<anzahl; i++)
{
document.write("<td width=""+prozentAngabe+"%">"+array[i]+"</td>");
}
document.write("</tr>");
document.write("</table>");
document.write("<p>");
anzahl=anzahl+anzahl2;
start=start+anzahl2;
}
}
}
</script>
</head>
<body>
<h1>Script zum Erzeugen von Zufallsgruppen</h1>
<form name="Form">
<table>
<tr>
<td>Anzahl der Schüler</td>
<td><input type="text" name="mitglieder"></td>
</tr>
<tr>
<td>Anzahl der Gruppe(n)</td>
<td><input type="text" name="gruppe"></td>
</tr>
</table>
<input type="button" value="bilde Gruppen" onClick="bla()">
</form>
</body>
</html>
Gruß
ja doch es gibt einen besseren Algorithmus, aber denke mal für die Zwecke sollte es so doch reichen oder was meint ihr?
Hallo,
Habs ejtzt so gelöst. Immer Opera und Firefox läuft es , aber im InternetExplorer noch nicht ?
Doch, im IE 6 läuft's.
Weiß vllt jemand warum?
Z.B. ist kein Attribut namens "foreground" für <table> erlaubt und von einem Farbnamen "vordergundFarbe" habe ich auch noch nie gehört.
Ist das Script so einigermassen in Ordnung?
Einigermaßen. Immerhin läuft's ja. Deine shuffle-Funktion ist immernoch schlecht, und den Rest könnte man auch eleganter programmieren.
Das HTML entspricht nicht dem neuesten Stand der Technik (das wäre CSS, das du aber nicht verwendest).
Aber für einen Anfang ist das schon mal was. Das mit der shuffle-Funktion ist halt irgendwie schade. "Wer nicht alles kann, dem soll man nicht das wenige erlassen", hat mal einer gesagt...
Gruß, Don P
jup klemm mich nochmal dahinter.
Gruß
Hello out there!
Da du mit deiner Folgefrage einen neuen Thread aufmachst anstatt sie in deinem alten zu stellen, gehe ich mal davon aus, dass du diesen nicht weiter verfolgt hast und dich um gegebene Antworten überhaupt nicht kümmerst ...
so das Script mixt mir jetzt die Anzahl der Mitglieder
... also auch nicht zur Kenntniss genommen hast, dass dein Script ziemlicher Mist ist. Und auch richtige Lösungen hatte ich genannt.
Also schmeiß das Script auf den Müll!
Jetzt kommt der nächste Punkt, wenn man z.B. 5Gruppen eingestellt hat. Also 20/5 = 4 . Soll der 5*4 Grüppchen ausgeben. Wie kann ich jetzt die ersten 4 ausem Array holen und dann die nächsten 4 bis 20 .. und diese dann getrennt darstellen.
Verschachtelte Schleifen: äußere für Gruppen von 1 bis 5 (bzw. 0 bis 4); innere für Gruppenmitglieder jeweils von 1 bis 4 (bzw. 0 bis 3):
for (var gruppe = 0; gruppe < 5; gruppe++)
{
// Anweisungen, was am Anfang jeder Gruppe zu tun ist
for (var gruppenmitglied = 0; gruppenmitglied < 4; gruppenmitglied++)
{
// Anweisungen, was bei jedem Gruppenmitglied zu tun ist
}
// Anweisungen, was am Ende jeder Gruppe zu tun ist
}
See ya up the road,
Gunnar
Hallo Gunnar,
Was deine richtige Lösung betrifft:
var sortedArray = ["A", "B", "C", "D"];
var shuffledArray = new Array();
for (var i = sortedArray.length; i > 1;)
{
var r = Math.floor(Math.random() * i); // Zufallszahl aus Bereich 0 ≤ r < i
// Bereich nimmt mit jedem Schleifendurchlauf um 1 ab
shuffledArray[--i] = sortedArray[r]; // vermindere Schleifenindex
// kopiere zufällig ausgewähltes Element ans Ende des Zielarrays
sortedArray.splice(r, 1); // lösche eben kopiertes Element aus Ursprungsarray
// damit ist vermindertes i gleich aktueller sortedArray.length
}
shuffledArray[0] = sortedArray[0];
Die hatte ich erst gar nicht gesehen. Man kann dabei sogar noch eine Zeile sparen:
~~~javascript
var sortedArray = ["A", "B", "C", "D"];
var shuffledArray = new Array();
for (var i = sortedArray.length; i > 1;)
{
var r = Math.floor(Math.random() * i); // Zufallszahl aus Bereich 0 ≤ r < i
// Bereich nimmt mit jedem Schleifendurchlauf um 1 ab
shuffledArray[--i] = sortedArray.splice(r, 1); // vermindere Schleifenindex
// verschiebe zufällig ausgewähltes Element ans Ende des Zielarrays
// damit ist vermindertes i gleich aktueller sortedArray.length
}
shuffledArray[0] = sortedArray[0];
Gruß, Don P
Hello out there!
Was deine richtige Lösung betrifft:
Die Diskussion über den Algorithmus sollten wir im alten Thread weiterführen. Sonst verdient dieser hier wirklich noch das Prädikat „Doppelposting“.
See ya up the road,
Gunnar