tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1087
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    morph3uz morph3uz ist offline Rookie
    Registriert seit
    Oct 2008
    Beiträge
    7
    Hey Leute,
    Ich hab hier ein kurioses Problem.
    Ich bin dabei ein kleines Programm zu schreiben, in Embarcadero Delphi 2010.
    Dazu muss ich String-Passagen in Integer umwandeln, dazu hab ich mir eine Prozedur geschrieben die wie folgt aussieht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function get_digit(term :string; var i :string) :integer;
    var temp :string;
    begin
      temp := '';
      while isdigit(term[i]) and (i < length(term)-1) do begin
        temp := temp + term[i];
        end;
      get_digit := strtoint(temp);
    end;

    Wenn ich nun compiliere meldet der Debugger immer
    Code :
    1
    
    [DCC Error] Übung1.pas(65): E2010 Incompatible types: 'Integer' and 'string'

    und zwar zu den Stellen:
    Code :
    1
    2
    3
    
    isdigit(term[i])
    length(term)-1
    term[i]

    Hoffe mir kann einer das Problem erklären. Ich seh den Fehler leider nicht...
     

  2. #2
    Twinsetter Twinsetter ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    90
    Hallo!

    Du hast im Funktionsaufruf die Variable i als String definiert. In der der while - Bedingung benutzt Du diese Variable aber als integer und genau dies meckert der Compile auch an.
    Dein Code müßte wie folgt aussehen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function get_digit(term :string; var i :integer) :integer;
    var temp :string;
    begin
      temp := '';
      while isdigit(term[i]) and (i < length(term)-1) do begin
        temp := temp + term[i];
        end;
      Result := strtoint(temp);
    end;

    Bei der Zuweisung des Funktionsergebnisses brauchst Du den Funtionsnamen nicht zu wiederholen. Es reicht, wenn Du Result:= (s. Listing) sagst.
    Noch ein paar Tips zu Deinem Code.
    Du solltest prüfen ob Dein String auch wirklich eine gültige Integerzahl ergibt. Deshalb würde ich bei die Zeile temp:=temp+term[i] lieber so scheiben:
    Code :
    1
    2
    3
    
    if temp[i] in ['0'..'9'] 
    then temp:=temp+term[i]
    else exit;

    Nur wenn der Stringteil eine gültige Zahl ist, dann weitermachen ansonsten aussteigen. Den else Zweig könnte man natürlich auch anders formulieren - man muß nicht unbegingt komplett aussteige
    Dann würde ich am Anfang noch eine generelle Initialisierung der Funktion machen, d.h. dafür sorgen, daß es immer einen definierten Rückgabewert gibt - z.B. Result:=0 (nach begin) einfügen. Wenn Du sicher bist, daß Du nur positive Zahlen bei Deiner Umwandlung erhältst, dann ist es sinnvoll die Funktion mit Result=-1 zu initialisieren. Du könntest dann diesen Wert abfragen und weißt sofort, daß da was schief gelaufen ist.

    Noch ne Frage: Warum wird i als var Parameter deklariert ? Du veränderst i in der Funktion nicht, demzufolge mußt Du auch keinen veränderten Wert zurückgeben.

    Twinsetter
     

  3. #3
    morph3uz morph3uz ist offline Rookie
    Registriert seit
    Oct 2008
    Beiträge
    7
    haha, oh mann. wenn man zu lang vor diesem kasten sitzt sieht mann iwann den wald vor lauter bäumen nicht mehr... danke
    Thema kann geschlossen werden.

    i wird eigentlich noch innerhalb der schleife hochgezählt. und dass es eine integer zahl ist steht auch schon fest : )
    mich hat nur das i gewurmt :P
    Geändert von morph3uz (15.04.10 um 22:32 Uhr)
     

Ähnliche Themen

  1. Wahrscheinlich ein Anfängerproblem...
    Von TichaWutz im Forum CSS
    Antworten: 3
    Letzter Beitrag: 06.11.10, 22:13
  2. CSS wahrscheinlich Vererbungsproblem
    Von skywalkerluk im Forum CSS
    Antworten: 18
    Letzter Beitrag: 08.01.10, 22:05
  3. Antworten: 2
    Letzter Beitrag: 28.07.05, 14:39
  4. MySql - Wenn falsche Datumsangabe, dann Meldung...
    Von Newcomer1 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 26.07.05, 15:55
  5. debugger-meldung: was ist daran falsch?
    Von Edgecrusher im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 13.08.02, 08:58