Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Buchstabenshifter (https://www.delphipraxis.net/55040-buchstabenshifter.html)

benisenis 15. Okt 2005 15:29


Buchstabenshifter
 
Moin,

ich muss für die Schule ein Programm schreiben, in welchem sämtliche Buchstaben in nem Text um 1 verschoben werden!
Sprich: A zu Z ; B zu A; C zu B ; usw.

Ich hab versucht das ganze mit zwei Editfenstern zu realisieren!

Hier der Quelltext:

Delphi-Quellcode:
var
  Form1: TForm1;
  LCaseChars, UCaseChars: array [0..25]of Char;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var i :integer;
begin
for i:=0 to 25 do
begin
UCaseChars[i]:=Char(65+i);
LCaseChars[i]:=Char(97+i);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
edit2.clear;
for i:=1 to length(edit1.text) do
begin
case pos (edit1.text[i], UcaseChars) of
0:edit2.text:= edit2.text+UCaseChars[25];
12..24:edit2.text:=edit2.text+UCaseChars[pos(edit1.text,UCaseChars)-1];
25:Edit2.text:=edit2.text+UCaseChars[0];
end;
begin
case pos (edit1.text[i], LcaseChars) of
0:edit2.text:= edit2.text+LCaseChars[25];
12..24:edit2.text:=edit2.text+LCaseChars[pos(edit1.text,LCaseChars)-1];
25:Edit2.text:=edit2.text+LCaseChars[0];
end;
end;
Mein Problem ist, dass ich bei der Ausgabe nur "Z" bekomme!
Und so langsam hab ich auch keihne Ahnung mehr woran es liegen könnte!


Um Antworten wird gebeten


Gruß

benisenis

Eichhoernchen 15. Okt 2005 15:45

Re: Buchstabenshifter
 
Also ich würd es so machen: (ungetestet)

Delphi-Quellcode:
var i : integer;
begin
for i := 1 to length(Edit1.Text) do
 if ord(Edit1.text[i]) = 97
   then Edit2.Text := Edit2.Text + 'z'
   else if ord(Edit1.text[i]) = 65
           then Edit2.Text := Edit2.Text + 'Z'
           else Edit2.Text := Edit2.Text + Char(Ord(Edit1.text[i])-1);

benisenis 15. Okt 2005 15:53

Re: Buchstabenshifter
 
Jetzt frag ich mich, wieso muss ichs immer nur so kompliziert machen :-)

Deine Variante funtioniert ohne Probleme !Thx
Trotzdem würds mich intressieren, was mein Fehler war?

Gruß

benisenis

DGL-luke 15. Okt 2005 15:54

Re: Buchstabenshifter
 
EDIT: schwachfug geschrieben....

Eichhoernchen 15. Okt 2005 15:58

Re: Buchstabenshifter
 
hmm und was passiert wenn er a eingibt??

dann kommt nicht z sondern irgendein sonderzeichen mit deinem code, hier mal nen update von meinem:

Delphi-Quellcode:
function ceaser(text : string; pos : integer) : string;
var i : integer;
Begin
 for i := 1 to length(Text) do
 if ord(text[i])-pos < 97
   then result := result + char(ord(123 - (pos - (Ord(text[i]) - 97))))
   else if ord(text[i])-pos < 65
           then result := result + char(ord(91 - (pos - (Ord(text[i]) - 65))))
           else result := result + Char(Ord(text[i])-pos);
end;

Lannes 15. Okt 2005 19:29

Re: Buchstabenshifter
 
Hallo,

noch eine Möglichkeit:
Delphi-Quellcode:
  s := Edit1.Text;
  for z := 1 to Length(s) do
    case s[z] of
      'Z'       : s[z] := 'A';
      'z'       : s[z] := 'a';
      'A'..'Y',
      'a'..'y'  : s[z] := Chr(Ord(s[z])+1);
      'ä'       : s[z] := 'ö';
      'ö'       : s[z] := 'ü';
      'ü'       : s[z] := 'ä';
      'Ä'       : s[z] := 'Ö';
      'Ö'       : s[z] := 'Ü';
      'Ü'       : s[z] := 'Ä';
     end;
  Edit2.Text := s;

Eichhoernchen 15. Okt 2005 19:32

Re: Buchstabenshifter
 
hmm ja, für 1ne verschiebung ist das ja okay, aber es ist recht unflexibel und schön find ich die möglichkeit nicht!

Dafür sind die umlaute abgedeckt!

glkgereon 15. Okt 2005 20:45

Re: Buchstabenshifter
 
dann will ich auchmal vorschlagen...
Delphi-Quellcode:
S:=Edit1.Text;
for i:=1 to Length(S) do
  if S[i]='A' then S[i]:='Z'
  else if S[i]='a' then S[i]:='z'
  else S[i]:=Chr(Ord(S[i])-1);
ohne Umlaute leider...

Edit:
Achso, muss es überhaupt Case-Sensitiv sein?

wenn nicht:

Delphi-Quellcode:
S:=LowerCase(Edit1.Text);
for i:=1 to Length(S) do
  if S[i]='a' then S[i]:='z'
  else S[i]:=Chr(Ord(S[i])-1);
Und Noch ein Edit...Nicht hoch sondern runter Shiften!!!

Und noch eine Version mit Umlauten...

Delphi-Quellcode:
const
  Chars: String = ('ab...yzäöü');

begin
//Nicht Case-Sensitiv
  for i:=1 to Length(S) do
    Case Pos(S[i],Chars) of
      1..27: S[i]:=Chars[Pos(S[i],Chars)+1];
      28: S[i]:=Chars[1];
    end;

//Case-Sensitiv mit allen möglichen Zeichen
function GetChar(ID: Integer; Lower: Boolean):Char;
begin
  if Lower then
    Result:=LowerCase(Chars[ID])[1]
  else
    Result:=UpperCase(Chars[ID])[1];
end;

function PosInChars(Val: Char):Integer;
begin
  Result:=Pos(LowerCase(Val),LowerCase(Chars));
end;


begin
  for i:=1 to Length(S) do
    begin
    L:=LowerCase(S[i])=S[i];
    Case PosInChars(S[i]) of
      1..27: S[i]:=GetChar(PosInChars(S[i])+1,L);
      28: GetChar(1,L)
    end;
  end;
end;

glkgereon 15. Okt 2005 21:22

Re: Buchstabenshifter
 
So

nach ein bisschen rumprobieren habe ich hier die ultimative funktion!!!

naja, ok, so toll ist sie nun auch wieder nicht, aber die funktiuniert und ist nicht allzu kompliziert....

Delphi-Quellcode:
function ShiftChars(Value: String; ShiftDir: ShortInt = 1; Chars: String = 'abcdefghijklmnopqrstuvwxyzäöü'): String;

  function GetChar(ID: Integer; Lower: Boolean):Char;
  begin
    if Lower
    then Result:=LowerCase(Chars[ID])[1]
    else Result:=UpperCase(Chars[ID])[1];
  end;

  function PosInChars(Val: Char):Integer;
  begin
    Result:=Pos(LowerCase(Val),LowerCase(Chars));
  end;

  function PosOrTrunc(Val: Integer): Integer;
  begin
    if Val>0
    then Result:=Val
    else Result:=0;
  end;

var i: Integer;
    L: Boolean;
    SprungID, ZielID: Integer;
begin
  SprungID:=PosOrTrunc(ShiftDir*Length(Chars)-1)+1;
  ZielID:=PosOrTrunc(ShiftDir*(-1)*Length(Chars)-1)+1;
  for i:=1 to Length(Value) do
    begin
    L:=LowerCase(Value[i])=Value[i];
    if PosInChars(Value[i])=SprungID then
      Value[i]:=GetChar(ZielID,L)
    else if PosInChars(Value[i])>0 then
      Value[i]:=GetChar(PosInChars(Value[i])+ShiftDir,L);
    end;
  Result
für dein Beispiel wäre der Aufruf wie folgt:

Delphi-Quellcode:
Edit2.Text:=ShiftChars(Edit1.Text,-1);
Edit:
Naja, eben doch nicht ultimativ, eher fehlerhaft...aber jetzt :stupid:

benisenis 15. Okt 2005 21:39

Re: Buchstabenshifter
 
Danke für die vielen Antworten ;)

Und mein Problem ist gelöst ....

Gruß

benisenis


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