Heron-Algorithmus

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Black Spider

Betreff: Heron-Algorithmus

BeitragDi, Okt 18, 2005 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab n kleines Problem mit nem Prog, was auf gleicher weise wie der Heron-Algorithmus funktioniert.

"Integer divine zero" kommt dann immer...
Code: [AUSKLAPPEN]
Graphics 1024,768,16,1


AppTitle "Heron-Algorithmus"


Local z

Local aa, bb
Local cc, dd
Local ee, ff
Local gg, hh
Local ii, jj
Local kk, ll
Local mm, nn
Local oo, pp
Local qq, rr
Local s, tt
Local uu, vv
Local ww, xx
Local yy, zz




eingabe()


Function eingabe()

Zahl# = Input("Gib die Zahl ein, dessen Wurzel wir uns nähern sollen  ")

If Zahl# <= 0 Then
Cls
Text 0,0,"Falsche Eingabe!!!"
Eingabe()
End If

If Zahl# > 9999999999999999 Then
Cls
Delay 500
Text 0,0,"Erm... eine kleinere Zahl bitte !?"
Eingabe()
End If


End Function





z = Zahl#
aa = z / 10
bb = z / aa

cc = (aa + bb) / 2
dd = z / cc

ee = (cc + dd) / 2
ff = z / ee

gg = (ee+ff) / 2
hh = z / gg

ii= (gg+hh) / 2
jj= z / ii

kk=(ii+jj) / 2
ll= z / kk

mm=(kk+ll) / 2
nn= z / mm

oo=(mm+nn) / 2
pp= z / oo

qq=(oo+pp) / 2
rr= z / qq

s =(qq+rr) / 2
tt= z / s

uu=(s +tt) / 2
vv= z / uu

ww=(uu+vv) / 2
xx= z / ww

yy=(ww+xx) / 2
zz= z / yy



While Not(KeyHit(1))

If yy < zz Then
Text 512, 334, "Die Wurzel aus "+z+"liegt zwischen"+yy+" und"+zz+ " . "
End If

If zz < yy Then
Text 512, 334, "Die Wurzel aus "+z+"liegt zwischen"+zz+" und"+yy+ " . "
End If

Wend


Danke!
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Ofenrohr

BeitragDi, Okt 18, 2005 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich hatte vor kurzdem das heron verfahren in der schule. habe ebenfalls eine programmierte lösung für das Problem gesucht. habe es mit php gemacht.
hier der original php code:
Code: [AUSKLAPPEN]

<?
function wurzel($zahl)
{
 $min = 1;
 $max = $zahl;
 
 while (($i<=100) || ($min==$max))
 {
    $min = mittelwert($zahl,$min);
    $max = $zahl/$min;
 }
 
 $ret = mittelwert($min,$max);
 return $ret;
}
function mittelwert($x,$y)
{
 $ret = ($x+$y)/2;
 return $ret;
}
?>


der abbruchwert liegt bei 100 annäherungen oder gleichheit von min und max.

wenn man das ganze in Blitzbasic konvertiert müsste das so aussehn:

BlitzBasic: [AUSKLAPPEN]

Function wurzel%(zahl%)
min% = 1
max% = zahl

While ((i<=100) Or (min=max))
i=i+1
min = mittelwert(zahl,min)
max = zahl/min
Wend

ret% = mittelwert(min,max)
Return ret
End Function

Function mittelwert%(x%,y%)
ret% = (x+y)/2
Return ret
End Function


kann nicht sagen, ob es in blitzbasic läuft, weil ich keinen bb complier in linux habe, müsste aber funktionieren.

mfg ofenrohr

EDIT: habe nochmal die abbruchbedingung mit 100 durchläufen auch funktionsfähig gemacht, ich hatte i=i+1 vergessen. außerdem hab ich die ganzen ; rausgenommen.
Ofenrohr.net
  • Zuletzt bearbeitet von Ofenrohr am Mi, Okt 19, 2005 9:14, insgesamt einmal bearbeitet
 

Buddah

BeitragDi, Okt 18, 2005 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
um deine version zum laufen zu kriegen @ black spider
musst du Zahl# in deiner funktion eingabe() returnen

also

....
Return Zahl#
End Function

und beim aufruf der funktion dann

Zahl# = eingabe()


Damit funktioniert es dann.. allerdings solltest du es doch nochmal überarbeiten.. die version von ofenrohr sollte schonmal ein guter
anfangspunkt sein.
Alles ist gut so wie es ist und bald wird alles anders.

Ofenrohr

BeitragMi, Okt 19, 2005 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
was auchnoch zu bedenken ist:

soweit ich weis, muss man "function# eingabe()" schreiben, weil eine kommazahl zurückgegeben werden soll. standart müsste string ($) sein.

Onlinehilfe - Function hat Folgendes geschrieben:

Mit RETURN kann ein Wert zurückgeliefert werden. Soll ein Integerwert übergeben werden, so kann man ein %-Zeichen am Ende der Funktion-Bezeichnung einfügen (man kann es aber auch ganz weglassen). Soll ein Floatwert übergeben werden, dann muss man #-Zeichen angeben. Für einen Stringwert muss man ein $-Zeichen verwenden.


mfg ofenrohr
Ofenrohr.net
 

Ava

Gast

BeitragMi, Okt 19, 2005 15:53
Antworten mit Zitat
Ofenrohr hat Folgendes geschrieben:

soweit ich weis, muss man "function# eingabe()" schreiben, weil eine kommazahl zurückgegeben werden soll. standart müsste string ($) sein.


Function Eingabe#() ... und Standard ist soweit ich weis Integer. Smile

Ofenrohr

BeitragMi, Okt 19, 2005 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid, ich habe seit ewigkeiten kein blitzbasic mehr geschrieben. entschuldigung
Ofenrohr.net

Black Spider

BeitragMi, Okt 19, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@ll: Danke !!! Doch bei mir kommen sehr seltsame zeichenzahlen raus.
Hab das dann von "%" auf "#" (integer) gesetzt. Lesen kann mans trotzdem noch nicht.
Hat einer von euch ne Ahnung warum? Trotzdem schonmal danke !!
Code: [AUSKLAPPEN]
AppTitle "Heron-Algorithmus"



wurzelaus% = Input("Wurzel aus  ")


eingabe(wurzelaus%)





Function eingabe(waz)



xnull# = waz / 10
ynull# = waz

While ((xnull = ynull) Or (St<=100))
St = St+1
   xnull = mittelwertvon(waz, xnull)
   ynull = waz / xnull
   
   
   
If xnull < ynull
   Text 200,200,"zwischen       "+xnull+" und   "+ynull+"      .     "
End If

If xnull > ynull
   Text 700,700,"zwischen       "+yNull+" und   "+xNull+"      .    "
End If



Wend

ret = mittelwertvon(xnull, ynull)

Return ret

End Function


Function mittelwertvon(x, y)
ret% = (x+y) / 2
Return ret
End Function




While Not(KeyHit(1))

If xnull < ynull
   Text 200,200,"zwischen "+xnull+" und "+ynull+" . "
End If

If xnull > ynull
   Text 200,200,"zwischen "+yNull+" und "+xNull+" . "
End If


Wend

Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group