Seite 1 von 1
heron
Verfasst: 19.12.2005 18:38
von zeck
hi
Ihr kennt doch sicherlich das Heronverfahren zum bestimmen von Quadratwurzeln.
ich wollte sin programm in pb schreiben bleibe aber schon im ansatz stecken, denn pb erlaubt es mri nicht zahlen zu speichern bzw auszugeben.
die formel laute tja
"bitte Radikand eingeben" (A)
"bitte Startwert eingeben" (l)
b=A/l
l=(b+l)/2
wäre echt vol dankbar wenn mir jemand helfen kann
added mich doch bei icq 271569701 wär jeen dankbar der mit bei den grundbefehlen helfen kann/will
mfg zeck
Verfasst: 19.12.2005 18:41
von Kaeru Gaman
schau dir mal in der PB-Hilfe Variablentypen an...
ich vermute mal stark, dass du die nicht als Floats deklarierst,
und mit ganzzahlen wirdst du für den Algorythmus nix anfangen können...
Verfasst: 19.12.2005 18:45
von zeck
ja hab ich nur .......man muss des doch als sting abspeichern
und mit dem kann man net rechnen

unser lehrer und n paaar kumpels ham uns des hetue mal angesehn und nix hat gefunzt .dann haben wir es in turbo pascal gemacht und es ging aber das muss ja in pb auch gehn
mfg zeck
Verfasst: 19.12.2005 18:58
von Kaeru Gaman
dann erklär mal bitte genauer, was du mit "mit einem String rechnen" meinst...
auch in TP muss man dann doch gegebenenfalls Teilstrings in werte umwandeln, um damit rechnen zu können...
Verfasst: 19.12.2005 19:50
von DarkDragon
Heronverfahren ist doch einfach nur soetwas wie suksessive Aproximation, oder?
Code: Alles auswählen
Procedure.f sqrt(Val.f)
If Val > 0.0
Result.f = 0.0
oldResult.f = 0.000001
Relative.f = Val.f
While Abs(oldResult-Result) >= 0.000001 And (Result * Result) <> Val
If (Result * Result) > Val
Relative = Abs(Relative) * -0.5
Debug "Zu groß"
Else
Relative = Abs(Relative) * 0.5
Debug "Zu klein"
EndIf
oldResult = Result
Result + Relative
Wend
ProcedureReturn Result
EndIf
EndProcedure
OpenConsole()
z.f = ValF(Input())
PrintN("")
PrintN(StrF(sqrt(z)))
Input()
Verfasst: 20.12.2005 15:31
von zeck
hmm ihc hab hier den code in turbo pascal...
falls wer wüsste wie des in pb heisst ...wär ich sehr dankbar
uses wincri
Var A,l,b:real
begin
readln(A);
readln(l);
b:= A/l
While (round(l*10000) <> round(b*10000)) do
begin
l:= (l+b)/2
b:= A/l
end
writeln('Die wurzel aus' ,A,' ist 'l)
end
Verfasst: 20.12.2005 16:09
von PMV
writeln('Die wurzel aus' ,A,' ist 'l)
Das ist doch bestimmt der Ausgabestring?
Woanders werden doch keine Strings benutzt. Also wo liegt jetzt das problem? Du rechnest mit den Floatvariablen und wandelst die am ende in Strings um.
z.B. so:
Code: Alles auswählen
MessageRequester("Ergebnis", "Die Wurzel aus " + STRF(A, 2) + " ist " + STRF(l, 2))
(Code direkt hier eingegeben und daher eventuell nicht lauffähig)
MFG PMV
Verfasst: 20.12.2005 17:15
von armada
so kannste es machen:
Code: Alles auswählen
DefType.f A,b,l
A = ValF(InputRequester("","Bitte Radikant eingeben",""))
l = ValF(InputRequester("","Bitte Startwert eingeben",""))
b = A/l
While Int(l * 10000) <> Int(b * 10000)
l = (l + b)/2
b = A/l
Wend
MessageRequester("Wurzel", "Die Wurzel aus " + StrF(A) + " ist " + StrF(l))
oder einfach:
Code: Alles auswählen
MessageRequester("Wurzel", "Die Wurzel ist " + StrF(Sqr(ValF(InputRequester("","Bitte Radikant eingeben","")))))