Deutsch
Forum

Quadratwurzel ohne Begrenzung

 
- Seite 1 -



Stefan
Landsberg
Hallo,

ich möchte ein Programm schreiben, dass die Quadratwurzel einer Zahl berechnet.
ABER es soll nicht auf 6 Nachkommastellen runden, sondern solange weitermachen bis man auf Stop klickt.

Frage:
(wie) kann man das Kürzen auf 6 Nachkommastellen bei sqrt() und pow() abstellen.

Wenn das nicht geht, dann muss ich mir irgend eine Prozedur einfallen lassen die dass macht.
Aber bitte keine Fertiglösung posten. Dann lerne ich nichts.

Noch eine Frage:
ist in XProfan 10 die länge eines floats begrenzt?
 
15.08.2008  
 



 
- Seite 1 -



Jac
de
Lad
Nein, nein, nein! Typischer Anfängerfehler. Um mit den Eingaben zu rechnen musst du es erst von String in ein Float umwandeln (siehe "Val()") und zur Ausgabe im MultiEdit wieder in einen String (siehe "Str$()").
Declare
declare in&,out&,btn&,ergebnis$,ende%,eingabe$
Fenster erstellen
windowstyle 575
windowtitle "Quadratwurzel"
window 20,20 - 600,400
usefont "MS Sans Serif",20,0,0,0,0
Fenster gestalten
in&=create("edit",%hWnd,"25",5,5,580,20)
btn&=create("button",%hWnd,"Berechnen",250,30,100,30)
out&=create("multiedit",%hWnd,"",5,65,580,-270)

whilenot ende%

    WaitInput
    case %key=2 : break

    if clicked(btn&)

        eingabe$=gettext$(in&)
        ergebnis$=Str$(sqrt(Val(eingabe$)))
        settext out&,""
        settext out&,ergebnis$

    endif

endwhile


Kürzer wäre dein Prog so:
Declare
declare in&,out&,btn&,ende%
Fenster erstellen
windowstyle 575
windowtitle "Quadratwurzel"
window 20,20 - 600,400
usefont "MS Sans Serif",20,0,0,0,0
Fenster gestalten
in&=create("edit",%hWnd,"25",5,5,580,20)
btn&=create("button",%hWnd,"Berechnen",250,30,100,30)
out&=create("multiedit",%hWnd,"",5,65,580,-270)

whilenot ende%

    WaitInput

    if %key=2

        break

    elseif clicked(btn&)

        settext out&,Str$(sqrt(Val(gettext$(in&))))

    endif

endwhile


Zum Thema Berechnung:

Du kannst entweder jede Stelle einzeln berechnen lassen oder eine Zahl quadrieren und je nachdem ob sie zu groß oder zu klein ist immer ein wenig erhöhen oder abziehen. Dazu musst du die Zahlen in Strings speichern und jede Stelle einzeln multiplizieren.

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
15.08.2008  
 




Stefan
Landsberg
Hallo,

ich nehme für die ausgabe des ergebnisses ein einfaches editfeld, aber da ich in meinem Programm ja an die vorhandene zahl immer die neu berechnete stelle dranhängen will, ist es meiner meinung nach unpraktisch und wahrscheinlich auch zu langsam immer erst den aktuellen text mit gettext aus dem editfeld auszulesen, eine neu ziffer dranzuhängen, und dann wieder die zahl mit settext ins editfeld zu schreiben.
gibts da eine bessere methode oder irgendeine message (gibts eine seite/datei in der die messages auf deutsch erklärt sind) ?
 
19.08.2008  
 



wm_copyData könnte Dir hier helfen.
 
19.08.2008  
 




Stefan
Landsberg
hallo,
danke erstmal aber gibt es irgendwo ne dokumentation in der die messages verständlich (am besten deutsch) erklärt sind?
ich blick bei msdn nicht so richtig durch!
 
19.08.2008  
 



Klar, xprofan.com suche und google sind die Helfer in solcher Not!
 
19.08.2008  
 




Stefan
Landsberg
nachdem ich jetz endlich wieder ein wenig zeit für xprofan gefunden hab (schule beansprucht ne ganze menge zeit. vor allem latein )
stelle ich mal wieder eine frage:

warum wir in der if abfrage keine wert an die variable firstpart$ übergeben?
ich hab auch schon versucht sie als integer zu declarieren. geht auch nicht:
Declare
declare in&,out&,calcbtn&,stopbtn&,ergebnis$,ende%,eingabe$
PROC-Teil

Proc sqrtlong

    Algorithmus zum ziehen einer Quadratwurzel
    Parameters zahl$, output&, stopbtn&
    declare vorkomma$, div2%, firstsqrt%, firstpart$
    zahl$=translate$(zahl$, "," , ".") Dezimalkomma durch Dezimalpunkt ersetzen
    vorkomma$=substr$(zahl$,1,".") Ziffern vor dem Komma in vorkomma$ speichern
    div2%=Instr(".",str$(substr$(len(vorkomma$ / 2),1,"."))) Prüfen ob die Anzahl der Ziffern vor dem Komma gerade oder ungerade ist.

    if div2% = 0

        firstpart$=mid$(vorkomma$,0,2) erste 2 Ziffern aus vorkomma$ werden in firstpart$ gespeichert
        firstsqrt%=substr$(str$(sqrt(val(firstpart$))), 1 , ".") es wird die sqrt aus firstpart$ gebildet (rest wird weggelassen)

    else

        firstpart$=mid$(vorkomma$,0,1) erste Ziffer aus vorkomma$ wird in firstpart$ gespeichert
        firstsqrt%=substr$(str$(sqrt(val(firstpart$))), 1 , ".") es wird die sqrt aus firstpart$ gebildet (rest wird weggelassen)

    endif

    locate 4,1 nur zum testen was firstpart$ enhält
    print "firstpart:",firstpart$ nur zum test was firstpart$ enhält
    sendmessage(output&,$004A,%hWnd,Addr(firstsqrt%))

endproc

Fenster erstellen
windowstyle 575
windowtitle "Quadratwurzel"
window 20,20 - 600,125
usefont "MS Sans Serif",20,0,0,0,0
Fenster gestalten
in&=create("edit",%hWnd,"25,5",5,5,580,20)
calcbtn&=create("button",%hWnd,"Berechnen",170,30,100,30)
stopbtn&=create("button",%hWnd,"Stop",310,30,100,30)
out&=create("edit",%hWnd,"",5,65,580,20)

whilenot ende%

    WaitInput
    case %key=2 : break

    if clicked(calcbtn&)

        sqrtlong gettext$(in&), out&, stopbtn&

    endif

endwhile

 
06.09.2008  
 



Der Zweite Parameter von Mid$ muss mindestens 1 sein wenn man tatsächlich ab erster Position ermitteln möchte.
 
06.09.2008  
 




Stefan
Landsberg
ahhh,
danke (warum bin ich da nicht selbst drauf gekommen )
 
06.09.2008  
 



 
- Seite 2 -



Stefan
Landsberg
soo,
ich hab jetz noch ein bisschen weitergebastelt, und es funktioniert auch alles so wie ich es will.
Aber jetz hab ich wieder mein Problem mit sendmessage.
Was muss ich machen, damit der inhalt der variable firstsqrt% an das editfeld out$ gesendet wird?
KompilierenMarkierenSeparieren
Declare
declare in&,out&,calcbtn&,stopbtn&,ergebnis$,ende%,eingabe$
PROC-Teil

Proc sqrtlong

    Algorithmus zum ziehen einer Quadratwurzel
    Parameters zahl$, output&, stopbtn&
    declare vorkomma$, div2$, firstsqrt%, firstpart$
    zahl$=translate$(zahl$, "," , ".") Dezimalkomma durch Dezimalpunkt ersetzen
    vorkomma$=substr$(zahl$,1,".") Ziffern vor dem Komma in vorkomma$ speichern
    div2$=substr$(len(vorkomma$)/2,2,".") Prüfen ob die Anzahl der Ziffern vor dem Komma gerade oder ungerade ist.
    locate 3,1
    print "div2:",div2$

    if div2$ = 0

        firstpart$=mid$(vorkomma$,1,2) erste 2 Ziffern aus vorkomma$ werden in firstpart$ gespeichert
        firstsqrt%=val(substr$(str$(sqrt(val(firstpart$))), 1 , ".")) es wird die sqrt aus firstpart$ gebildet (rest wird weggelassen)

    else

        firstpart$=mid$(vorkomma$,1,1) erste Ziffer aus vorkomma$ wird in firstpart$ gespeichert
        firstsqrt%=val(substr$(str$(sqrt(val(firstpart$))), 1 , "."))  es wird die sqrt aus firstpart$ gebildet (rest wird weggelassen)

    endif

    locate 4,1 nur zum testen was firstpart$ enhält
    print "firstpart:",firstpart$ nur zum test was firstpart$ enhält
    locate 5,1
    print "firstsqrt:",firstsqrt%
    sendmessage(output&,$004A,%hWnd,Addr(firstsqrt%))

endproc

Fenster erstellen
windowstyle 575
windowtitle "Quadratwurzel"
window 20,20 - 600,125
usefont "MS Sans Serif",20,0,0,0,0
Fenster gestalten
in&=create("edit",%hWnd,"25,5",5,5,580,20)
calcbtn&=create("button",%hWnd,"Berechnen",170,30,100,30)
stopbtn&=create("button",%hWnd,"Stop",310,30,100,30)
out&=create("edit",%hWnd,"",5,65,580,20)

whilenot ende%

    WaitInput
    case %key=2 : break

    if clicked(calcbtn&)

        sqrtlong gettext$(in&), out&, stopbtn&

    endif

endwhile

 
06.09.2008  
 




KompilierenMarkierenSeparieren
 
06.09.2008  
 




Stefan
Landsberg
ok dann mach ichs erstmal damit. aber später wäre es aus folgendem grund doch effizienter eine andere methode zu nehmen oder:

Stefan Löwen
Hallo,

ich nehme für die ausgabe des ergebnisses ein einfaches editfeld, aber da ich in meinem Programm ja an die vorhandene zahl immer die neu berechnete stelle dranhängen will, ist es meiner meinung nach unpraktisch und wahrscheinlich auch zu langsam immer erst den aktuellen text mit gettext aus dem editfeld auszulesen, eine neu ziffer dranzuhängen, und dann wieder die zahl mit settext ins editfeld zu schreiben.
gibts da eine bessere methode oder irgendeine message (gibts eine seite/datei in der die messages auf deutsch erklärt sind) ?


iF
wm_copyData könnte Dir hier helfen.
 
06.09.2008  
 



Hängt davon ab, ob Du etwas an der Cursorposition "anhängen" möchtest (wm_copyData), oder den ganzen Inhalt ersetzen (setText).
 
06.09.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.425 Betrachtungen

Unbenanntvor 0 min.
Sebastian Sprenger13.10.2013
Andreas Koch20.12.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie