Entwickler-Ecke

Sonstiges (Delphi) - Eine Komprimierung mit Buchstaben schreiben


Shadowlucker - Do 22.04.10 14:26
Titel: Eine Komprimierung mit Buchstaben schreiben
reset


elundril - Do 22.04.10 14:56

Nunja, einerseits fehlt dir ein end;. Wenn du die begins nach dem "procedure" zählst kommst du auf 2, du hast aber nur 1 end drin. so nun zu anderen sache. Den Quellcode den du ausgegraben hast wandelt zahlen aus dem Dezimalsystem in Zahlen aus dem Binärsystem um, und zwar in die für menschen lesbare Version. Im PC sinds eh alles binärzahlen.

Der Unterschied zwischen einer Funktion und einer Prozedur ist ganz einfach das die Funktion einen Rückgabewert hat. Das heißt wenn du Programmcode ausführst der ein ergebnis hat (zb eine Addition zweier zahlen; liefert dann wieder eine zahl) dann kannst du eine Funktion benutzen. Der aufruf wäre dann zb sowas:


Delphi-Quelltext
1:
Edit1.Text := IntToStr(addiere(1,2)); // jetzt steht im edit1-feld 3 drin                    


Weiters würde ich dir raten am anfang von der button1Click-Prozedur noch ein Label2.Caption := ''; zu schreiben, dann kannst du in deiner Schleife "Label2.caption := Label2.Caption + HexVonBuchstabe(edit1.text[zaehler]);" schreiben. Damit bekommst du dann den HexWert von allen Buchstaben in dem edit1-feld präsentiert und nicht nur den letzten.

Wie nun das umwandeln selbst geht weiß ich nicht, weil da etwas die angabe fehlt.

lg elundril


martin300 - Do 22.04.10 15:02

Eine Funktion die das Umwandeln schon erledigt ist zb. http://www.delphibasics.co.uk/RTL.asp?Name=IntToHex


elundril - Do 22.04.10 15:04

Ich nehm ja mal an das wenn er es selber bauen soll, eher nicht auf vorhandene Funktionen zurückgreifen soll, oder?

lg elundril


Shadowlucker - Do 22.04.10 15:20

löschen


elundril - Do 22.04.10 15:32

ja, klar, HexVonBuchstabe musst du ja erst schreiben. ;) Und das IntToBin vergisskomplett, Binäre Zahl <> Hexadezimal! Und bitte verwende [delphi][/delphi]-Tags um den Quelltext hervorzuheben.

lg elundril


Shadowlucker - Do 22.04.10 15:40

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

ich komme jetzt gar nicht mehr mit :(
alles was ich versucht habe, wird halt immer schlimmer-.-


elundril - Do 22.04.10 15:50

Ok, also von vorne: Du hast ja schon mal die Button1Click-Procedure geschrieben, mit der du die einzelnen Zeichen aus dem Edit-Feld ausliest. Mit den Verbesserungen die ich dir in der ersten Antwort geschrieben hab passt diese auch wunderbar. Jetzt musst du nur mehr eine Function schreiben, die dir aus einem Kleinbuchstaben, eine Hexadezimalzahl macht. Und dann musst du die beiden Verknüpfen, eben das du die Function aus deiner Procedure heraus aufrufst.

lg elundril


Shadowlucker - Do 22.04.10 15:59

reset


elundril - Do 22.04.10 16:51

user profile iconShadowlucker hat folgendes geschrieben Zum zitierten Posting springen:
Ja das geht auch nicht .... Oh man so eine verzweifelung


Gewöhn dir bitte an die Fehlermeldung zu posten. "Es geht nicht" macht es etwas schwer den Fehler zu finden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
  var zaehler: integer;
begin
  Label2.Caption := '';
  for zaehler:=1 to Length(text[zaehler]) do begin
    Label2.Caption := IntTohex(ord(Text[zaehler]));
  end;
end;


fällt dir vielleicht etwas auf bei den markierten Stellen?

lg elundril


Shadowlucker - Do 22.04.10 16:52

reset


elundril - Do 22.04.10 16:58

Bitte hör auf Beiträge immer komplett zu zitieren. Wenn du zitierst dann nur auszugsweise. Und hier ist zitieren ja eh nicht nötig weil sie deine Posts eh immer auf meinen letzten beziehen.

jetzt schau dir mal den Teil


Delphi-Quelltext
1:
Label2.caption := Label2.Caption + HexVonBuchstabe(edit1.text[zaehler]);"                    

von mir an und vergleich ihn mit den zwei zeilen von dir:


Delphi-Quelltext
1:
2:
Label2.Caption := IntToBin1(ord(edit1.Text[zaehler]) - 964);
label2.caption:= label2.caption + label2.caption;


Fällt dir was auf? Zum beispiel das du Zuerst Label2.Caption einen neuen wert zuweist und danach den einfach nur verdoppelst? Im nächsten schleifendurchlauf wird der alte wert natürlich wieder durch den neuen wert ersetzt statt das er einfach nur angefügt wurden.

lg elundril