Habe probleme mit der berechnung von 2 Ergebnissen

Godzilla411

New member
17 August 2013
1
0
Hallo ich versuche aus 2 ergebnissen eins zu machen hab ihr da irgendwelche vorschläge??

<form>
<p>
<input name="dvd1" id="1" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD1 - 29.95</p> <p>
<input name="dvd2" id="2" type="checkbox" value="21.951E0" onchange="aktualisieren()"> DVD2 - 21.95</p> <p>
<input name="dvd3" id="3" type="checkbox" value="9.951E0" onchange="aktualisieren()"> DVD3 - 9.95</p> <p>
<input name="dvd4" id="4" type="checkbox" value="12.951E0" onchange="aktualisieren()"> DVD4 - 12.95</p> <p>
<input name="dvd5" id="5" type="checkbox" value="79.951E0" onchange="aktualisieren()"> DVD5 - 79.95</p> <p>
<input name="dvd6" id="6" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD6 - 29.95</p> <p>
<input name="dvd7" id="7" type="checkbox" value="49.951E0" onchange="aktualisieren()"> DVD7 - 49.95</p> <p>
<input name="dvd8" id="8" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD8 - 29.95</p> <p>

<span style="font-size:32px;"><b>Versandart</b></span></p> <p>
<input checked="checked" value="0.00E0" type="radio" name="form[bearbeitung]" id="9" onchange="aktualisieren()"> Standart (5-10 Werktage)</p> <p>
<input type="radio" id="10" name="form[bearbeitung]" value="25.00E0" onchange="aktualisieren()"> Express (2-4 Werktage) [+ 25,00 €]</p> <p>

<select name="Grösse" onchange="rechne(this.value);">
<option value="" selected="">Bitte auswhälen</option>
<option value="1">USB 2 GB 15€</option>
<option value="2">USB 4 GB 20€</option>
<option value="3">USB 8 GB 30€</option>
<option value="4">USB 16 GB 40€</option>
<option value="5">USB 32 GB 50€</option>
</select>

</p></form>

<p></p><p></p>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Bestellformular</title>

<script language="JavaScript">
<!--
function aktualisieren() {
var gespreis = 0;
var wert = 0;
for (var i = 1; i <= 10; i++) {
if (document.getElementById(i).checked) {
wert = parseFloat(document.getElementById(i).value);
wert = wert*100;
gespreis += parseInt(wert);
}
}
gespreis = parseFloat(gespreis);
gespreis = gespreis/100;
document.getElementById('preis').value = gespreis;
}
function rechne(option)
{
var output= 0
if (option == 1) { output = 15;}
if (option == 2) { output = 20;}
if (option == 3) { output = 30;}
if (option == 4) { output = 40;}
if (option == 5) { output = 50;}

document.getElementById('output').value = output;
}
-->
</script>
<input name="gesamtpreis" id="preis" type="text" value="0.00" readonly="readonly"> €<p></p>
<input type="text" name="Usb Stick" size="30" id="output">
 
Hallo ich versuche aus 2 ergebnissen eins zu machen hab ihr da irgendwelche vorschläge??

Also sag erst einmal die Mathematische Formel aufstellen

zb. f(x) = a + b
während a das erste Ergebnis ist und b das zweite Ergebnis aus einer oder mehreren Rechnungen

Weil die kann ich da grad nicht sehen... und bitte achte auf die McCabe Metrik, der Code ist nicht gerade übersichtlich, und der Kaffee ist noch nicht am wirken...
Link zur McCabe- metrik : https://de.wikipedia.org/wiki/McCabe-Metrik

Also ein paar infos mehr zur Aufgabenstellung würden nicht schaden...

1. Du hast dort eine for-Schleife ->
for (var i = 1; i <= 10; i++) {
diese ist läuft 9 mal durch... muss das sein diese obere grenze? mach das bitte dynamisch!

2.
function rechne(option)
{
var output= 0
if (option == 1) { output = 15;}
if (option == 2) { output = 20;}
if (option == 3) { output = 30;}
if (option == 4) { output = 40;}
if (option == 5) { output = 50;}

document.getElementById('output').value = output;
}
Die funktion rechne die rechnet nicht, sondern wählt aus...
was soll da gerechnet werden ?

Wäre da nicht sinnvoller in dem fall
hier eine formel zu nutzen ? Dann wäre dies auch schöner
denn das was du hier machst ist so was wie
function addiere ( a, b) {
if( a== 0 && b ==0 ) {output = 0;}
if( a== 0 && b ==1 ) {output = 1;}
if( a== 1 && b ==0 ) {output = 1;}
if( a== 1 && b ==1 ) {output = 2;}
if( a== 0 && b ==2 ) {output = 2;}
if( a== 2 && b ==0 ) {output = 2;}
.... usw....
}
 
Zuletzt bearbeitet:
Hallo ich versuche aus 2 ergebnissen eins zu machen hab ihr da irgendwelche vorschläge??

<form>
<p>
<input name="dvd1" id="1" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD1 - 29.95</p> <p>
<input name="dvd2" id="2" type="checkbox" value="21.951E0" onchange="aktualisieren()"> DVD2 - 21.95</p> <p>
<input name="dvd3" id="3" type="checkbox" value="9.951E0" onchange="aktualisieren()"> DVD3 - 9.95</p> <p>
<input name="dvd4" id="4" type="checkbox" value="12.951E0" onchange="aktualisieren()"> DVD4 - 12.95</p> <p>
<input name="dvd5" id="5" type="checkbox" value="79.951E0" onchange="aktualisieren()"> DVD5 - 79.95</p> <p>
<input name="dvd6" id="6" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD6 - 29.95</p> <p>
<input name="dvd7" id="7" type="checkbox" value="49.951E0" onchange="aktualisieren()"> DVD7 - 49.95</p> <p>
<input name="dvd8" id="8" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD8 - 29.95</p> <p>

<span style="font-size:32px;"><b>Versandart</b></span></p> <p>
<input checked="checked" value="0.00E0" type="radio" name="form[bearbeitung]" id="9" onchange="aktualisieren()"> Standart (5-10 Werktage)</p> <p>
<input type="radio" id="10" name="form[bearbeitung]" value="25.00E0" onchange="aktualisieren()"> Express (2-4 Werktage) [+ 25,00 €]</p> <p>

<select name="Grösse" onchange="rechne(this.value);">
<option value="" selected="">Bitte auswhälen</option>
<option value="1">USB 2 GB 15€</option>
<option value="2">USB 4 GB 20€</option>
<option value="3">USB 8 GB 30€</option>
<option value="4">USB 16 GB 40€</option>
<option value="5">USB 32 GB 50€</option>
</select>

</p></form>

<p></p><p></p>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Bestellformular</title>

<script language="JavaScript">
<!--
function aktualisieren() {
var gespreis = 0;
var wert = 0;
for (var i = 1; i <= 10; i++) {
if (document.getElementById(i).checked) {
wert = parseFloat(document.getElementById(i).value);
wert = wert*100;
gespreis += parseInt(wert);
}
}
gespreis = parseFloat(gespreis);
gespreis = gespreis/100;
document.getElementById('preis').value = gespreis;
}
function rechne(option)
{
var output= 0
if (option == 1) { output = 15;}
if (option == 2) { output = 20;}
if (option == 3) { output = 30;}
if (option == 4) { output = 40;}
if (option == 5) { output = 50;}

document.getElementById('output').value = output;
}
-->
</script>
<input name="gesamtpreis" id="preis" type="text" value="0.00" readonly="readonly"> €<p></p>
<input type="text" name="Usb Stick" size="30" id="output">

Ich frage mich gerade warum hier Scripte zur Verfügung stehen um Codes Ordentlich dar zu stellen. Dann brauche ich auch keine Haustür mehr in mein Haus, wenn es eh nicht genutzt wird.

HALLO, gehts noch^^
 
Zuletzt bearbeitet:
Hi,

damit hier dann am Ende des Threads wenigstens eine funktionierende Beispiellösung steht:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<h1>Bestellformular</h1>
<form method="post"> 
<p>
<input name="dvd1" id="1" type="checkbox" value="2995" onchange="aktualisieren()"> DVD1 - 29.95</p> <p>
<input name="dvd2" id="2" type="checkbox" value="2195" onchange="aktualisieren()"> DVD2 - 21.95</p> <p>
<input name="dvd3" id="3" type="checkbox" value="995" onchange="aktualisieren()"> DVD3 - 9.95</p> <p>
<input name="dvd4" id="4" type="checkbox" value="1295" onchange="aktualisieren()"> DVD4 - 12.95</p> <p>
<input name="dvd5" id="5" type="checkbox" value="7995" onchange="aktualisieren()"> DVD5 - 79.95</p> <p>
<input name="dvd6" id="6" type="checkbox" value="2995" onchange="aktualisieren()"> DVD6 - 29.95</p> <p>
<input name="dvd7" id="7" type="checkbox" value="4995" onchange="aktualisieren()"> DVD7 - 49.95</p> <p>
<input name="dvd8" id="8" type="checkbox" value="2995" onchange="aktualisieren()"> DVD8 - 29.95</p> <p>

<span style="font-size:32px;"><b>Versandart</b></span></p> <p>
<input checked="checked" value="0" type="radio" name="versand" id="9" onchange="aktualisieren()"> Standart (5-10 Werktage)</p> <p>
<input type="radio" id="10" name="versand" value="2500" onchange="aktualisieren()"> Express (2-4 Werktage) [+ 25,00 €]</p> <p>

<select name="size" id="size" onchange="aktualisieren()">
    <option value="0" selected="">Bitte auswählen</option>
    <option value="1500">USB 2 GB 15€</option>
    <option value="2000">USB 4 GB 20€</option>
    <option value="3000">USB 8 GB 30€</option>
    <option value="4000">USB 16 GB 40€</option>
    <option value="5000">USB 32 GB 50€</option>
</select>

<p></p><p></p>

<input name="gesamtpreis" id="preis" type="text" value="0,00" readonly="readonly"> €<p></p>
</p></form>



<script language="JavaScript">
function aktualisieren() { 
    var gespreis = 0; 

    // erster teil
    for (var i = 1; i <= 10; i++) { 
        if (document.getElementById(i).checked) {
            gespreis += parseInt(document.getElementById(i).value);
        } 
    } 

    //zweiter Teil
    gespreis += parseInt(document.getElementById("size").value);

    gespreis = gespreis/100; 
    document.getElementById('preis').value = gespreis.toFixed(2).replace(/\./g,",");
}

</script>
Man beachte, dass das ganze Formular so erstens nicht vollständig ist und zweitens serverseitig natürlich auch noch die übergebenenen Daten auf Validität überprüft werden müssen.

@siddy81:
1. Du hast dort eine for-Schleife ->
[...]
diese ist läuft 9 mal durch
Falsch, die läuft von 1 bis einschließlich 10. Das sind bei mir 10 Durchläufe.

Die funktion rechne die rechnet nicht, sondern wählt aus...
Richtig, aber mit den Values in dem select bleibt ihm da nichts anderes übrig. Also entweder, so wie ich es nun gemacht habe (Vorsicht: die Preise müssen nicht eindeutig sein!!), oder eben mit einem switch-case Konstrukt oder einer Lookup-Table.
Man beachte, dass es die Lesbarkeit wesentlich verschlechtert, falls man dort mit einer (mathematischen) Funktion die values von z.b. 1-5 auf die Preise abbildet. Außerdem wäre das fehleranfälliger als die insgesamt einfachere, dafür aber leichter verständliche Lösung. (man denke an andere Eingaben als die 1-5)

Weil die kann ich da grad nicht sehen... und bitte achte auf die McCabe Metrik, der Code ist nicht gerade übersichtlich, und der Kaffee ist noch nicht am wirken...

Die McCabe Metrik hat weder etwas mit schlecht formatiertem Quellcode zutun, der in einem Forum gepostet wurde, noch ist es ein Maß für Übersichtlichkeit.
Im Originalcode ist die Metrik von aktualisieren() = 3 und die von rechne() = 6, beides Werte, die komplett ok sind, wobei der Wert für rechne(), wie man dem Wikipedia-Artikel auch entnehmen kann, verfälscht ist und wenig aussagt, da es sich im Wesentlichen um ein switch-case handelt.


Gruß
Drakor
 
Zuletzt bearbeitet: