Ergebnis 1 bis 11 von 11

Thema: Variablentypen in Delphi

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Davias Beitrag anzeigen
    Wenn ich richtig verstehe bewirkt StrToInt also, dass ich im Edit-Feld nur noch ganze Zahlen eingeben kann.

    Also gilt die Umwandlung nicht für meine Variable n, sondern für Edit1.Text?
    Das würde Sinn machen, denn n ist ein Integer und Edit1-Text wäre es nach der Umwandlung auch. Das Edit-Feld wird n also zugeordnet und alles was ich in dieses Feld nachher reinschreibe wird mit dieser Vari verrechnet.
    Nein, nicht ganz. strtoint ist eine bloße Funktion, die einen Wert berechnet, auf das künftige Verhalten von edit1 hat sie keinerlei Einfluss. Was in Zeile 5 wirklich passiert, ist folgendes (Schritt für Schritt erklärt):
    Code:
    edit1 // Der Identifier spricht das Eingabefeld dieses Namens an
    edit1.text // Liefert die Eigenschaft "text" des Eingabefelds mit
               // der ID "edit1". Diese enthält den eingegebenen Text
               // (als String).
    strtoint(edit1.text) // Die Funktion strtoint nimmt einen String
                         // als Parameter und liefert die durch ihn
                         // repräsentierte ganze Zahl zurück. Ist
                         // edit1.text also z.B. "12", so liefert der
                         // Ausdruck den Wert 12 (als Integer) zurück.
    n := strtoint(edit1.text) // Weist der Variablen "n" den Wert des
                              // rechten Ausdrucks (in obigem Beispiel
                              // also 12) zu.
    Dieser Code wird jedes Mal ausgeführt, wenn man auf den Button klickt und wandelt dann den eingegebenen String in eine Zahl um. Der Text wird dabei aber in keinster Weise verändert, du kannst ja mal probieren, was passiert, wenn du totalen Unsinn (also keine Zahl) eingibst.
    Dein dazuedierter Kommentar zu der Zeile ist demnach auch nicht korrekt, die anderen stimmen aber, denke ich.

  2. #2
    Zitat Zitat von drunken monkey Beitrag anzeigen
    Code:
    edit1 // Der Identifier spricht das Eingabefeld dieses Namens an
    edit1.text // Liefert die Eigenschaft "text" des Eingabefelds mit
               // der ID "edit1". Diese enthält den eingegebenen Text
               // (als String).
    strtoint(edit1.text) // Die Funktion strtoint nimmt einen String
                         // als Parameter und liefert die durch ihn
                         // repräsentierte ganze Zahl zurück. Ist
                         // edit1.text also z.B. "12", so liefert der
                         // Ausdruck den Wert 12 (als Integer) zurück.
    n := strtoint(edit1.text) // Weist der Variablen "n" den Wert des
                              // rechten Ausdrucks (in obigem Beispiel
                              // also 12) zu.
    Genau, wenn Edit1 allerdings nicht umwandelbar ist, dann bekommst du n' Fehler un d die Prozedure schmiert ab, also solltest du solche Umwandlungen vorsichtig anwenden aka pruefen oder durch z.B. Spinedits ausschschliesen.

    Code:
    function IsInt(S: Integer): Boolean;
    var
      Temp: Integer;
    begin
      try
        Temp := StrToInt(S);
        Result := True;
      except
        Result := False;
      end:
    end;
    
    function IsInt(S: Integer): Boolean;
    var
      I: Integer;
    begin
      Result := True;
      for I := 1 to Length(S) do
        if ((S[I] <> '1') AND (S[I] <> '2') AND (S[I] <> '3') AND 
            (S[I] <> '4') AND (S[I] <> '5') AND (S[I] <> '6') AND 
            (S[I] <> '7') AND (S[I] <> '8') AND (S[I] <> '9') AND 
            (S[I] <> '0')) then
          Result := False;
    end;
    Beide gehen (ungetestet, grad kein Delphi). Obere pausiert aber im Debug Modus bei einem Nicht-Integer.

    Anwendung waere dann so:

    Code:
    var
      n, i: Integer;
      summe: Real; 
    begin
      if IsInt(Edit1.Text) then
      begin
        n := StrToInt(Edit1.Text);
        summe := 0;
    
        for i := 1 to n do
        begin
          summe := summe + i;
        end;
     
        Label1.Caption := 'S = ' + FloatToStr(summe);
      end
      else
        ShowMessage('Fehler blub...');
    end;
    Quellcodes einrueken und Gross-Kleinschreibung beachten ist btw. ziemlich sinnvoll wenn es um Leserlichkeit geht.

    Geändert von Crash-Override (10.05.2008 um 23:07 Uhr)

  3. #3
    @drunken monkey: Hab mir die Informationen aus deinem Post noch einmal in einfacher Form zusammengetragen, um zu sehen ob ich das auch wirklich kapiert habe:

    edit1 // Klar, ein Eingabefeld.
    edit1.text // Edit.text gibt also meinen eingegebenen Daten den String-Typus.

    Zitat Zitat von drunken monkey
    strtoint(edit1.text) //Ist edit1.text also z.B. "12", so liefert der Ausdruck den Wert 12 (als Integer) zurück.
    Gut, das verstehe ich.

    Zitat Zitat von drunken monkey
    n := strtoint(edit1.text)
    Also Variable n bekommt den Wert meiner Eingabe, was immer das auch sein mag. Demnach ist es also klüger, lieber eine Zahl als ein Wort einzugeben, da sowas sonst Fehler provoziert (das Wort "Hamster" als Integer zurückzugeben ist wohl für Delphi unmöglich, bei der Zahl "12" ists aber kein Problem).


    Eine Frage hätte ich hierzu noch:

    Code:
    label1.caption := 'S = ' + floattostr(summe);
    Die Variable summe wird von einer Kommazahl (real) in einen String umgewandelt, um auf der Caption vom Labelfeld angezeigt zu werden.
    Gilt sowas auch generell, also kann man Zahlen wie Integer und real nicht auf einer Caption anzeigen lassen und muss man sie deshalb immer in einen String umwandeln?

  4. #4
    Zitat Zitat von Davias Beitrag anzeigen
    Eine Frage hätte ich hierzu noch:

    Code:
    label1.caption := 'S = ' + floattostr(summe);
    Die Variable summe wird von einer Kommazahl (real) in einen String umgewandelt, um auf der Caption vom Labelfeld angezeigt zu werden.
    Gilt sowas auch generell, also kann man Zahlen wie Integer und real nicht auf einer Caption anzeigen lassen und muss man sie deshalb immer in einen String umwandeln?
    Nein, sowas geht nicht. Zahlen zu String immer Umwandeln. FloatToInt(), IntToStr() und FormatFloat() [Letzteres fuer komplexere Formatierungen aka 10.10 statt 10.1]

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •