string zu integer in TurboPascal

Dieses Thema im Forum "Programmieren" wurde erstellt von dragon_MF, 25. September 2002.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    56789\';
    StrToInt(protokoll);
    readln;
    END.
     
  2. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Achso; dass Ganze geht auch umgekehrt...

    function Int2Str(zahl : LongInt) : string;
    var Text : string;
    begin
    Str(zahl, text);
    Int2Str := text;
    end;

    ;-)
     
  3. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Dein Ansatz war nicht schlecht; probier dass mal...

    program demo;
    uses Crt, Dos;
    var eingabe : String;

    function Str2Int(text: String): LongInt;
    var zahl: LongInt;
    code: Integer;
    begin
    Val(text, zahl, code);
    Str2Int := Zahl;
    end;

    begin
    readln(eingabe);
    write(Str2Int(eingabe));
    end.

    Sorry; das Prog ist fast schon peinlich, aber es geht um die Funktion.
    Müssteste vieleicht noch\'n bissel aus- oder umbauen. Ich nehm mal an, dass ich das Thema richtig erfasst habe. Oder?
     
  4. Bond

    Bond Halbes Megabyte

    Registriert seit:
    17. November 2000
    Beiträge:
    875
    I\'m sorry, aber bei mir funzt es.
    Es wird zwar als String gespeichert, aber mit der READLN- Funktion kann man ja auch gleich Integerwerte einlesen.
    Du kannst ja auch sowas machen:

    PROGRAM test;

    USES dos, crt;

    VAR i: LONGINT;

    BEGIN
    ...
    READLN(i);
    ....
    END.
    Dadurch wird in diesem Falle eine lange Zahl von der Tastertur gelesen, das klappt ja immer, wenn nicht ein Buchstabe kommt.
    Und genauso kann man mit READLN auch aus einer Datei einen Zahlwert lesen, genauso wie DU mit WRITELN(i) die Zahl i auf den Monitor schreibst, und mit WRITELN(tralala,i) die Zahl i in die Datei tralala.
    -Bond-
     
  5. Sumo

    Sumo Kbyte

    Registriert seit:
    30. August 2000
    Beiträge:
    178
    Das kann so nicht gehen. Niemals!!! Das hast du nicht gestestet oder?
    56789 wird in der Datei als String gespeichert. Wenn du das als Longint auslesen willst, kommst du mit Sicherheit nicht auf 56789.

    Mach das so:
    Nimm eine For-Schleife, die jeden Buchstaben des Strings durchgeht, und addiere immer den Zahlenwert zu dem späteren Ergebnis und multipliziere dann mit 10.
    Ergebnis ist am Anfang 0.

    Wenn du erst multiplizierst und dann addierst, hast du hinterher die eine Null nicht.
     
  6. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    Oh, das hat dann natürlich einen weiteren Vorteil. Danke für den Hinweis.
     
  7. Bond

    Bond Halbes Megabyte

    Registriert seit:
    17. November 2000
    Beiträge:
    875
    Tja, meine Variante funzt eben auch mit Longint Zahlen, die VAL nie verkraften würde... :-)
     
  8. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    Jo, danke. Der Weg über eine Datei spukte schon in meinem Kopf, ich meinte aber andersrum einfacher und schnnller zur Lösung zu gelangen, was ja dann auch gelang.
    Aber eine schöne Lösung (und vor allem gut kommentiert, zu sowas bin ich imer zu faul, auch wenn man es bei größerem Quelltext besser tun sollte).
     
  9. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    jo, 32768, antwort siehe oben!
    Danke trotzdem.
    Gruß

    Martin
     
  10. dragon_MF

    dragon_MF Megabyte

    Registriert seit:
    17. August 2001
    Beiträge:
    1.109
    *klatsch*
    Wie konnte ich das vergessen?!!
    Manchmal sieht man echt den Wald vor lauter Bäumen nicht!
    Danke.

    Martin
     
  11. dozer

    dozer Byte

    Registriert seit:
    15. Februar 2002
    Beiträge:
    55
    ursache: falscher variablentyp
    integer hat nen wertebereich von -32XXX bis +32XXX, weiss jetzt nicht genau, jedenfalls überschreitest du mit 56789 den wertebereich des integers

    so denn
     
  12. IceBat

    IceBat Byte

    Registriert seit:
    21. Januar 2002
    Beiträge:
    71
    Hallo,

    das liegt daran, das ein Integer Wert nur von -2^15 bis +2^15 reicht. Ales was größer 2^15 ist schlägt automatisch in den negativen Bereich um z.B:
    2^15+1 --> -2^15
    2^15+2 --> -2^15+1

    Das was Du brauchst ist der Typ "Word" der reicht von 0 bis +2^16

    Gruß, Patrick
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen