Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hi 2x verwarnt
Anmeldungsdatum: 12.01.2005 Beiträge: 30
|
Verfasst am: 15.02.2005, 22:09 Titel: wurzeln |
|
|
kann der computer auch wurzeln berechnen?
wenn js wie geht das in QBasic 4.5?
danke schon im voraus!!! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 15.02.2005, 22:19 Titel: |
|
|
Hallo
Das geht mit SQR()
Gruss
Skilltronic
P.S.. Schonmal was von Monster FAQ oder www.qbasic.de gehört? _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 15.02.2005, 22:21 Titel: |
|
|
Hallo!
Funktioniert mit SQR(Zahl, aus der die Wurzel gezogen werden soll)
Sqr ist englisch und heißt "Square root", auf Deutsch "Quadratwurzel". _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 15.02.2005, 22:21 Titel: Re: SQR() |
|
|
Sebastian hat Folgendes geschrieben: | Hehe, wofür hast du eigentlich mittlerweile die 2. Verwarnung bekommen? |
Vielleicht fürs unnötige Fragen stellen?
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
hi 2x verwarnt
Anmeldungsdatum: 12.01.2005 Beiträge: 30
|
Verfasst am: 16.02.2005, 08:43 Titel: ich |
|
|
ich hab noch garnicht gemerkt dass ich eine zweite verwarnung hab aber egal
danke für eure hilfe!!! |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 16.02.2005, 19:00 Titel: |
|
|
ich finds echt llustig, das für eine schon 20 mal gestellte Frage, die auch in jeder FAQ drin steht (und man speziell SQR auch durch ^.5 umgehen kann) noch dreimal die selbe Antwort bekommt  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
hi 2x verwarnt
Anmeldungsdatum: 12.01.2005 Beiträge: 30
|
Verfasst am: 17.02.2005, 17:19 Titel: und |
|
|
und wie ziehe ich z.b. die 13. wurzel??? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.02.2005, 10:05 Titel: |
|
|
Hallo
xtewurzel = zahl ^ (1 / x)
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 18.02.2005, 16:34 Titel: |
|
|
Oder mit einer eigenen Funktion:
Code: |
FUNCTION Wurzel# (Zahl, n)
Wurzel# = Zahl ^ (1 / n)
END FUNCTION
|
Bsp:
Code: |
CLS
PRINT "Die dritte Wurzel aus 81 lautet: "; Wurzel#(81, 3)
END
|
jb |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 21.02.2005, 21:34 Titel: |
|
|
Hallo!
Tut mir verdammt leid, dass ich wieder einen "verstaubten" Thread aus der Versenkung ziehe, aber ich habe noch was zum Thema Wurzeln ziehen zu sagen:
Quadratwurzel (Die bekannte Wurzel mit dem V-änlichen Zeichen) = Zahl^(1/2)
Kubikwurzel = Zahl^(1/3)
usw. Es ist immer das Gleiche. In Gleichungen wird z.B. + mit - aufgelöst, 1^5 wird dann mit Zahl^(1/5). Also man löst Zahlen mit der Dimension d so auf: ZahlausderideWurzelgezogenwerdensoll^(1/d). Das soll mal gesagt werden ... _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.02.2005, 16:27 Titel: |
|
|
Ich dachte, dass Skilltronic und ich das schon gesagt hätten.....
jb |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 22.02.2005, 20:04 Titel: Sicher |
|
|
Seid ihr sicher das das so ist? Kann man das beweisen?
Vor.: x,y€R
Beh:yteWurzel(x)=x^(1/y)
und dann?
Find ich seltsam...hab n paar Beispiele mit dem Taschenrechner gerechnet, Fehler hab ich nicht gefunden...aber ist das wirklich immer so??
Ist echt schwer...weil das ist eine gleichung mit 2 unbekannten! Das einzige was mir einfällt ist hoch x, und dann kommt
x=x^(1/y)*y |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 22.02.2005, 20:08 Titel: Logo |
|
|
Klar! Ich habs!
Vorrausetzung: x,y€R
Behauptung: yte Wurzel(x)=x^(1/y)
Beweis:
yte Wurzel(x)=x^(1/y) (1) |^y
x=x^(1/y)*y (2) wegkürzen
x=x qued!
Ja! Es ist IMMER so! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 22.02.2005, 20:27 Titel: |
|
|
Sehr schön Sebastian, du kleiner Lateiner
q.e.d heißt übrigens "was zu beweisen war".
jb |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 22.02.2005, 22:20 Titel: |
|
|
Jetz habt ihr mich so weit, jetz muss ich auch was sagen *g*
Ich hoffe, dass der Post richtig angezeigt wird. Auf jeden fall solltet ihr Zeichensatz Unicode eingestellt haben.
(Glaub das geht in den Internetoptionen oder bei ansicht. Ich nehm Firefox her, da gehts über Ansicht->Zeichencodierung->UTF-
(Zur sicherheit steht drunter nochmal der Wortlaut)
Code: |
Also, erst mal ein paar gültige Regeln:
n√x = x ^ ( 1 ÷ n)
die n-te wurzel aus x = x hoch (1 durch n)
(x ^ n ) ^ m = x ^ (m × n)
(x hoch n) hoch m = x hoch (n mal m)
n√(x ^ m) = x ^ (m ÷ n)
die n-te wurzel aus (x hoch m) = x hoch (m durch n)
n√(x ^ n) = x ^ (n ÷ n) = x ^ 1 = x
die n-te wurzel aus (x hoch n)
= x hoch (n durch n)
= x hoch 1
= x
Setzt man hier die 0 für n und m ein, ergibt sich:
0√(x ^ 0) = x ^ (0 ÷ 0) = x ^ 1 = x
die nullte wurzel aus x hoch 0
= x hoch (0 durch 0)
= x hoch 1
= x
(x^0) ^ (1÷0) = x
(x hoch 0) hoch (1 durch 0) = x
x ^ (0 × (1 ÷ 0)) = x
x hoch (0 mal (1 durch 0)) = x
=> 0×(1÷0) = 1
daraus folgt: 0 mal (1 durch 0) = 1!
|
Die Regeln wurden von meinen Matheleherern bestätigt, aber wo ich ihnen dann die einsetzungen gezeigt hab, ham se bloß blöd geschaut, und gesagt, ich sollt lieber die Definitionsmengen beachten...
Und trotzdem, abgesehen davon, dass 1 durch 0 nich definiert is, hat die aussage (mathematisch) sogar nen sinn!
Ich krieg kopfweh.... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 22.02.2005, 23:23 Titel: Und so berechnet man die Quadratwurzel ohne SQR und ohne ^ |
|
|
Dazu habe ich mir für die QB-MonsterFAQ Folgendes vorgemerkt:
--------------------------------------------------------------------------------
Frage deutsch
~~~~~~~~~~~~~~
Wie berechne ich Quadratwurzeln ohne SQR und ^l?
Question English
~~~~~~~~~~~~~~
How to calculate square roots without using SQR ans ^?
Antwort 1
~~~~~~~~~
[ von Thomas Antoni, 23.1.2004 ]
Dazu verwendet man ein -> iteratives Näherungsverfahren. Am bekanntesten
ist die Newtonsche Näherung.
Die funktioniert so: Man formt den Ausdruck x = SQR(a) wie folgt in ein "Polynom
2. Grades" um:
a = x^2
-x^2 + a = 0
Jetzt besteht die Aufgabenstellung darin, die Nullstelle x0 dieses Polynoms zu
finden. D.h. Du musst nur rausfinden, wo f(x) = a - x^2 null wird. Das
Newtonsche Näherungsverfahren verwendet hierzu den folgenden -> Algorithmus:
x0 = x0 + ((a - x0*x0)/(2*x0))
Zunächst wählt man einen beliebigen Startwert für x0, z.B. "1". Dann durchläuft
man diese Formel sooft immer wieder, bis die gewünschte Genauigkeit erreicht
ist, z.B. sich die Ergebnisse zweier aufeinanderfolgenden Durchläufe nicht mehr
unterscheiden. Das resultierende Ergebnis x0 ist dann die Wurzel aus a.
In QBasic umgesetzt sieht das dann so aus:
Code: |
'*************************************************
' NEWTON.BAS = Wurzelberechnung nach Newton
' ==========
' Dieses QBasic-Programm berechnet die Quadrat-
' wurzel einer Zahl mit der Newton-Iteration ohne
' Verwendung des SQR-Befehls
'
' (c) Thomas Antoni, 23.1.04
'*************************************************
CLS
INPUT "Gib die Zahl ein: a = ", a#
x# = 1 'Anfangswert fuer die Iteration
DO
y# = x# + ((a# - x# * x#) / (2 * x#))
IF x# = y# THEN EXIT DO 'keine Aenderg. mehr?
x# = y#
LOOP
PRINT "Wurzel aus a = "; x#
PRINT "Tatsaechlicher Wert = "; SQR(a#) 'Kontrolle
|
Antwort 2
~~~~~~~~~~
[ von greenbit ( http://greenbit.ch/ ) im QB-Forum, 23.1.2003 ]
Dafür kann man auch das Heron-Verfahren verwenden. Das ist eine frühe Sonderform
der Newtonschen Näherung.
Das Heron-Verfahren ist uns im 1. Jahrhundert unserer Zeitrechnung durch Heron
von Alexandria als eine Methode zur Bestimmung von Quadratwurzeln hinterlassen
worden. Die Herkunft dieses Verfahren wurde dabei bei den Babyloniern gesehen
und geht sogar wohl noch auf eine ältere sumerische Basis zurück.
Das Verfahren kann so gedeutet werden, dass versucht wird, eine gesuchte Fläche
a mittels eines Rechtecks zu bilden, dessen Seiten man Schritt für Schritt
einander angleicht, bis diese dann idealerweise völlig miteinander in dem
gesuchten Wert x übereinstimmen. Hierzu wird aus einer gegebenen Seite zunächst
die andere aus der angestrebten Fläche durch Division bestimmt, wonach man
einfach zum Mittelwert der beiden Seiten überwechselt.
Beispiel: Berechnung von SQR(2) ~ 1,414215686)
- Es wird der Anfangswert x0 = 1 gewählt
- ausgehend von x0 werden Iterationsschritte durchgeührt. Im n+1-ten
Iterationsschritt wird Folgendes berechnet: xn+1 = (a/xn+xn)/2 .
- zum gesuchten Wert a = 2 entstehen auf diese Weise folgende Werte:
1; 1,5; 1,4166...; 1,414215686...; usw.
- Ist man mit der Genauigkeit zufrieden oder sind zwei aufeianderfolgende
Ergebnisse gleich, so wird abgebrochen
Die Umsetzung des Heron-Verfahrens in QBasic zeigt mein folgendes Programm.
Code: |
'*************************************************
' HERON.BAS = Wurzelberechnung nach Heron
' ==========
' Dieses QBasic-Programm berechnet die Quadrat-
' wurzel einer Zahl mit des Heron-Verfahrens
' ohne Verwendung des SQR-Befehls
'
' (c) greenbit, 23.1.04
'*************************************************
CLS
INPUT "Gib die Zahl ein: a = ", n#
a# = 1
b# = n
DO UNTIL STR$(a#) = STR$(b#)
a# = (a# + b#) / 2#
b# = n# / a#
LOOP
PRINT "Wurzel aus a = "; a#
PRINT "Tatsaechlicher Wert = "; SQR(n#) 'Kontrolle
|
Du wunderst Dich bestimmt darüber, dass ich die Werte a# und b+ für den
Vergleich mit der STR$() - Funktion in Strings umwandle.
Damit hat es folgende Bewandnis: Es ist gar nicht so einfach, herauszufinden, ob
die zwei Zahlen gleich sind. Sie bleiben nämlich bei bestimmten Eingangswerten
auch bei unendlich vielen Iterationen ganz leicht verschieden. Allerdings ist
der Unterschied so klein, dass er nicht einmal die letzte Dezimalstelle
beeinflusst. Dieser Effekt liegt in der Ungenauigkeit der Gleitpunktverarbeitung
begründet. Siehe dazu auch den Eintrag "Warum kommt es bei Gleitpunktoperationen
zu Rundungsfehlern?".
Um hier den Vergleich ein wenig "gutmütiger" zu gestalten, habe ich in meiner
Noit die Werte von a und b über die Funktionen STR$(a) und STR$(b) in Strings
umgewandelt. Diese liefern bereits genau das gleiche Resultat, auch wenn der
numerische Vergleich a = b noch winzige Unterschiede erbringt. Weiß jemand eine
bessere Lösung für dies Problem, als die Gleichheit mit STR$ zu prüfen?
Eine andere Möglichkeit wäre, die Differenz zwischen den beiden Werten auf
einen sehr kleinen Grenzwert abzufragen. Ist der Unterschied kleiner als der
Grenzwert, so sieht man die Zahlen als gleich an:
DO UNTIL ABS(a# - b#) < .0000001
...
Antwort 3
~~~~~~~~~
[ von Wolfgang Lentner, 28.11.2003 ]
Die Dezimalziffern der Wurzel aus 2 lassen sich durch primitives, wenn auch
mühsames Probieren auf viele Stellen genau errechnen. Wir quadrieren einfach
einen Versuch. Ist er zu groß, korrigieren wir den Versuch etwas nach unten, ist
er zu klein, korrigieren wir ihn nach oben bis wir die richtige Ziffer haben.
Das folgende QBasic-Programm demonstriert diese Methode:
Code: |
'*******************************************************************
' WURZELNA.BAS = Wurzelberechnung ueber ein Naeherungsverfahren
' ============
' Die Wurzel aus 2 wird ueber ein einfaches Naeherungsverfahren
' auf viele dutzend Stellen genau berechnet.
'
' Zunaechst definieren wir einen Anfangswert (hier 1.4).
' Diesen quadrieren wir. Ist das Ergebnis zu gross, also ueber 2,
' korrigieren wir den Wert etwas nach unten, ist er zu klein,
' korrigieren wir ihn nach oben. Dieses Spiel wird so lange
' wiederholt bis wir die richtige Ziffer haben.
'
' Die Berechnet geht relativ langsam vonstatten und kann jederzeit
' mit der Esc-Taste abgebrochen werden.
'
' (c) 2002 nach einer Programmidee von Wolfgang Lentner
' wolfganglentner@web.de
' http://wthlentner.cablenet.de/mathematik/rumpf.html
'*******************************************************************
DIM SHARED ziffer(1000), vielfaches(10, 1000), l(10), ergebnis(1000)
DIM SHARED laenge, endlaenge
ziffer(1) = 4
ziffer(2) = 1
laenge = 2
CLS
PRINT "Berechne die Wurzel aus 2 ...Abbruch mit Esc"
DO
IF ziffer(laenge) = 1 THEN
PRINT "NAEHERUNG: 1,";
ELSE
PRINT "NAEHERUNG: 2,";
END IF
FOR s = laenge - 1 TO 1 STEP -1
PRINT LTRIM$(RTRIM$(STR$(ziffer(s))));
NEXT s
PRINT
'
'Vielfache berechnen
FOR i = 1 TO 9
uebertrag = 0
FOR s = 1 TO laenge
e = uebertrag + ziffer(s) * i
vielfaches(i, s) = e MOD 10
uebertrag = e \ 10
NEXT s
IF uebertrag > 0 THEN
vielfaches(i, laenge + 1) = uebertrag
l(i) = laenge + 1
ELSE
l(i) = laenge
END IF
FOR j = l(i) + 1 TO 1000
vielfaches(i, j) = 0
NEXT j
NEXT i
'
'Einerziffer
FOR i = 1 TO l(ziffer(1))
ergebnis(i) = vielfaches(ziffer(1), i)
NEXT i
endlaenge = l(ziffer(1))
FOR j = endlaenge + 1 TO 1000
ergebnis(j) = 0
NEXT j
'
'Restliche zu Ergebnis addieren
FOR s = 2 TO laenge
uebertrag = 0
FOR i = 1 TO l(ziffer(s))
e = ergebnis(s - 1 + i) + vielfaches(ziffer(s), i) + uebertrag
ergebnis(s - 1 + i) = e MOD 10
uebertrag = e \ 10
NEXT i
IF uebertrag = 0 THEN
endlaenge = l(ziffer(s)) + s - 1
ELSE
endlaenge = l(ziffer(s)) + s
ergebnis(l(ziffer(s)) + s) = uebertrag
END IF
NEXT s
'
'Ergebnis ausdrucken
IF ergebnis(endlaenge) = 1 THEN
PRINT "QUADRAT : 1,";
ELSE
PRINT "QUADRAT : 2,";
END IF
FOR s = endlaenge - 1 TO 1 STEP -1
PRINT LTRIM$(RTRIM$(STR$(ergebnis(s))));
NEXT s
PRINT
PRINT
'
'Naechste Naeherung
IF ergebnis(endlaenge) = 1 THEN
IF ziffer(1) < 9 THEN
ziffer(1) = ziffer(1) + 1
ELSE
laenge = laenge + 1
FOR i = laenge TO 2 STEP -1
ziffer(i) = ziffer(i - 1)
NEXT i
ziffer(1) = 0
END IF
ELSE
ziffer(1) = ziffer(1) - 1
laenge = laenge + 1
FOR i = laenge TO 2 STEP -1
ziffer(i) = ziffer(i - 1)
NEXT i
ziffer(1) = 0
END IF
LOOP UNTIL INKEY$ = CHR$(27)
END
|
-------------------------------------------------------------------------------- _________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
Nach oben |
|
 |
|