Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hälfte eines Strings ausgeben (https://www.delphipraxis.net/140552-haelfte-eines-strings-ausgeben.html)

c0mpl3t3 20. Sep 2009 19:35


Hälfte eines Strings ausgeben
 
Hi,
ich bin ein ziemlicher Delphi Neuling, wir haben gerade in Informatik damit begonnen.
Nun hab ich folgende Frage:
Aufgabe ist es, einen beliebigen string zu teilen, und die hälfte auszugeben, ich hab das folgendermaßen gelöst:

Delphi-Quellcode:
procedure TProzeduren.halbieren_buttonClick(Sender: TObject);
begin
    text1:=text1_edit.Text;
    text2:=text2_edit.Text;
    laenge1:=Length(text1);
    if odd(laenge1)= true then
      begin
        dec(laenge1);
        laenge1extended:=laenge1;
        laenge1extended:=laenge1extended/2;
      end
    else
      begin
        laenge1extended:=laenge1;
        laenge1extended:=laenge1extended/2;
      end;
    laenge1extended:=Integer(laenge1extended);
    text1:=copy(text1,0,laenge1extended);
    ausgabe1_label.Caption:=text1;
end;
Mir wird dann beim Compiliern der fehler ausgegeben, dass inkompatible Datentypen am Werk wären, durch die if abfrage ist aber ja sichergestellt, dass beim Teilen eine integer Zahl rauskommt.

Ich würd mich freuen wenn ich einen andren Lösungsvorschlag hättet oder meinen Fehler finden würdet.

rollstuhlfahrer 20. Sep 2009 19:41

Re: Hälfte eines Strings ausgeben
 
HI und herzlich willkommen in der DP :dp: :dp:

also dein Ansatz ist nicht schlecht. Allerdings will Copy() einen Integer-Parameter und der Compiler beharrt darauf, dass er einen bekommt. Das Ergebnis dieser Zeile kann ich mir nicht ganz vorstellen:
Delphi-Quellcode:
laenge1extended:=Integer(laenge1extended);
Um das ganze leichter zu machen, empfehle ich dir, gleich eine Ganzzahldivision durchzuführen. Das geht mit DIV und du benötigst auch nicht den Umweg über Real-Typen und Abfragen auf ungerade/gerade Zahlen.

Bernhard

mkinzler 20. Sep 2009 19:42

Re: Hälfte eines Strings ausgeben
 
Ich würde zur Ermittlung der Mitte Div verwenden, dieses gibt auch einen Integer und keine Float zurück

c0mpl3t3 20. Sep 2009 20:28

Re: Hälfte eines Strings ausgeben
 
danke funktioniert :)

sx2008 20. Sep 2009 23:58

Re: Hälfte eines Strings ausgeben
 
Zitat:

Zitat von c0mpl3t3
ich bin ein ziemlicher Delphi Neuling, wir haben gerade in Informatik damit begonnen.

Ok, Lektion #1:
Globale Variablen sind böse!!!
Vermeide globale Variablen wann immer möglich.
Delphi-Quellcode:
procedure TProzeduren.halbieren_buttonClick(Sender: TObject);
var // das sind LOKALE Variablen
  text1, text2 : string;
  laenge1 :double;
begin
    text1:=text1_edit.Text;
    text2:=text2_edit.Text;
    laenge1:=Length(text1);
    if odd(laenge1)= true then
.....
end;

alzaimar 21. Sep 2009 07:26

Re: Hälfte eines Strings ausgeben
 
Zitat:

Zitat von sx2008
Ok, Lektion #1:
Globale Variablen sind böse!!!

Gähn, bitte nicht hier. Globale Variablen sind nicht böse. Sie tun keinem was. Sie sind nur einem reinen OOP-Paradigma im weg, sonst nichts. Delphi selbst produziert übrigens dann ja auch bösen Code. :wall:

Sir Rufo 21. Sep 2009 07:34

Re: Hälfte eines Strings ausgeben
 
Ok, dann hier noch Lektion2:

Globale Parameter für Prozeduren sind auch nicht schick.

Was du willst, ist ja übergebenen Text (string) wieder halbiert zurückbekommen (string).
Da bietet sich sowieso eine Funktion besser an.

Delphi-Quellcode:
function HalbierenStr( Str : string ) : string;
begin
  // Die Variable Result ist vordefiniert für den Rückgabewert einer Funktion
  Result := Copy( Str, 1, Length( Str ) DIV 2 );
end;
Der Aufruf der Funktion erfolgt dann wie folgt:

Delphi-Quellcode:
procedure TProzeduren.halbieren_buttonClick(Sender: TObject);
begin
  ausgabe1_label.Caption := HalbierenStr( text1_edit.Text );
end;
cu

Oliver


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz