Italia
Foro

Beim Taschenrechner programmieren! Kapier da was nicht. Bzw. Kann Fehler nicht verstehen

 
- Page 1 -



Gary12345
Ciao,
KompilierenMarkierenSeparieren
Window 0,0-400,400

Proc Hauptprogramm

    declare wert%, wert2%, wert3%, wert4%, wert5%, wert6%, wert7%, wert8%, wert9%, wert10%
    var Button1& = CREATE("Button",%HWND,"1", 50, 50, 50, 50)
    var Button2& = CREATE("Button",%HWND,"2",50, 100, 50, 50)
    var Button3& = CREATE("Button",%HWND,"3",50,150,50,50)
    var Button4& = CREATE("Button",%HWND,"4",50,200,50,50)
    var Button5& = CREATE("Button",%HWND,"5",50,250,50,50)
    var Button6& = CREATE("Button",%HWND,"6",100,50,50,50)
    var Button7& = CREATE("Button",%HWND,"7",100,100,50,50)
    var Button8& = CREATE("Button",%HWND,"8",100,150,50,50)
    var Button9& = CREATE("Button",%HWND,"9",100,200,50,50)
    var Button10& = CREATE("Button",%HWND,"0",100,250,50,50)
    var Button11& = CREATE("Button",%HWND,"+",200,50,50,50)
    var Button12& = CREATE("Button",%HWND,"-",200,100,50,50)
    var Button13& = CREATE("Button",%HWND,":",200,150,50,50)
    var Button14& = CREATE("Button",%HWND,"*",200,200,50,50)
    var Button15& = CREATE("Button",%HWND,"=>",200,250,50,50)
    var ButtonClear& = CREATE("Button", %HWND, "TEST100", 250,100,100,100)

    While 1

        WaitInput

        If clicked(Button1&)

            wert% = 1
            Print wert%

        EndIf

        If clicked(Button2&)

            wert2% = 2
            print wert2%

        EndIf

        If clicked(Button3&)

            wert3% = 3
            print wert3%

        EndIf

        If clicked(Button4&)

            wert4% = 4
            print wert4%

        EndIf

        If clicked(Button5&)

            wert5% = 5
            print wert5%

        EndIf

        If clicked(Button6&)

            wert6% = 6
            print wert6%

        EndIf

        If clicked(Button7&)

            wert7% = 7
            print wert7%

        EndIf

        If clicked(Button8&)

            wert8% = 8
            print wert8%

        EndIf

        If clicked(Button9&)

            wert9% = 9
            print wert9%

        EndIf

        If clicked(Button10&)

            wert10% = 0
            print wert10%

        EndIf

        If clicked(Button11&)

            var Ergebnis$[wert1%,wert2%,wert3%,wert4%,wert5%,wert6%,wert7%,wert8%,wert9%,wert10%] = wert%+wert2%+wert3%+wert4%+wert5%+wert6%+wert7%+wert8%+wert9%+wert10%
            print Ergebnis$

        EndIf

        If clicked(ButtonClear&)

            cls

        EndIf

    EndWhile

EndProc

While 1

    WaitInput
    Hauptprogramm

EndWhile


Wie ich vorgegangen bin:

1. Habe überlegt, ob ich Buttons verwenden soll oder nur ein Editierfeld. Ich habe mich per die schwierigere Variante entschieden, nämlich die Buttons.
2. Das Hauptprogramm in un Prozedur gestellt. Externe Funktionen werden in einem Extra-Proc behandelt.
3. Alle Buttons einen Wert zuweisen (naturalmente integer) => wert% - wert10%
4. Falls Button "+" gedrückt wurde, alle Werte addieren. Zu guter letzt sie mit print darstellen lassen (Das Ergebnis naturalmente)

Mein Problem:

1. Es addiert alles richtig, nur wenn ich das zweite mal addiert habe (also das zweite mal rechne ohne ClearUp) kommt eine Fehlermeldung, dass ich die Variable Ergebnis doppelt deklariert habe. Kann diesen Fehler nicht nachvollziehen.
2. Wenn ich nur einmal zwei Werte addiere und dann zu guter Letzt auf den Button100 klicke, kommt beim zweiten Rechnen auch eine Fehlermeldung. Das ist wiederum die gleiche wie in Problem1 beschrieben.
3. Ich kann nur Werte 0-9 darstellen. Keine Werte circa 9. Warum? Warum hängt es immer eine Zahl drunter statt neben der Zahl? Kann ich auch nicht nachvollziehen.

Wie ihr mir helfen könntet

Ich will keinen Lösungscode. Ich will nur Hinweise auf die Ursache dieses Fehlers. Was ich genau falsch gemacht habe und noch weitere andere Sachen. Dazu würde ich das Problem nicht alles auf einmal machen, sondern alles Schritt per Schritt. Ich war es früher gewohnt einfach nur Codes zu bekommen, aber diesmal will ich wirklich lernen. Wenn ich was nicht verstehe, dann frag ich eben nach. Aber Hinweise statt der ganzen Lösung ist oft sinnvoller als man denkt.

Daher vielen Dank schon in vorraus!
 
XProfan X2
MfG
Gary12345
26.01.2013  
 



 
- Page 2 -


formel$ ist einfach nur ein String
declare formel$

Das Dein Code alle Zeichen untereinander schreibt ist ja programmiert,
Print schließt mit \n ab -

Abhilfe ist hinter die Print-Parameter ein Semikolon oder Komma zu schreiben,

also print "10";
print "20";

gibt 1020 aus.

Wozu aber print wenn es SetText in Verbindung z.B. mit einem create("text
oder create("edit gibt und drawText gibt es auch noch.

Das Dein Taschenrechner nicht richtig rechnet ist ein Programmablaufproblem -
also ein Logisches. Da weiß ich nicht wie ich Dir helfen kann denn das Eindenken
in den Code - so wie ich es verstanden habe - möchtest Du Dir selbst überlassen.
So kann ich imho nur schreiben dass das Programm imho genau das macht, wie es
programmiert ist.
 
26.01.2013  
 




Gary12345
Ja OK habe weiter gelernt. Vielleicht bin ich auch nur zu müde. Aber ich werde alles geben, es alleine das Problem zu lösen.

Danke!
 
XProfan X2
MfG
Gary12345
26.01.2013  
 



Wenn Du nicht weiter kommst dann einfach melden.
 
26.01.2013  
 




Gary12345
OK kleine Nebenfrage.

man kann Zahlenwerte mit str$ in string konventieren. Wie kann ich &werte in int umwandeln? Geht das?
 
XProfan X2
MfG
Gary12345
26.01.2013  
 



Ich verstehe nicht, was ist &werte ?

& ist ja schon int bzw. in 32-Bit XProfan long bzw. ist in 32-Bit-XProfan int=long

Es gibt val( um aus "20" 20 zu machen, quasi String->Float.
 
26.01.2013  
 




Gary12345

KompilierenMarkierenSeparieren
Window 0,0-400,400
declare wert%, wert2%, wert3%, wert4%, wert5%, wert6%, wert7%, wert8%, wert9%, wert10%
declare Ergebnis$
declare button1&, button2&, button3&, button4&, button5&, button6&, button7&, button8&, button9&, button10&, button11&, button12&, button13&, button14&
declare button15&, buttonclear&

Proc Hauptprogramm

    Button1& = CREATE("Button",%HWND,"1", 50, 50, 50, 50)
    Button2& = CREATE("Button",%HWND,"2",50, 100, 50, 50)
    Button3& = CREATE("Button",%HWND,"3",50,150,50,50)
    Button4& = CREATE("Button",%HWND,"4",50,200,50,50)
    Button5& = CREATE("Button",%HWND,"5",50,250,50,50)
    Button6& = CREATE("Button",%HWND,"6",100,50,50,50)
    Button7& = CREATE("Button",%HWND,"7",100,100,50,50)
    Button8& = CREATE("Button",%HWND,"8",100,150,50,50)
    Button9& = CREATE("Button",%HWND,"9",100,200,50,50)
    Button10& = CREATE("Button",%HWND,"0",100,250,50,50)
    Button11& = CREATE("Button",%HWND,"+",200,50,50,50)
    Button12& = CREATE("Button",%HWND,"-",200,100,50,50)
    Button13& = CREATE("Button",%HWND,":",200,150,50,50)
    Button14& = CREATE("Button",%HWND,"*",200,200,50,50)
    Button15& = CREATE("Button",%HWND,"=>",200,250,50,50)
    ButtonClear& = CREATE("Button", %HWND, "TEST100", 250,100,100,100)

EndProc

Hauptprogramm

While 1

    WaitInput

    If clicked(Button1&)

        wert% = 1
        Print wert%;

    EndIf

    If clicked(Button2&)

        wert2% = 2
        print wert2%;

    EndIf

    If clicked(Button3&)

        wert3% = 3
        print wert3%;

    EndIf

    If clicked(Button4&)

        wert4% = 4
        print wert4%;

    EndIf

    If clicked(Button5&)

        wert5% = 5
        print wert5%;

    EndIf

    If clicked(Button6&)

        wert6% = 6
        print wert6%;

    EndIf

    If clicked(Button7&)

        wert7% = 7
        print wert7%;

    EndIf

    If clicked(Button8&)

        wert8% = 8
        print wert8%;

    EndIf

    If clicked(Button9&)

        wert9% = 9
        print wert9%;

    EndIf

    If clicked(Button10&)

        wert10% = 0
        print wert10%;

    EndIf

    If clicked(Button11&)

        Ergebnis$ = str$(wert%+wert2%+wert3%+wert4%+wert5%+wert6%+wert7%+wert8%+wert9%+wert10%)
        print Ergebnis$

    EndIf

    If clicked(ButtonClear&)

        cls

    EndIf

EndWhile


Ciao,

Problem1 gelöst, es schreibt Zahlen nebeneinander, erkennt sie er nicht als 11 sondern als 1 1 1 1 ... .
Also war das jetzt eine Teillösung.



Mach doch erstmal, dass wenn man einen Button klickt, dass das entsprechende
Zeichen zu einem String hinzugefügt wird.


Warum zu einem string? Ich muss doch die erstmal zu einem integer wert machen? Wenn Button mit der Aufschrift 1 gedrückt wurde, füge Wert 1 hinzu usw.

Könnte mir jemand seine Gedankenschritte geben, wie man das lösen potuto. Hab jetzt schon mit multiedits rumprobiert.

Schon proggt man was vermeintlich leichtes, das jedoch dann doch etwas schwieriger ist.

Nebenfrage:
KompilierenMarkierenSeparieren
cls
var frage$ = "Hallo, bin ich dumnm?"

Proc Message

    Parameters frage$
    @Messagebox(frage$,"hinweis",0)

EndProc

Message
WaitInput
End

Definition von Parameters:

Die Aufrufparameter einer Prozedur werden Variablen zugewiesen, die innerhalb der Prozedur bekannt sind. Ein Beispiel findet sich unter Proc. Die Anzahl der Variablen sollte höchstens gleich der maximalen Anzahl der Übergabeparameter sein; überprüft wird dieses aber ebensowenig, wie die Datentypen. Gegebenenfalls erfolgt eine automatische Umwandlung.

Entweder verstehe ich Parameters falsch oder in meinem Code ist was falsch.

Wenn ich Parameters entferne, wird alles korrekt angezeigt. Was macht nun Parameters eigentlich?
KompilierenMarkierenSeparieren
cls
FRAGE "Möchten Sie noch eine weitere Messagebox sehen?"
WaitInput

Proc Frage

    Parameters fragetext$
    Messagebox(fragetext$,"F R A G E",4132)

    ifnot %Button=6

        end

    endif

    messagebox("Ich bin wirklich eine schöne Messagebox!","I N F O",4160)

EndProc


Da geht es zum Beispiel.

Da wandelt es das ""Möchten Sie noch eine weitere Messagebox sehen?"" in einen Parameter um (fragetext$). Also kann man irgendwie Parameter erzeugen. Verstehe es aber immer noch nicht ganz.

LG
 
MfG
Gary12345
27.01.2013  
 




Jörg
Sellmeyer
Schau dir das mal an
KompilierenMarkierenSeparieren
Proc Problem

    Parameters Frage$,Loesung$

    If Frage$ = "Wie?"

        Loesung$ = "So!"

    ElseIf Frage$ = "Was?"

        Loesung$ = "Das!"

    EndIf

    Return Loesung$

EndProc

Cls
Print Problem("Wie?")
Print Problem("Was?")
WaitInput
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
27.01.2013  
 




Gary12345
OK das mit Parameters habe ich verstanden. Ist ja ganz nützlich. Nur jetzt gilt es das andere zu klären.
 
XProfan X2
MfG
Gary12345
27.01.2013  
 




Gary12345
Ich habe eine Theorie, wie ich die anderen Probleme lösen potuto.

Ich würde z.B. das so machen:
KompilierenMarkierenSeparieren
Proc Summe()

    Parameters a!,b!
    var Ergebnis% = a1+b1

EndPr

(ungefähr)

Gibt es per mathematische Berechnungen eine Includedatei, wenn nicht, würde ich eventuell so eine bauen?
KompilierenMarkierenSeparieren
Proc Summe

    parameters a!,b!
    declare Summe!
    set("decimals",2)
    Summe! = a!+b!

EndProc

cls
var zahl! = Summe(4.34,2.31)
print zahl!
WaitInput

Das funktioniert zum Beispiel.

Eine Include bei euch gefrunden: mathe.inc , ist aber bisschen verbuggt.

Beispielcode:
KompilierenMarkierenSeparieren
 $I mathe.inc

Proc Summe

    parameters a!,b!
    declare Summe!
    set("decimals",2)
    Summe! = a!+b!

EndProc

cls
var zahl! = Summe(3,2)
print zahl!
print pi!
WaitInput

das print pi! ist aus der INCLUDE. Gefunden habe ich es bei euch unter INCLUDE. Wartet - ich suche schnell den Link.

EDIT: Hier der Link: [...] 

Bei XProfan scheint auch eine Standardinc mitgeliefert zu sein, die entspricht aber nicht meinen Ansprüchen. Bzw. es ist circa meinen Ansprüchen, dass ich in der Mathematik nicht mitkomme. Cerca jetzt noch nach weiteren Include.

Bin mittlerweile soweit:
KompilierenMarkierenSeparieren
Proc Summe

    parameters a!,b!
    declare Summe!
    set("decimals",2)
    Summe! = a!+b!
    ROUND(Summe!,2)
    return

EndProc

Proc Minus

    parameters a!,b!
    declare Minus!
    set("decimals",2)
    Minus! = a!-b!
    ROUND(Minus!,2)
    return

EndProc

Proc Teilen

    parameters a!,b!
    declare Teilen!
    set("decimals",2)
    Teilen! = a!/b!
    ROUND(Teilen!,2)
    return

EndProc

Proc Multiplizieren

    parameters a!,b!
    declare multiplizieren!
    set("decimals",2)
    multiplizieren! = a!*b!
    ROUND(Multiplizieren!,2)
    return

EndProc

Proc Wurzel

    parameters a!
    declare Wurzel!
    set("decimals",2)
    Wurzel! = sqrt(a!)
    Round(Wurzel!,2)
    return

EndProc

Proc Kreiszahl

    declare Pi!
    set("decimals",10)
    Pi! = 3.141592653589
    return

EndProc

Proc ADreieck

    parameters a!,b!
    declare ADreieck!
    set("decimals",2)
    ADreieck! = 0.5*a!*b!
    ROUND(ADreieck!,1)
    return

EndProc

cls
var zahl! = Summe(3.433,2.434)
var zahl2! = Minus(3,2)
var zahl3! = Teilen(3,2)
var zahl4! = Multiplizieren(3,2)
var zahl5! = ADreieck(3,2)
print zahl!
print zahl2!
print zahl3!
print zahl4!
print Kreiszahl()
print zahl5!
WaitInput

Scheint alles zu gehen.
 
MfG
Gary12345
27.01.2013  
 




Gary12345

KompilierenMarkierenSeparieren
'Include programmiert von Gary12345

Proc Summe

    parameters a!,b!
    declare Summe!
    set("decimals",2)
    Summe! = a!+b!
    ROUND(Summe!,2)
    return

EndProc

Proc Minus

    parameters a!,b!
    declare Minus!
    set("decimals",2)
    Minus! = a!-b!
    ROUND(Minus!,2)
    return

EndProc

Proc Teilen

    parameters a!,b!
    declare Teilen!
    set("decimals",2)
    Teilen! = a!/b!
    ROUND(Teilen!,2)
    return

EndProc

Proc Multiplizieren

    parameters a!,b!
    declare multiplizieren!
    set("decimals",2)
    multiplizieren! = a!*b!
    ROUND(Multiplizieren!,2)
    return

EndProc

Proc Wurzel

    parameters a!
    declare Wurzel!
    set("decimals",2)
    Wurzel! = sqrt(a!)
    Round(Wurzel!,2)
    return

EndProc

Proc ADreieck

    parameters a!,b!
    declare ADreieck!
    set("decimals",2)
    ADreieck! = 0.5*a!*b!
    ROUND(ADreieck!,2)
    return

EndProc

Proc AQuadrat

    parameters a!
    declare Quadrat!
    set("decimals",2)
    Quadrat!=a!*a!
    ROUND(Quadrat!,2)
    return

EndProc

Proc ARechteck

    parameters a!,b!
    declare Rechteck!
    set("decimals",2)
    Rechteck! = a!*b!
    ROUND(Rechteck!,2)
    Return

EndProc

Proc AKreis

    parameters a!
    declare Kreis!
    set("decimals",2)
    Kreis! = @Pi()*a!
    ROUND(Kreis!,2)
    Return

EndProc

Proc ATrapez

    parameters a!,c!,h!'Trapezformel: 0.5*(a+c)*höhe! (h!)
    declare Trapez!
    set("decimals",2)
    Trapez! = 0.5*(a!+c!)*h!
    ROUND(Trapez!,2)
    Return

EndProc

Proc AParallelogramm

    parameters g!,h!
    declare Parallelogramm!
    set("decimals",2)
    Parallelogramm! = g!*h!'Grundfläche*Höhe
    ROUND(Parallelogramm!,2)
    Return

EndProc

Proc VWürfel

    Parameters a!
    declare Würfel!
    set("decimals",2)
    Würfel! = a!*a!*a!
    ROUND(Würfel!,2)
    Return

EndProc

Proc VQuader

    Parameters a!,b!,c!
    declare Quader!
    set("decimals",2)
    Quader! = a!*b!*c!
    ROUND(Quader!,2)
    Return

EndProc

Proc VKugel

    parameters r!
    declare Kugel!
    set("decimals",2)
    Kugel! = 4/3*@PI()*r!*r!*r!
    ROUND(Kugel!,2)
    Return

EndProc

Proc VKegel

    parameters r!,h!
    declare Kegel!
    set("decimals",2)
    Kegel! = 1/3*@PI()*r!*r!*h!
    ROUND(Kegel!,2pan>
    Return

EndProc


Zurzeitiger Code. Include meiner Ansicht fertig.
 
MfG
Gary12345
27.01.2013  
 



Du musst ja die Ziffern nicht zu einem String hinzufügen, aber Du könntest.

Du kannst ebenso bei Klick auf eine Ziffer die aktuelle Summe mit 10 Multiplizieren
und il valore der geklickten Ziffer addieren.

Quasi

0
klick 1
0*10+1
1
klick 5
1*10+5
15
klick 9
15*10+9
159

so lünden die Buttonklicks auch im Wert.
 
27.01.2013  
 




Gary12345
Darf ich meine kleine Include bei euch vorstellen unter dem Punkt INCLUDES?
 
XProfan X2
MfG
Gary12345
27.01.2013  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

24.209 Views

Untitledvor 0 min.
ecki29.12.2023
MrZebulon05.08.2018
rawerra30.12.2016
Peter Max Müller30.10.2014
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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