AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstabenshifter

Ein Thema von benisenis · begonnen am 15. Okt 2005 · letzter Beitrag vom 15. Okt 2005
Antwort Antwort
benisenis

Registriert seit: 16. Jan 2005
16 Beiträge
 
#1

Buchstabenshifter

  Alt 15. Okt 2005, 15:29
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
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Buchstabenshifter

  Alt 15. Okt 2005, 15:45
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);
Jan
  Mit Zitat antworten Zitat
benisenis

Registriert seit: 16. Jan 2005
16 Beiträge
 
#3

Re: Buchstabenshifter

  Alt 15. Okt 2005, 15:53
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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Buchstabenshifter

  Alt 15. Okt 2005, 15:54
EDIT: schwachfug geschrieben....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Buchstabenshifter

  Alt 15. Okt 2005, 15:58
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;
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Buchstabenshifter

  Alt 15. Okt 2005, 19:29
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Buchstabenshifter

  Alt 15. Okt 2005, 19:32
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!
Jan
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: Buchstabenshifter

  Alt 15. Okt 2005, 20:45
dann will ich auchmal vorschlagen...
Delphi-Quellcode:
S:=Edit1.Text;
for i:=1 to Length(S) do
  if S[i]='Athen S[i]:='Z'
  else if S[i]='athen 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]='athen 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;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: Buchstabenshifter

  Alt 15. Okt 2005, 21:22
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:

Edit2.Text:=ShiftChars(Edit1.Text,-1); Edit:
Naja, eben doch nicht ultimativ, eher fehlerhaft...aber jetzt
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
benisenis

Registriert seit: 16. Jan 2005
16 Beiträge
 
#10

Re: Buchstabenshifter

  Alt 15. Okt 2005, 21:39
Danke für die vielen Antworten

Und mein Problem ist gelöst ....

Gruß

benisenis
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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