probleme mit code |
|
<html>
<head><title>Fakultäten</title></head>
<body>
<h2>Fakultätstabelle</h2>
<script>
var fact = 1;
for(i = 1; i < 10; i++) {
fact = fact*i;
document.write(i + "! = " + fact + "<br>");
}
</script>
</body>
</html>
a) ich habe mir den script ausgeben lassen , und nach mir müsste es so aussehen :
1! = 1
2! = 2
3! = 3
4! = 4
…
Denn fact = 1 * 1 , fact = 2 * 1 , fact = 3 * 1 , also kommt nach dem gleichheitszeichen 1,2,3,4,5 … und nicht irgendwelche andere zahlen.
Ausserdem ist mir klar ,dass am ausgegebenen code fakultäten berechnet werden , bloss den code verstehe ich dazu nicht .
Das != wird nur als zeichenkette angehängt nicht als operator, und gilt somit nur als zeichenkette !
Kann mir das jemand erklären ?
danke
|
|
30.05.2008 15:59 |
|
|
|
vorbedingungen: fact = 1
erster schleifendurchlauf
i = 1
fact = fact * i also fact = 1 * 1
ergebnis also: fact=1
zweiter schleifendurchlauf
i = 2
fact = fact * i also fact = 1 * 2
ergebnis also: fact = 2
dritter schleifendurchlauf
i = 3
fact = fact * i also fact = 2 * 3
ergebnis also: fact = 6
vierter schleifendurchlauf
i = 4
fact = fact * i also fact = 6 * 4
ergebnis also: fact = 24
usw...
|
|
30.05.2008 22:08 |
|
|
|
<script>
document.write("<h2>Tabelle der Fibonacci-Zahlen</h2>");
for (i=0, j=1, k=0, fib =0; i<50; i++, fib=j+k, j=k, k=fib){
document.write("Fibonacci (" + i + ") = " + fib);
document.write("<br>");
}
</script>
bei diesem code verstehe ich nicht welchen wert nach jedem durchlauf fib, j,k haben, kann irgendwie nicht folgen ?
inn der ausgabe hat fib zu aller erst den wert 0, aber fib=j+k ist doch am anfang fib=1+0, also muss in der ausgabe bei fib zu aller erst 1 stehen denn 1+0 ist 1 !
|
|
04.06.2008 21:27 |
|
|
|
schau dir mal genau an, was die schleife macht:
deklarieren:
fib=0
j=1
k=0
i=0
abbruchbedingun:
solange i < 50
durchführung bei jedem schleifendurchlauf:
i = i+1
fib = j+k
j=k
und k=fib
dann spielen wir das szenario doch mal durch:
1.durchlauf:
i=0+1 = 1
fib=1+0 = 1
j=0
k=1
ausgabe : Fibonacci(1) =1
2.durchlauf
i = 1+1 = 2
fib=0+1 = 1
j=1
k=1
ausgabe: Fibonacci(2)=1
3.durchlauf
i=2+1=3
fib=1+1 = 2
j=1
k=2
ausgabe: Fibonacci(3)=2
4.durchlauf
i=3+1=4
fib=1+2=3
j=2
k=3
ausgabe: Fibonacci(4)=3
5.durchlauf (ab hier wirds interessant)
i=4+1=5
fib=2+3=5
j=3
k=5
ausgabe: Fibonacci(5)=5
so, das sollte reichen, um zu verstehen, was das programm macht, aber das hättest du mit ein wenig nachdenken auch selbst geschafft. und ganz hilfreich wäre es immer, wenn man sich zB zuvor mal informiert hätte, was genau die Fibonacci folge eigentlich ist...
__________________ Alle sagten, es geht nicht, da kam einer, der wusste das nicht und tat es einfach...
|
|
04.06.2008 21:45 |
|
|
|
danke,
ich melde mich wieder wenn ich was nicht verstehe .
|
|
05.06.2008 15:56 |
|
|
|
a) ich habe in meinem buch gesehen ,dass parseFloat(" 72.47") , NaN zurückliefert.
als ich in die adresszeile folgendes eingegeben habe um es auszuprobieren , java script: a = parseFloat(" 72.47");alert(a); ,
gab er mir die zahl 72.47 im alert fenster zurück . warum ?
b) var punkt = new Object( );
punkt.x = 2.3;
punkt.y = -1.2;
was bedeutet zeile 2 und 3. wird da z.b. 2.3 in der variablen x gespeichert ?
c) das folgende beispiel ist doch dasselbe wie oben , bloß anders geschrieben ? , var punkt = { x:2.3, y:-1.2 }; ,
d) was bedeutet der folgende satz, damit dass auch jeder versteht : "Die in Objekt-Literalen verwendeten Eigenschaftswerte brauchen außerdem keine Konstanten zu sein. Sie können beliebige JavaScript-Ausdrücke sein." (konstante, objekt-literal,javascript-ausdruck ??)
e) "Wenn Sie nicht sicher wissen, ob Ihre Implementierung die Variable undefined hat, können
Sie sie einfach selbst deklarieren:"
var undefined;
wozu braucht man den wert "undefined" ? warum muss man wissen ob eine variable ,undefined, ist so wie
es oben steht ?
|
|
16.06.2008 20:08 |
|
|
|
weiss jemand vielleicht eine antwort auf meine fragen ?
danke
|
|
18.06.2008 11:29 |
|
|
|
a) Originall hieß es: parseFloat(” 72.473");
und das scheitert am falschen anführungnszeichen.
b)
z. 1: es wird ein neues objekt angelegt mit den namen punkt
z. 2: das objekt bekommt eine neue variable x mit dem wert 2.3
z. 3: das objekt bekommt eine neue variable y mit dem wert -1.2
c)
sachlich wirds wohl dasselbe sein, hab jedoch nie was mit objekten gemacht und deswegen kann ichs auch nicht sicher sagen (genauso wie bei punkt b). aber wird wohl stimmen
d) x und y muss nicht unbedingt ne konstante (feste werte) zugeordnet werden, sondern ma kann ihnen z.B. auch wieder n objekt zuweisen:
<script>
var punkt = { x:2.334, y:{ x:2.3, y:"blasdioasdasod" } };
alert(punkt.y.y)
</script>
e)
die kannste z.B. gebrauchen, um zu gucken, ob eine variable schon ein wert hat:
var irgendeine_var; // sie bekommt keinen wert, daher repräsentiert sie undefined
if (irgendeine_var == undefined) alert("irgendeine_var hat noch keinen wert");
irgendeine_var = "n wert und so" // nun hat se n wert
if (irgendeine_var != undefined) alert("irgendeine_var HAT jetzt einen wert!");
/script...
beide male wird die alertbox ploppen..
erst, weil die var nicht definiert ist, und dann, weil sie definiert ist.
und jetzt angenommen, "undefined" als variable gibts nicht... dann kennt der interpreter auch kein wert zum vergleich auf undefined... also sagst du einfach: var undefined; // hat keinen wert zugewiesen bekommen, also hat die variable undefined den wert undefined...
naja, wie schon schwach angedeutet, hab ich nie wirklich javascript "studiert", also können die infos recht falsch sein, aber sehr wahrscheinlich ist das so wie ich mir denke und es geschrieben hab
|
|
18.06.2008 14:39 |
|
|
|
noch mal zu 1 ) parseFloat(" 72.47");
so steht es da und nicht so wie du es schreibst , mit zwei verschiedenen anführungszeichen.
2)
var weihnacht = new Date(2007, 11, 25);
var mittwinter_plus_4 = new Date(2007, 11, 25);
// Aber gemäß der Regel "by-reference vergleichen" sind zwei verschiedene Objekte
// nicht gleich!
(weihnacht != mittwinter_plus_4) // Ergibt true
warum sind diese zwei objekte nicht gleich, haben doch den gleichen wert und man fragt ja nach dem wert ?
|
|
20.06.2008 12:54 |
|
|
|
Zitat: |
Original von pimpong
warum sind diese zwei objekte nicht gleich, haben doch den gleichen wert und man fragt ja nach dem wert ? |
|
das ist der grundlegende irrglaube ...
was du da hast mit "var weihnacht = new Date(2007, 11, 25);" ist eine referenz auf das anonyme objekt dass mit "new Date(...)" erzeugt wird ...
anonym deswegen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
var weihnacht = new Date(2007, 11, 25);
var noch_ne_weihnacht = new Date(2007, 11, 25);
var gleiche_weihnacht = weihnacht;
(weihnacht != noch_ne_weihnacht) // true
(weihnacht != gleiche_weihnacht) // false
|
|
ob du das objekt mit der referenz "weihnacht" oder "gleiche_weihnacht" ansprichst, ist egal ... das objekt hat keinen eindeutigen namen in diesem sinne ... es hat wenn du so willst eine adresse im speicher, die eindeutig ist ...
vom prinzip her ist es das pointer problem, das die meißten anfänger in C/C++ haben ...
evtl hilft das hier:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
|
weihnacht
+---------+ +--------------+
| | -------------------> | |
| ADDR1 | | 25.11.2007 |
| | +-> | |
+---------+ | +--------------+
|
gleiche_weihnacht |
+---------+ |
| | |
| ADDR1 | -----------------+
| |
+---------+
noch_ne_weihnacht
+---------+ +--------------+
| | | |
| ADDR2 | -------------------> | 25.11.2007 |
| | | |
+---------+ +--------------+
|
|
so kann man sich anschließend die referenzen und objekte vorstellen:
ADDR 1 und 2 sind dann die adressen der jeweiligen objekte auf die die pfeile zeigen ... das was bei den vergleichen passiert, ist der vergleich der kästen die unter den variablen namen stehen ... und ofensichtlich ist ADDR1 == ADDR1 wahr ... ADDR1 == ADDR2 jedoch offensichtlich nicht ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
20.06.2008 22:49 |
|
|
|
hallo, ok,
"11" < "3" // warum ergibt das true. ??
|
|
23.06.2008 17:42 |
|
|
|
weil '1' < '3' ist ('a' < 'b' etc.)
|
|
23.06.2008 18:14 |
|
|
|
wenn dus ohne anführungszeichen machst, werden die 2 argumente auch wie ne zahl behandelt ;-)
|
|
23.06.2008 18:24 |
|
|
|
weil '1' < '3' ist ('a' < 'b' etc.)
da steht "11" und nicht "1" !
und ausserdem ist 11 nicht kleiner als 3 , oder ?
|
|
24.06.2008 18:35 |
|
|
|
es wird aber nur das erste zeichen verglichen.
|
|
24.06.2008 18:36 |
|
|
|
darum gehts nich.
so wie du das schreibst, werden die zahlen als zeichenketten verstanden.
d.h., dass 11 wie eine zeichenkette verstanden wird und der erste buchstabe 1 ist.
daher ist 11 "kleiner" als 3...
|
|
24.06.2008 18:37 |
|
|
|
Zitat: |
Original von pimpong
d.h. wenn da stehen würde "434"< "5" würde es auch true geben, da nur immer das erste zeichen bei zahlen gilt , richtig ?
|
|
2 strings mit <,> führt zu lexigraphischen vergleichen, soll heißen es passiert sowas wie eine alphabetische sortierung... nur das der halt abgesehen vom alphabet noch ein paar zeichen mehr kennt ...
Zitat: |
und noch ein paar:
a)"typeof ist ein unärer Operator,"
was ist unärer ? anderes wort vielleicht dazu?
|
|
unäre operatoren arbeiten nur auf einem operanden.
bsp:
-55
man könnte das nun als minus 55 lesen, wie man es aus der schule kennt, aber für den rechner steht dort eigentlich: einmal der operator "-" und einmal der wert 55 ... diese operation negiert also die 55 ... es wurde nur ein operand verwendet (die 55) also ist die operation unär ...
Zitat: |
b)"Der Wert eines Zuweisungsausdrucks ist der Wert des rechten Operanden. Als Seiteneffekt weist der Operator = den Wert auf der..."
was bedeutet zuweisungsausdruck und seiteneffekt ?
|
|
ein zuweisungsausdruck wäre:
$var=55;
seiten effekte sind etwas schwieriger...
if($x = wahr&falsch)
diese bedinung kann niemals erfüllt werden denn: wahr&falsch==falsch
das ergebnis von wahr&falsch wird vom if ausgewertet, da der = operator als ergebnis liefert, was rechts von ihm steht ... als seiteneffekt bekommt aber $x auch diesen wert zugewiesen ...
Zitat: |
c) was heisst : "32-Bit-Integer-Darstellung" und was heisst bits und wo sind die bits :"Vier dieser Operatoren führen auf den
einzelnen Bits der Operanden Boolesche Algebra aus, wobei sie sich so verhalten, als sei
|
|
die lieben bits und bytes ...
ein rechner arbeitet intern im dualsystem. zahlen die du ihm gibts, muss er irgendwie binär darstellen, um mit ihnen arbeiten zu können.
Integer oder Int bedeutet nichts anderes als "ganze zahl" ... und da es eine ganze weile lang nichts (naja ... fast *g*) größeres als 32 Bit prozessoren gab, die wie ihr name schon sagt mit einer wortbreite von 32 bit gearbeitet haben, wurde halt die darstellung als 32 bit wert gebräuchlich ...
stell dir einen 32 bit wert wie verkettung von 32 einsen/nullen vor: ganz rechts die stelle hat den wert 2 hoch 0 (also 1) ... die links daneben 2 hoch 1 (also 2) ... die links daneben 2 hoch 2 (4) ... etc... bei einem vorzeichenlosen (also nur positiven) integer geht das weiter bis wir ganz links angekommen sind ... auf diese weise kann man zahlen bis (2 hoch 32)-1 darstellen ... wenn wir positive und negative wollen, ist das linke bit das vorzeichen...
boolsche operatoren arbeiten mit diesen 32 bit werten in folgender form: schreibe die 2 werte untereinander und führe bitweise die operation aus...
für die UND verknüpfung wäre das etwas wie dies:
11001100...
01010101...
=======
01000100...
nur da wo oben UND unten eine 1 steht, steht im ergebnis eine 1 ... für die anderen boolschen operationen gilt entsprechend die gleiche anwendung...
Zitat: |
d) was bedeutet : obj[i] = new konstruktoren[i](); ??
|
|
obj[i] ist ein array element ... obj kannst du dir als eine art kette vorstellen ... obj[0] ist das erste ... obj[1] das zweite ... obj[2] das dritte ...etc.
die notation funktionsname[i]() ist mir nicht geläufig ...
Zitat: |
e)was sind "in den sprachkern integrierte eigenschaften" , "clientseitige eigenschaften" und "benutzerdefinierte variablen" ??
|
|
kontextbezug fehlt ...
Zitat: |
f) x = 1;
delete x;
warum kann man diese variable nicht löschen ?
soweit ich weiss , kann man variablen nur die mit var deklariert sind nicht mit delete löschen !!
|
|
sofern du dich auf JS beziehst, würde x danach nicht mehr definiert sein ... ausser es ist eine konstante wie Math.PI, oder wurde durch einen prototypen geerbt, aber bis du sowas machst, vergeht noch eine weile ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
25.06.2008 01:27 |
|
|
|
1. http://www.braekling.de/2008/03/19/umrec...zahlensystemen/
2. kontext? ansonsten: die methode write aus delete macht irgendwas mit der eigenschaft entlassungsdatum aus mein.
3. das x wurde implizit (nicht ausdrücklich) deklariert, deswegen kannste das löschen. var x; delete x; geht nicht, da es eben explizit (ausdrücklich) deklariert wurde.
info:
code: |
1:
|
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Operators:Special_Operators#delete |
|
4. http://www.selfhtml.net/javascript/objekte/index.htm objekt anklicken und eigenschaften lesen
5. wie wärs mit testen?
|
|
26.06.2008 16:33 |
|
|
|
...
function speichern_collection(c) {
var temp = new Array();
for (var e in c) {
temp[temp.length]=e;
temp[temp.length]=c[e];
}
cookie_setzen("daten", temp.toString());
}
function schreiben_collection(name, wert) {
var c = laden_collection();
c[name] = wert;
speichern_collection(c);
}
schreiben_collection("Autor", "Christian Wenz");
schreiben_collection("Verlag",
"Galileo Computing");
schreiben_collection("Verlag", "Galileo Press");
var autor = lesen_collection("Autor");
var verlag = lesen_collection("Verlag");
document.write("Autor: " + autor + "<br />\n");
document.write("Verlag: " + verlag + "\n");
//--></script>
</body>
</html>
a)wie gross ist temp.length in zeile 4 von oben ?
b) was ist hier das e ?
ich habe mich schon etwas schlau gemacht über for/in schleifen aber mit der kann ich nichts anfangen ?
|
|
28.06.2008 18:42 |
|
|
|
...
ich habe noch ein problem mit dem code :
function fakultaet(n) { // eine rekursive Funktion
if (n <= 1) return 1;
return n * fakultaet(n - 1);
}
ich weiss was fakultäten sind aber das ist hier auch alles.
was passiert da im code genau , vor allem in zeile 3 ?
wie kann man n mit fakultaet(n) multiplizieren ?
die funktion ruft sicgh selber immer auf oder wie ?
|
|
02.07.2008 15:26 |
|
|
|
1. wenn temp drei elemente enthält, ist temp.length = 3. da intern von 0 bis 2 gezählt werden würde, hängst du mit temp[temp.length] ein neues element dran.
2. e ist der laufindex in dem array c. die schleife wird sooft durchgelaufen, wie es elemente in c gab.
3. ja, die funktion ruft sich immer selber auf und wertet den rückgabewert aus. solange wie n kleiner gleich 1 ist, dann gibts des festen rückgabewert 1.
angenommen du willst die fakultät von 3:
fakultaet(3);
in der funktion gilt also erstmal: n = 3. 3 ist nicht kleiner gleich 1, also gibt die funktion zurück: 3 * fakultaet(3 - 1).
doch bevor das zurückgegeben werden kann, musst die funktion natürlich erstmal wieder abgearbeitet werden. da jetzt n = 2 gilt, gibt sie 2 * fakultaet(2 - 1) zurück.
es gilt jetzt also: n = 1... die funktion gibt dann der abbruchbedingung n <= 1 genau 1 zurück. ohne eine weiteren funktionsaufruf.
das ergebnis von fakultaet(3) ist jetzt: 3 * 2 * 1, also 6
|
|
02.07.2008 16:41 |
|
|
|
um rekursion zu verstehen, müssen sie zunächst rekursion verstehen ...
__________________ Gräten auf dem Sofakissen wird man wohl entfernen müssen.
|
|
02.07.2008 20:38 |
|
|
|