Inkompatibilität ???

Für Fragen von Einsteigern und Programmieranfängern...

Inkompatibilität ???

Beitragvon DL3AD » 20. Jun 2017, 12:07 Inkompatibilität ???

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
DL3AD
 
Beiträge: 371
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon wp_xyz » 20. Jun 2017, 12:25 Re: Inkompatibilität ???

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.
wp_xyz
 
Beiträge: 2705
Registriert: 8. Apr 2011, 08:01

Beitragvon siro » 20. Jun 2017, 12:26 Re: Inkompatibilität ???

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 20. Jun 2017, 12:34, insgesamt 1-mal geändert.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
siro
 
Beiträge: 324
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon DL3AD » 20. Jun 2017, 12:32 Re: Inkompatibilität ???

... Ja ne is klar - is nen bischen warm heute - habe die Bäume im Wald erkannt.
Danke trotzdem für die Hilfe
DL3AD
 
Beiträge: 371
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon gladio » 20. Jun 2017, 12:36 Re: Inkompatibilität ???

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).
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon m.fuchs » 20. Jun 2017, 12:48 Re: Inkompatibilität ???

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
m.fuchs
 
Beiträge: 1974
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon gladio » 20. Jun 2017, 13:00 Re: Inkompatibilität ???

Vielleicht gingen früher mal Gleitkommazahlen ohne Komma locker als Integer durch wegen nicht so strenger Typüberprüfung.
Egal. Nostalgie.
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon wp_xyz » 20. Jun 2017, 13:16 Re: Inkompatibilität ???

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"
wp_xyz
 
Beiträge: 2705
Registriert: 8. Apr 2011, 08:01

Beitragvon braunbär » 20. Jun 2017, 16:16 Re: Inkompatibilität ???

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.
braunbär
 
Beiträge: 262
Registriert: 8. Jun 2017, 17:21

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

porpoises-institution
accuracy-worried