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","")))))