*verwirtsei*

hi
ich hab da gerade mal nen keleines "lern" programm in freepascal (compiler:lazarus) geschrieben, was eingegebene buchstaben in leed umwandelt.
Code:
unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var word_ein: String;
    word_aus: String;
    leet_ein: array [0..53] of String;
    leet_aus: array [0..53] of String;
    x       : Integer;
    y       : Integer;
begin
 leet_ein[0]:=' ';
 leet_ein[1]:='a';
 leet_ein[2]:='b';
 leet_ein[3]:='c';
 leet_ein[4]:='d';
 leet_ein[5]:='e';
 leet_ein[6]:='f';
 leet_ein[7]:='g';
 leet_ein[8]:='h';
 leet_ein[9]:='i';
 leet_ein[10]:='j';
 leet_ein[11]:='k';
 leet_ein[12]:='l';
 leet_ein[13]:='m';
 leet_ein[14]:='n';
 leet_ein[15]:='o';
 leet_ein[16]:='p';
 leet_ein[17]:='q';
 leet_ein[18]:='r';
 leet_ein[19]:='s';
 leet_ein[20]:='t';
 leet_ein[21]:='u';
 leet_ein[22]:='v';
 leet_ein[23]:='w';
 leet_ein[24]:='x';
 leet_ein[25]:='y';
 leet_ein[26]:='z';
 leet_ein[27]:='A';
 leet_ein[28]:='B';
 leet_ein[29]:='C';
 leet_ein[30]:='D';
 leet_ein[31]:='E';
 leet_ein[32]:='F';
 leet_ein[33]:='G';
 leet_ein[34]:='H';
 leet_ein[35]:='I';
 leet_ein[36]:='J';
 leet_ein[37]:='K';
 leet_ein[38]:='L';
 leet_ein[39]:='M';
 leet_ein[40]:='N';
 leet_ein[41]:='O';
 leet_ein[42]:='P';
 leet_ein[43]:='Q';
 leet_ein[44]:='R';
 leet_ein[45]:='S';
 leet_ein[46]:='T';
 leet_ein[47]:='U';
 leet_ein[48]:='V';
 leet_ein[49]:='W';
 leet_ein[50]:='X';
 leet_ein[51]:='Y';
 leet_ein[52]:='Z';
 leet_ein[53]:=' ';


 leet_aus[0]:=' ';
 leet_aus[1]:='@';
 leet_aus[2]:='|3';
 leet_aus[3]:='(';
 leet_aus[4]:='[)';
 leet_aus[5]:='3';
 leet_aus[6]:='|=';
 leet_aus[7]:='6';
 leet_aus[8]:='|-|';
 leet_aus[9]:='1';
 leet_aus[10]:='_|';
 leet_aus[11]:='|<';
 leet_aus[12]:='|_';
 leet_aus[13]:='/\/\';
 leet_aus[14]:='/\/';
 leet_aus[15]:='0';
 leet_aus[16]:='|*';
 leet_aus[17]:='(,)';
 leet_aus[18]:='|2';
 leet_aus[19]:='5';
 leet_aus[20]:='+';
 leet_aus[21]:='|_|';
 leet_aus[22]:='\/';
 leet_aus[23]:='\x/';
 leet_aus[24]:='><';
 leet_aus[25]:='`/';
 leet_aus[26]:='~/_';
 leet_aus[27]:='@';
 leet_aus[28]:='|3';
 leet_aus[29]:='(';
 leet_aus[30]:='[)';
 leet_aus[31]:='3';
 leet_aus[32]:='|=';
 leet_aus[33]:='6';
 leet_aus[34]:='|-|';
 leet_aus[35]:='1';
 leet_aus[36]:='_|';
 leet_aus[37]:='|<';
 leet_aus[38]:='|_';
 leet_aus[39]:='/\/\';
 leet_aus[40]:='/\/';
 leet_aus[41]:='0';
 leet_aus[42]:='|*';
 leet_aus[43]:='(,)';
 leet_aus[44]:='|2';
 leet_aus[45]:='5';
 leet_aus[46]:='+';
 leet_aus[47]:='|_|';
 leet_aus[48]:='\/';
 leet_aus[49]:='\x/';
 leet_aus[50]:='><';
 leet_aus[51]:='`/';
 leet_aus[52]:='~/_';
 leet_aus[53]:=' ';
 
 word_ein:=edit1.text;
 word_aus:='';
 
 for x:=1 to 15 do
 begin
  for y:=0 to 53 do
  begin
   if(word_ein[x]=leet_ein[y]) then
   begin
    word_aus:=word_aus+leet_aus[y];
   end;
  end;
 end;
 edit2.text:=word_aus;
end;

initialization
  {$I unit1.lrs}

end.

problem wenn ich z.b. nur ui oder so eingebe hänget der mir noch nen "_|" was einem "j" entsprechen würde hinten rann (bei andern wörtern hängt er zum teil auch andere sachen rann). warum?
 
Code:
 for x:=1 to 15 do
 begin
  for y:=0 to 53 do
  begin
   if(word_ein[x]=leet_ein[y]) then
   begin
    word_aus:=word_aus+leet_aus[y];
   end;
  end;
 end;
 edit2.text:=word_aus;
end;
was passiert denn, wenn das Wort kleiner als 15 ist?
wortstring="hi"
x=1="h"=leet_ein[y] (komplett duchr den leet_ein Array jagen)
x=2="i"=Leet_ein [noch ein zeichen, das i entspricht]
x=3="undefinierter Speicher"=leet_ein [eventuell durch Zufall gültiger Wert]
ich würde einfach x:=1 to lenth(wort_ein) machen. Wenn es bei freepascal gehen sollte, kannst Du auch die Arraygrenzenüberprüfung einschalten - dann solltest Du eigentlich ein paar Fehlermeldungen bezüglich Wertüberschreitung erhalten ;)

PS: "[eventuell durch Zufall gültiger Wer" -> warum ist der denn bei mir immer gleich (würdest Du vielleicht wissen wollen) ? Naja, weil intern, je nach dem wo der Wert im Speicher landet, hat er immer die gleichen "vorbedienungen" (das Programm hat voher die und die Werte auf die und die Adresse abgelegt oder überschrieben). Man bezeichnet es trotzdem als "nicht definiert" weil je nach OS und OS version (SP oder zusätzliche Module) diese "Vorbedienungen" sehr unterschiedlich sein können (und i.R sind).
 
leet_ein[53] ist ja ' ' also dürfte es ja egal seien wenn da kein buchtabe mehr kommt aber die schleife weiterläuft.

zudem ist mir aufgefallen das um mal wieder zu "ui" zu kommen wenn ich die schleife auf 10 amche der fehler nciht ist und wenn ichs ie auf 21 mache ich 2 mal "_|" rangehandgen bekomme also nach jeder 10ner überschretung ein "_|" ^^.
bei andern wörtern sind das andere werte aber auch konstant^^.
 
word_ein:=edit1.text;
die länge ist also variabel, aber mindestens (10,15,21) Stellen lesen wollen mit word_ein[x] ?
wenn edit1.text einen "hi" liefert, und man mit x=3 versucht in word_ein[x] was zu lesen, was kommt da raus ;) ?
 
Zurück
Oben