heron

Anfängerfragen zum Programmieren mit PureBasic.
zeck
Beiträge: 3
Registriert: 19.12.2005 18:14
Kontaktdaten:

heron

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
zeck
Beiträge: 3
Registriert: 19.12.2005 18:14
Kontaktdaten:

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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()
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
zeck
Beiträge: 3
Registriert: 19.12.2005 18:14
Kontaktdaten:

Beitrag 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
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

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