Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inkompatible typen String und integer (https://www.delphipraxis.net/98456-inkompatible-typen-string-und-integer.html)

NielsHillemeyer 27. Aug 2007 18:02


Inkompatible typen String und integer
 
Hi ich hab hier mal was zusammengeschreibselt aber delphi weißt mich auf inkompatible typen hin(string und integer).
Kann mir jemand helfen?
In die edit felder soll eine dualzahl eingegeben werden, je eine ziffer pro editfeld.
Bei drücken des Buttons soll die Dualzahl in eine Dezimalzahl umgewandelt und ausgegeben werden.
ohne die Function ist das kein problem, dass hab ich auch schon fertig, aber mein Lehrer besteht auf das procedure....

Delphi-Quellcode:
unit Umrechnung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn_Umrechnen: TButton;
    Edt64: TEdit;
    Edt32: TEdit;
    Edt16: TEdit;
    Edt8: TEdit;
    Edt4: TEdit;
    Edt2: TEdit;
    Edt1: TEdit;
    Edt128: TEdit;
    Label1: TLabel;
    procedure btn_UmrechnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.btn_UmrechnenClick(Sender: TObject);

 function Umwandeln_und_Addieren(z1,z2,z3,z4,z5,z6,z7,z8:string):string;
Var
  Erg:string;
begin
  Erg:=Strtoint(z1)*128+Strtoint(z2)*64+Strtoint(z3)*32+Strtoint(z4)*16+Strtoint(z5)*8
  +Strtoint(z6)*4+Strtoint(z7)*2+Strtoint(z8)*1;

end;

Var
  z1,z2,z3,z4,z5,z6,z7,z8:string;
  Erg:integer;
begin
  z1:=Edt128.Text;
  z2:=Edt64.Text;
  z3:=Edt32.Text;
  z4:=Edt16.Text;
  z5:=Edt8.Text;
  z6:=Edt4.Text;
  z7:=Edt2.Text;
  z8:=Edt1.Text;
  erg:= Umwandeln_und_addieren(z1,z2,z3,z4,z5,z6,z7,z8);
  erg:=Inttostr(erg);
  Label1.Caption:=erg


end;

end.

mkinzler 27. Aug 2007 18:04

Re: Inkompatible typen String und integer
 
Ersetzte mal
Delphi-Quellcode:
Erg:string;
mit
Delphi-Quellcode:
Erg:integer;

SirTwist 27. Aug 2007 18:07

Re: Inkompatible typen String und integer
 
Zitat:

Zitat von mkinzler
Ersetzte mal...

Dann wird die eine Fehlermeldung weg sein, aber ein Ergebnis liefert die Funktion dann immer noch nicht zurück. Besser wäre

Delphi-Quellcode:
result := StroToInt(.....
Und das "Var erg: Integer" kann dann ganz wegfallen.

Apollonius 27. Aug 2007 18:10

Re: Inkompatible typen String und integer
 
Nein.
Delphi-Quellcode:
result:=inttostr(strtoint( {..........} );

s-off 27. Aug 2007 18:12

Re: Inkompatible typen String und integer
 
Zitat:

Zitat von Apollonius
Nein.
Delphi-Quellcode:
result:=inttostr(strtoint( {..........} );

Nein.
Delphi-Quellcode:
result:=inttostr(strtoint( {..........} ));
:mrgreen:

NielsHillemeyer 27. Aug 2007 18:20

Re: Inkompatible typen String und integer
 
Liste der Anhänge anzeigen (Anzahl: 1)
Geht leider alles iwie nicht...
Ich pack ma das prog in den anhang..
Sry aber ich bin iwie mit proceduren und functionen nich so geschickt...

DeddyH 27. Aug 2007 18:30

Re: Inkompatible typen String und integer
 
Ohne zu testen:
Delphi-Quellcode:
procedure TForm1.btn_UmrechnenClick(Sender: TObject);

function Umwandeln_und_Addieren(z1,z2,z3,z4,z5,z6,z7,z8:string):integer;
Var
  Erg:integer;
begin
  Erg:=Strtoint(z1)*128+Strtoint(z2)*64+Strtoint(z3)*32+Strtoint(z4)*16+Strtoint(z5)*8
  +Strtoint(z6)*4+Strtoint(z7)*2+Strtoint(z8)*1;

end;

Var
  z1,z2,z3,z4,z5,z6,z7,z8:string;
begin
  z1:=Edt128.Text;
  z2:=Edt64.Text;
  z3:=Edt32.Text;
  z4:=Edt16.Text;
  z5:=Edt8.Text;
  z6:=Edt4.Text;
  z7:=Edt2.Text;
  z8:=Edt1.Text;
  Label1.Caption:=Inttostr(Umwandeln_und_addieren(z1,z2,z3,z4,z5,z6,z7,z8));


end;

NielsHillemeyer 27. Aug 2007 18:37

Re: Inkompatible typen String und integer
 
Das malnehmen ist weggefallen, darf es aber nicht, denn sonst rechnet das programm nicht ins zehnersystem um sondern gibt eine zufalsszahl aus. Wenn ich das multiplizieren wieder anfüge, dann sind die fehler wieder da.... :(

DeddyH 27. Aug 2007 18:46

Re: Inkompatible typen String und integer
 
Poste mal den aktuellen Quelltext.

//Edit: *Argh* :wall: Schreib die Funktion mal eben um:
Delphi-Quellcode:
function Umwandeln_und_Addieren(z1,z2,z3,z4,z5,z6,z7,z8:string):integer;
begin
  Result := Strtoint(z1)*128+Strtoint(z2)*64+Strtoint(z3)*32+Strtoint(z4)*16+Strtoint(z5)*8
  +Strtoint(z6)*4+Strtoint(z7)*2+Strtoint(z8)*1;
end;

FAlter 27. Aug 2007 18:58

Re: Inkompatible typen String und integer
 
Hi,

muss die Zahl denn unbedingt über mehrere Edits verteilt werden? Was machst du, wenn was anderes als 0 oder 1 eingegeben wird, z. B. 123?

Für ein einzelnes Edit gibt es schon jede Menge Lösungen... Hier im Forum suchenBinToInt

Ich würde es ganz spontan so lösen... Natürlich sollte man die Meldungen der Exceptions noch überarbeiten...

Delphi-Quellcode:
function BinToInt{64}(const Bin: String): Integer {Int64};
var
  I, L: Integer;
begin
  L := Length(Bin);
  if L = 0 then
    raise EConvertError.Create('String ist leer!!');
  if L > 32 {64} then
    raise EConvertError.Create('String zu lang!');

  Result := 0;

  for I := 1 to L do
    case Bin[I] of
      '0':;
      '1': Result := Result or (1 shl (L-I));
    else
      raise EConvertError.Create('Nur Ziffern 0 und 1 erlaubt!');
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IntToStr(BinToInt(Edit1.Text));
end;
Mfg
FAlter

DeddyH 27. Aug 2007 19:07

Re: Inkompatible typen String und integer
 
Naja, ich würde das ähnlich machen, aber ob er damit bei seinem Lehrer durchkäme... (merkt der doch sofort, dass da externe Hilfe im Spiel ist) ;)

FAlter 27. Aug 2007 19:17

Re: Inkompatible typen String und integer
 
Hi,

Zitat:

Zitat von NielsHillemeyer
aber mein Lehrer besteht auf das procedure....

(Hervorhebung von mir)

:oops: Das Wort habe ich glattweg übersehen. Naja, dann muss er es wohl seinem Wissensstand entsprechend machen...

[ot]Zum Thema Lehrer merkt was:
Jemand aus meinem Infokurs wollte mal seinen Speicher nicht freigeben, weil er meinte, der Lehrer würde es merken, da er (der Lehrer) es ihnen nicht beigebracht und er (der Schüler) es daher eigentlich nicth wissen könnte. Schließlich hat er es doch getan, und gemeinsam mit meinem anderen Banknachbar (ich habe zwei ;) ), was aber nicht auffiel, und natürlich mir ;) , war er der einzige, der keinen Punkt abgezogen bekommen hat :mrgreen: Der Lehrer hat bei der Auswertung dann noch erzählt, er hätte doch gesagt, dass man Speicher wieder freigeben muss und dass das mit Delphi-Referenz durchsuchenDispose geht.
Überzeugt habe ich ihn dadurch, dass ich selbst ja mit OOP gearbeitet habe und selbst gar Dispose nehme und es deshalb kaum auffallen kann.[/ot]


Mfg
FAlter

dor557 27. Aug 2007 20:41

Re: Inkompatible typen String und integer
 
Ich habe nun Folgendes erstellt :

Delphi-Quellcode:

procedure TForm1.btn_UmrechnenClick(Sender: TObject);

function Umwandeln_und_Addieren(z1,z2,z3,z4,z5,z6,z7,z8:string):String;
begin
  result:=Inttostr(Strtoint(z1)*128+
                Strtoint(z2)*64+
                Strtoint(z3)*32+
                Strtoint(z4)*16+
                Strtoint(z5)*8+
                Strtoint(z6)*4+
                Strtoint(z7)*2+
                Strtoint(z8)*1);
end;

Var
  z1,z2,z3,z4,z5,z6,z7,z8:string;
  Erg:Integer;
begin
  z1:=Edt128.Text;
  z2:=Edt64.Text;
  z3:=Edt32.Text;
  z4:=Edt16.Text;
  z5:=Edt8.Text;
  z6:=Edt4.Text;
  z7:=Edt2.Text;
  z8:=Edt1.Text;
//  erg:= Umwandeln_und_addieren(z1,z2,z3,z4,z5,z6,z7,z8);
  Label1.Caption:=Umwandeln_und_addieren(z1,z2,z3,z4,z5,z6,z7,z8);


end;
wenn ich da in Jedem Feld 1 eingebe bekomme ich 255 !

mache ich den wert 1010 am schluss und den rest mit 0 bekomme ich 10 heraus !

geht !
oder habe ich da jetzt was vergessen ?

Das das orrekt herauskommt sieht man Hier !

Gruss Sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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