Inkompatibilität ???

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Inkompatibilität ???

Beitrag von DL3AD »

Hallo,

ich stehe auf dem Schlauch :mrgreen:
ich habe folgendes vor

Code: Alles auswählen

var
  C: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  L1,L2,L3,L4,L5,L6: string;
  i: integer;
  lat,lng,Rest: real;
begin
  lat:= StrToFloat(Edit_lat.Text);
  lng:= StrToFloat(Edit_lng.Text);
  lat:= lat+90;
  lng:= lng+180;
  i:= int(lng/20);//hier will er extended sehen
  L1:= IntToStr(C[i+1]);//und hier gibt es Arger     


Ist bestimmt total simpel - habe eine Blockade :shock:

Danke
Gruß Frank

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inkompatibilität ???

Beitrag von wp_xyz »

Dachte immer, sowas wie "int()" gibt es in Pascal nicht, das wäre Basic. Aber nein, es gibt es: https://www.freepascal.org/docs-html/rt ... m/int.html - dort steht, dass die Funktion einen Gleitkommawert zurückgibt, aber dein i ist ein Integer, das geht natürlich nicht. Ich nehme an, du will die Kommastellen abschneiden - dann nimm trunc(), oder runden - dann nimm round(), oder immer (auch bei negativen Zahlen) nach oben runten - dann nimm ceil() aus der Unit math, oder immer nach unten runten - dann nimm floor(), auch aus math.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Inkompatibilität ???

Beitrag von siro »

C ist ja ein String und einen String in einen String wandeln gibt keinen Sinn.
Du möchtest sicher den entsprechenden Buchstaben an der Position i in einen String wandeln.
Das macht man dann mit ORD für Ordinalzahl des Buchstabens:
Zum Beispiel so:

L1:= IntToStr(ord(C[i+1]));

Siro
Zuletzt geändert von siro am Di 20. Jun 2017, 13:34, insgesamt 1-mal geändert.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inkompatibilität ???

Beitrag von DL3AD »

... Ja ne is klar - is nen bischen warm heute - habe die Bäume im Wald erkannt.
Danke trotzdem für die Hilfe

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inkompatibilität ???

Beitrag von gladio »

int() gibt es schon seit Turbo Pascal.
Neu ist mir aber jetzt, daß eine Gleitkommazahl zurückgegeben wird.
Ich war immer der Meinung die Funktion schneidet den Nachkommateil weg und wandelt so eine Gleitkommazahl in eine Integer (hat auch so mal funktioniert).

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Inkompatibilität ???

Beitrag von m.fuchs »

gladio hat geschrieben:int() gibt es schon seit Turbo Pascal.
Neu ist mir aber jetzt, daß eine Gleitkommazahl zurückgegeben wird.
Ich war immer der Meinung die Funktion schneidet den Nachkommateil weg und wandelt so eine Gleitkommazahl in eine Integer (hat auch so mal funktioniert).


Hm, da gibt es auch widersprüchliche Informationen aus den TP-Handbüchern:

TURBO Pascal Reference Manual Version 3.0 hat geschrieben:Syntax: Int(Num);
Returns the integer part of Num, i.e., the greatest integer number less than or equal to Num, if Num >- 0, or the smallest integer number greater than or equal to Num~ if Num < O.
The argument Num must be either Real or Integer, and the result is Integer.


Übersetzung des TURBO-Pascal Reference Manual 1983 hat geschrieben:Syntax:
Int(num)
Gibt den ganzen Teil von num zurueck, d.h. die groesste ganze Zahl, die kleiner oder gleich num ist, fall num >= 0 ist, oder die kleinste ganze Zahl, die groesser oder gleich num ist, falls num < 0 ist .
Das Argument num muss entweder Real oder Integer sein. Das Ergebnis ist Real.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: Inkompatibilität ???

Beitrag von gladio »

Vielleicht gingen früher mal Gleitkommazahlen ohne Komma locker als Integer durch wegen nicht so strenger Typüberprüfung.
Egal. Nostalgie.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Inkompatibilität ???

Beitrag von wp_xyz »

gladio hat geschrieben:Vielleicht gingen früher mal Gleitkommazahlen ohne Komma locker als Integer durch wegen nicht so strenger Typüberprüfung.
Egal. Nostalgie.

Ich glaube, dass die Zuweisung eines Gleitkommawerts zu einem Integer - und um das geht es hier, wenn int(lng/20) ein Real-Wert ist - noch nie funktioniert hat:

Code: Alles auswählen

var
  i: Integer;
  x: Extended;
...
  x := 1.234;
  i := x;   // <--- "Incompatible types: got "Extended" expected "Integer"

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Inkompatibilität ???

Beitrag von braunbär »

Stimmt, das ging schon in Turbo Pascal 1 nicht.
Und Int() hat immer schon den Ergebnistyp Real geliefert, das ist mir immer schon sehr eigenartig erschienen.

Antworten