AGB  ·  Datenschutz  ·  Impressum  







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

Array Problem ! Benötige Hilfe...

Ein Thema von lun87 · begonnen am 19. Nov 2006 · letzter Beitrag vom 20. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#1

Array Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 19:27
Delphi-Quellcode:
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.
Mein Programm soll folgendes bewerkstelligen:

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?

mfg Lun87

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]
[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 19:40
 Feld : array [1..n] of integer; -----> Constand expression expected Das geht so nicht . Versuche mal
Delphi-Quellcode:
 Feld : array of integer;
...
setLength( Feld, n);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 19:46
was mkinzler versucht zu sagen ist:

Delphi-Quellcode:
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;
Allerdings solltest du deiner Function einen Rückgabe wert Geben. Das machst dann mit Result :=

und auf dein Array must ja auch noch Lesend zugreifen, sonst bringt es dir ja gar nichts das du es gebaut hast.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 19:49
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:

 function DezInHex(ewert: Cardinal): String; Cardinal ist ein vorzeichenloser Typ (gibt es den in D6 bereits?) und der Rückgabewert ist besser eine Zeichenkette.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 19:57
Hallo lun87,


Mit der function IntToHex kann man Integer-Werte in Hex-Zahlen konvertieren.
Label1.Caption:= IntToHex(1000,4); Das Ergebnis ist '03E8' = 1000 (Integer-Zahl)
Die 4 bedeutet die Anzahl-Zeichen die zurückgegeben werden.

Bis bald Chemiker

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#6

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 20:08
Delphi-Quellcode:
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 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
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
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 20:37
Ich hab so das gefühl das ich hier deine Hausaufgaben löse ...

Delphi-Quellcode:
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;
Der Code ist aber Blind gecoded. Mit etwas Glück sind noch genug Fehler drin so das sich noch ein kleiner Lerneffeckt einstellt

[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
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 20:52
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:
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;
Mit ein paar Änderungen kannst du das an die Basis 16 anpassen. Allerdings musst du es morgen auch noch erklären können...

Gute Nacht
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#9

Re: Arry Problem ! Benötige Hilfe...

  Alt 19. Nov 2006, 21:21
Delphi-Quellcode:
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.
mein letzter stand der dinge, gehe nun ins bett... hab kopfschmerzen
danke euch alle

mfg
Lun87
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Arry Problem ! Benötige Hilfe...

  Alt 20. Nov 2006, 08:24
DezinHex ist eine Function wenn du die keiner Variable zuweist bringt dir der Aufruf gar nichts.


  ausgabepanel.Caption := DezinHex (ewert); Ist da deutlich besser
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:17 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