![]() |
DIV und MOD
Hallo
Ich kann die DIV und MOD Befehle nicht verwenden! Ich hab Delphi 3
Code:
Fehler: Inkompatible Typen: 'String' und 'Integer'.
restmin:=FloatToStr(Gesamt)div 60;
restsec:=FloatToStr(Gesamt)mod 60; Danke im Vorraus |
Re: DIV und MOD
Hi,
natürlich kannst Du das nicht! Der Ausdruck:
Delphi-Quellcode:
gibt einen String zurück. Auf diesen kannst Du den Divisions bzw. den Modulo Operator nicht anwenden.
FloatToStr(Gesamt)
Du müsstest das z.B. so schreiben
Delphi-Quellcode:
mfG
FloatToStr(Gesamt div 60) // oder mod 60
mirage228 |
Re: DIV und MOD
Erstens:
![]() ![]() Zweitens: ![]() Drittens: In der OH sind nette Beispiele, und kuck mal nach ![]() |
Re: DIV und MOD
|
Re: DIV und MOD
Alternativ das hier benutzen ;)
Delphi-Quellcode:
procedure DivModEx(Dividend, Divisor: Integer; var Result, Remainder: Integer); overload;
begin Result := Dividend div Divisor; Remainder := Dividend mod Divisor; end; procedure DivModEx(Dividend, Divisor: Extended; var Result, Remainder: Extended); overload; var Temp: Extended; begin Temp := Dividend / Divisor; Result := Int(Temp); Remainder := Frac(Temp) * Divisor; end; |
Re: DIV und MOD
1. Wo finde ich die Hilfe DivMod??
2. ich habe die Variabeln 'restmin' und 'restsec' auf integer gesetzt. --> Fehler: Inkompatible Typen: 'String' und 'Integer' Kann mir jemand auf normalem Deutsch (-> kein Fachchinesisch) erklären, warum es nicht funktioniert und den Weg zur Lösung bitte erklären?? Danke |
Re: DIV und MOD
Zitat:
Zitat:
|
Re: DIV und MOD
Mirage hat es doch eigentlich gut erklärt. Aber ich versuche es nocheinmal auf einem anderen Weg ;-)
Delphi-Quellcode:
Dies ist genau das was Du in deinem ersten Posting geschrieben hast. Nur das ich noch Hilfsvariabeln einfüge.
var
str_restmin : String; str_restsec : String; int_restmin : Integer; int_restsec : Integer; begin str_restmin := FloatToStr(Gesamt); int_restmin := str_restmin DIV 60; // Diese beiden Zeilen entsprechen: restmin := FloatToStr(gesamt) DIV 60 str_restsec := FloatToStr(Gesamt); int_restsec := str_restmin MOD 60; end; Wie Du siehst liefert FloatToStr() als Ergebniss einen String. Und diesen Versuchst Du zu dividieren was natürlich nicht gehen kann! |
Re: DIV und MOD
Danke für deine Antwort
Ich habe jetzt diesen Ausdruck eingegeben!
Code:
Der Fehler: Operator ist auf diesen Operatortyp nicht anwendbar
restmin:=FloatToStr(Gesamt div 60);
restsec:=FloatToStr(Gesamt mod 60); Die Hilfe von Delphi 3 sagt: Zitat:
|
Re: DIV und MOD
Zitat:
|
Re: DIV und MOD
die Variable Gesamt ist real
|
Re: DIV und MOD
Hi,
dann musst du statt div, / schreiben. MfG Marc |
Re: DIV und MOD
Zitat:
|
Re: DIV und MOD
und wenn ich den Ausdruck div behalten will? wie muss die Variable Gesamt dann definiert werden?
|
Re: DIV und MOD
Wenn du div behalten willst,
musst du Integer vereinbaren! Merke:
Code:
MfG Marc
real: /
integer: div // +, -, und * sind bei beiden einheitlich! P.S.: Soll ich ein kleines Tutorial darüber schreiben? |
Re: DIV und MOD
jetzt gibt er weiter oben den Fehler aus...
Ich geb euch mal den gesamten Quelltext...damit ihr euch ein Bild davon machen könnt...
Code:
So, es geht um ein Programm, welches die Zeit berechnet. Die Ausgabe befehle hab ich noch nicht...die kommen erst noch
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Edit5: TEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; Berechnen1: TMenuItem; Zwischenzeit1: TMenuItem; Hilfe1: TMenuItem; Info1: TMenuItem; procedure Beenden1Click(Sender: TObject); procedure Zwischenzeit1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; gesamt: real; teiler,endzeitM, endzeitS, Strecke, Zeit, restmin, restsec: integer; implementation {$R *.DFM} procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; procedure TForm1.Zwischenzeit1Click(Sender: TObject); begin endzeitm:=StrToInt(Edit1.Text); endzeits:=StrToInt(Edit2.Text); Strecke:=StrToInt(Edit3.Text); Zeit:=(endzeitm*60)+endzeits; Gesamt:=(Zeit/10000)*Strecke; restmin:=FloatToStr(Gesamt div 60); restsec:=FloatToStr(Gesamt mod 60); end; end. |
Re: DIV und MOD
Hi,
Code:
Ersetze div durch / :!:
...procedure TForm1.Zwischenzeit1Click(Sender: TObject);
begin endzeitm:=StrToInt(Edit1.Text); endzeits:=StrToInt(Edit2.Text); Strecke:=StrToInt(Edit3.Text); Zeit:=(endzeitm*60)+endzeits; Gesamt:=(Zeit/10000)*Strecke; restmin:=IntToStr(Gesamt / 60); restsec:=IntToStr(Gesamt mod 60); end; end. Warum? Betrachte den vorherigen Beitrag von mir. :wink: MfG Marc P.S.: Versuchs mal mit IntToStr... |
Re: DIV und MOD
nein, geht nicht immer noch inkompatible typen...
|
Re: DIV und MOD
Zitat:
irgendwie habe ich das Gefühl das Du die ganzen Antworten überhaupt nicht gelesen hast. Es ist doch wirklich alles erklärt worden. Aber Du setzt es in keiner Weise in deinem Code oben um. Warum nicht :?: |
Re: DIV und MOD
Oder aber man nutzt folgende Funktionen :mrgreen:
um DIV & MOD auch mit Real-Typen anwenden zu können:
Delphi-Quellcode:
^^ Ersatz für DIV
function Real_Div(AZahl1,AZahl2:Extended):Integer;
begin Result := Trunc(AZahl1 / AZahl2); end;
Delphi-Quellcode:
^^ Ersatz für MOD
function Real_Mod(AZahl1,AZahl2:Extended):Extended;
begin Result := AZahl1 - Trunc(AZahl1 / AZahl2) * AZahl2; end; |
Re: DIV und MOD
Moin icke!
Gratuliere! :-D. Du hast verschiedene Datentypen durcheinander gebracht. Zitat:
Versuch etwa so:
Delphi-Quellcode:
Wenn du noch die restmin und restsec in Form eines Strings ausgeben möchtest, musst du noch String-Variablen definieren. Dann geht auch die Funktion „IntToStr“ (bzw. FloatToStr - das wäre unsauber):
var
restmin, restsec, gesamt: integer; ... restmin:= Gesamt div 60; // das ist korrekt restsec:= Gesamt mod 60; // und das auch ...
Delphi-Quellcode:
oder gleich so:
var
restmin , restsec, gesamt: integer; restmin_char , restsec_char: string; ... restmin:= Gesamt div 60; restsec:= Gesamt mod 60; restmin_char := IntToStr(restmin); restsec_char := IntToStr(restsec); ...
Delphi-Quellcode:
Viele Grüße
var
gesamt: integer; restmin_char , restsec_char: string; ... restmin_char := IntToStr(Gesamt div 60;); restsec_char := IntToStr(Gesamt mod 60); ... Markus :gruebel: |
Re: DIV und MOD
Hoffentlich machst du dir die Mühe nicht umsonst, Markus. Die richtigen Antworten wurden mehr oder weniger alle schon gegeben. Nur icke liest das einfach nicht und präsentiert stattdessen immer wieder seine Fehlermeldungen. :roll:
|
Re: DIV und MOD
Moin MathiasSimmack !
Ich hoffe, dass mein Posting ein bisschen Klarheit im Kopf des armen icke schafft. Nachdem ich alle Postings gelesen habe, bin ich zum Schluss gekommen, dass das einzige was geklärt wurde ist, dass man mit Strings nicht rechnen kann und mod und div Integers erwarten. Alles andere ist, meiner Meinung nach, entweder unnötig kompliziert, irreführend oder einfach falsch. Ein Beispiel: Geklärt würde: Zitat:
Zitat:
Noch ein Beispiel: Zitat:
Viele Grüße Markus :gruebel: |
Re: DIV und MOD
Hallo
1. Ich habe mir die Antworten alle Durchgelesen. 2. Jeder schreibt irgend etwas anderes und gibt neue Tipps und eine "bessere Lösung" 3. Die Vorschläge habe ich im Quellcode geändert. Da die gleiche Fehlermeldung wie zuvor gekommen ist, bin ich zu dem Schluss gekommen, dass meine Version nicht schlechter sein kann. 4. Niemand bis auf MarkusB der mir endlich gesagt hat, dass der Ausdruck >restmin:= Gesamt div 60;< auch funktioniert! Gruß icke PS: ICh werde nun die anderen Vorschläge ausprobieren |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz