![]() |
Array Problem ! Benötige Hilfe...
Delphi-Quellcode:
Mein Programm soll folgendes bewerkstelligen:
unit UZahlensysteme;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) zahledt: TEdit; ausgabepanel: TPanel; RadioGroup1: TRadioGroup; RadioGroup2: TRadioGroup; wandelnbutton: TButton; clearbutton: TButton; procedure clearbuttonClick(Sender: TObject); procedure wandelnbuttonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.clearbuttonClick(Sender: TObject); begin zahledt.text := ' '; ausgabepanel.caption := ' '; end; function DezinHex (var ewert : integer):integer; var ergebnis, n : integer; Feld : array [1..n] of integer; -----> Constand expression expected begin n := 1; repeat ergebnis := ewert div 2; Feld[n] := ewert mod 2; inc(n); until (ergebnis <= 0); ewert := ergebnis; end; procedure TForm1.wandelnbuttonClick(Sender: TObject); var ewert : integer; begin ewert := strtoint(zahledt.text); DezinHex (ewert); ausgabepanel.caption := inttostr(ewert); end; end. Es soll (1.Version) eine Dezimalzahl in eine Hexadezimalzahl umwandeln. Es soll den Eingabewert durch 2 teilen bis ergebnis = 0 ist und dort dann aufhören. Dabei soll er wiederum auch den eingabewort mod 2 nehmen und die 1 oder 0 in dem Fall in ein Feld packen... das genauso lange bis until... eintritt. Danach möchte ich den Hexadezimal-Code ausgeben. Worin liegt mein Problem? :gruebel: mfg Lun87 [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Arry Problem ! Benötige Hilfe...
Delphi-Quellcode:
Das geht so nicht . Versuche mal
Feld : array [1..n] of integer; -----> Constand expression expected
Delphi-Quellcode:
Feld : array of integer;
... setLength( Feld, n); |
Re: Arry Problem ! Benötige Hilfe...
was mkinzler versucht zu sagen ist:
Delphi-Quellcode:
Allerdings solltest du deiner Function einen Rückgabe wert Geben. Das machst dann mit Result :=
function DezinHex (var ewert : integer):integer;
var ergebnis, n : integer; Feld : array of integer; begin n := 0;// Alle Dynamischen Array's fangen mit 0 an. repeat setlength(Feld,high(Feld)+2); ergebnis := ewert div 2; Feld[n] := ewert mod 2; inc(n); until (ergebnis <= 0); ewert := ergebnis; end; und auf dein Array must ja auch noch Lesend zugreifen, sonst bringt es dir ja gar nichts das du es gebaut hast. |
Re: Arry Problem ! Benötige Hilfe...
Herzlich willkommen in der Delphi-PRAXiS, lun87.
Wenn du im Beitragseditor deinen Quelltext markierst und dann auf den Button "Delphi" klickst, dann sieht dein Code viel schöner aus. Deine Funktion DezInHex() könnte eine bessere Signatur vertragen:
Delphi-Quellcode:
Cardinal ist ein vorzeichenloser Typ (gibt es den in D6 bereits?) und der Rückgabewert ist besser eine Zeichenkette.
function DezInHex(ewert: Cardinal): String;
Freundliche Grüße vom marabu |
Re: Arry Problem ! Benötige Hilfe...
Hallo lun87,
Mit der function IntToHex kann man Integer-Werte in Hex-Zahlen konvertieren.
Delphi-Quellcode:
Das Ergebnis ist '03E8' = 1000 (Integer-Zahl)
Label1.Caption:= IntToHex(1000,4);
Die 4 bedeutet die Anzahl-Zeichen die zurückgegeben werden. Bis bald Chemiker [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] |
Re: Arry Problem ! Benötige Hilfe...
Delphi-Quellcode:
Das Problem ist wir sollen das mit div und mod machen. Meine andere Frage wäre jetzt.. der hat in ergebnis immer 2, wie sage ich ihm
function DezinHex (var ewert : integer):integer;
var ergebnis, n : integer; Feld : array of integer; begin n := 0; repeat setlength(Feld,high(Feld)+2); result := ewert div 2; ergebnis := result; Feld[n] := ewert mod 2; inc(n); until (ergebnis <= 0); ewert := ergebnis; end; das er nach einem durchlauf jez das "neue" ergebnis nimmt also wenn ich 40 in edit eintrage (40/2 = 20) dass er dann mit 20 weiter arbeitet? mfg Lun87 PS: Ich bin neu in Delphi, hoffe Ihr nehmt mir das nicht übel :( |
Re: Arry Problem ! Benötige Hilfe...
Ich hab so das gefühl das ich hier deine Hausaufgaben löse ...
Delphi-Quellcode:
Der Code ist aber Blind gecoded. Mit etwas Glück sind noch genug Fehler drin so das sich noch ein kleiner Lerneffeckt einstellt ;)
function DezinHex (ewert : integer):String;
var Erg:String; begin erg :=''; while ewert > 0 do begin erg := inttostr(ewert mod 2) + erg; ewert := ewert div 2; end; result:= erg; end; [Edit] Ach ja fast vergessen. Für negative Eingaben geht das natürlcih nicht ;) das macht man dann in dem man vom Ergenbiss das 2 er Komplement bildet und Binär 1 Addiert. d.h. du kannst dann noch jede Menge Logik einbauen so das Ewert immer >= 0 ist ;) |
Re: Arry Problem ! Benötige Hilfe...
Den Vorsatz VAR bei deinem Parameter ewert brauchst du nicht, da du dort ja nichts zurückgeben willst. Hexadezimale Zahlen kannst du nur als String darstellen, genauso wie dezimale Zahlen und jede andere auch - der Computer arbeitet intern nur mit den dualen Zahlen in Binärdarstellung. Hexadezimal sind Zahlen zur Basis 16. Durch deine Rechenoperationen div 2 und mod 2 liegst du da aber etwas daneben.
Delphi-Quellcode:
Mit ein paar Änderungen kannst du das an die Basis 16 anpassen. Allerdings musst du es morgen auch noch erklären können...
function IntToDual(i: Cardinal): String;
const BASIS = 2; DIGITS: String[BASIS] = '01'; begin Result := ''; repeat result := DIGITS[Succ(i mod BASIS)] + Result; i := i div BASIS; until (i = 0); end; Gute Nacht |
Re: Arry Problem ! Benötige Hilfe...
Delphi-Quellcode:
mein letzter stand der dinge, gehe nun ins bett... hab kopfschmerzen
unit UZahlensysteme;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) zahledt: TEdit; ausgabepanel: TPanel; RadioGroup1: TRadioGroup; RadioGroup2: TRadioGroup; wandelnbutton: TButton; clearbutton: TButton; procedure clearbuttonClick(Sender: TObject); procedure wandelnbuttonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.clearbuttonClick(Sender: TObject); begin zahledt.text := ' '; ausgabepanel.caption := ' '; end; {function DezinDual (var ewert : integer):String; var n, divwert, modwert : integer; Feld : array of integer; begin n := 0; while ewert > 0 do begin setlength(Feld,high(Feld)+2); divwert := ewert div 2; ewert := divwert; modwert := ewert mod 2; Feld[n] := modwert; inc(n); end; end; } function DezinHex (ewert : integer):String; var Erg:String; begin erg :=''; while ewert > 0 do begin erg := inttostr(ewert mod 2) + erg; ewert := ewert div 2; end; result:= erg; end; procedure TForm1.wandelnbuttonClick(Sender: TObject); var ewert, ergebnis, Feld, n, erg : integer; begin ewert := strtoint(zahledt.text); //DezinDual (ewert); DezinHex (ewert); ausgabepanel.Caption := inttostr(erg); //ausgabepanel.caption := inttostr(Feld[n]); //ausgabepanel.caption := IntToHex(ewert,4); end; end. danke euch alle mfg Lun87 |
Re: Arry Problem ! Benötige Hilfe...
DezinHex ist eine Function wenn du die keiner Variable zuweist bringt dir der Aufruf gar nichts.
Delphi-Quellcode:
Ist da deutlich besser ;)
ausgabepanel.Caption := DezinHex (ewert);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz