Autor Beitrag
That Guy
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 02.11.04 17:48 
Hallo,
wiedereinmal überfordert mich Delphi bzw. mein Lehrer... :(
daher bitte ich wiedereinmal um eure hilfe ^^" .

In dem Programm wird eine Zahl1 und eine Zahl2 eingegeben, diese werden dann in Dualzahlen umgerechnet. Die beiden DUalzahlen werden dann addiert und das DUal ergebnis muss zurück in eine Dezimalzahl gerechnet werden.
Ihr denkt jetzt sicher warum nicht einfach alles dezimal und dann in DUal, ganz einfach weil mein lehrer das so will -_-"
naja aufjedenfall muss das so funzen (und lasst mich nicht lügen am besten bis donnerstag, spätestens aber nächste woche dienstag ^^")

naja ich hab noch eine schematische darstellung gemacht damit ihr euch das besser vorstellen könnt ^^

user defined image

wer will kann sich das ganze (unit, formblatt etc.) auch runterladen hier

der Quellcode ist sicherlich komplett falsch aber naja ^^

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    MDezi1: TMemo;
    MDezi2: TMemo;
    MDeziErgebnis: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    MDual1: TMemo;
    MDual2: TMemo;
    MDualErgebnis: TMemo;
    Label4: TLabel;
    BtRech: TButton;
    BtClear: TButton;
    Label5: TLabel;
    Label6: TLabel;
    procedure BtClearClick(Sender: TObject);
    procedure BtRechClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var Form1:= TForm1;

implementation

{$R *.DFM}

procedure TForm1.BtClearClick(Sender: TObject);
begin
 MDezi1.lines[0] :='';
 MDezi2.lines[0] :='';
 MDeziErgebnis.lines[0] :='';
 MDual1.lines[0] :='';
 MDual2.Lines[0] :='';
 MDualErgebnis.lines[0] :='';
end;

procedure TForm1.BtRechClick(Sender: TObject);
var Dualtext : String;
var Zeichen : String;
    Dezimal : Integer;

begin
 dezimal := 0;
 dualtext := MDezi1.lines[0];
 Repeat
  Zeichen := Copy (Dualtext,1,1);
  Delete (Dualtext,1,1);
  Dezimal := Dezimal * 2+ StrToInt(Zeichen);
 Until Dualtext = ' ';
  MDeziErgebnis.Text :=  IntToStr(Dezimal);
end;

procedure;
Var MDezi1, MDezi2, MDeziErgebnis, ubertrag : Integer;
    Dualtext : String;;

begin
 Dezi1 := StrToInt(MDezi1.text);
 dezimalzahl(Dezi1,Dualtext);
 Mdual1.Text:=Dualtext;
 Mdezi2:=StrToInt(Mdezi2.Text);
 Mdual2.Text:=Dualtext;
 addiere (Mdual1.Text,Mdual2.Text,Dualtext);
 Mdual3.Text:=Dualtext;
 DualinDezimal(Dualtext);
end;
end.


zu meiner verteidigung hab ich noch zu sagen, dass das nich mein programm ist da meins nicht gespeichert war als der rechner in der schule abgeschmiert ist und dass hier von meinem nachbarn ist der nochweniger plan davon hat als ich ... aufjedenfall wäre eure hilfe für mich wiedereinmal sehr wertvoll :)
st-matze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
BeitragVerfasst: Di 02.11.04 18:01 
Hier mal nen kleiner anfang

integer in dualzahl umwandlung

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function inttobit(IN_dec:integer):string;
begin
  Result:='';
  while IN_Dec > 0 do
  begin
    case (IN_dec mod 2of
    0:Result:='0'+Result;
    1:Result:='1'+Result;
    end;
    IN_dec:=Round((IN_dec - (IN_dec mod 2))/2);
  end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  try
    Edit3.Text:=inttobit(strtoint(Edit1.Text));
  except
    Edit3.Text:='';
  end;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  try
    Edit4Text:=inttobit(strtoint(Edit2.text));
  except
    Edit4Text:='';
  end;
end;

end.


und nimm doch lieber edit als memo is einfacher

muss jetzt leider wech
vielleicht später mehr
That Guy Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 02.11.04 18:10 
mein lehrer will das wir memo felder benutzen frag nich warum ... ^^

schopnmal danke für deine mühe, wäre es zu viel verlangt das ganze in etwa so zu schreiben wie ich das oben begonnen hab ? dann ist das ganze für mich als voll depp in sachen delphi einfacher um zu kopieren ^^ oder zieht euch doch das komplette ding und bearbeitet es da ^^, aber trotzdem schonmal danke^^
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Di 02.11.04 18:18 
Findest du es nicht ein wenig dreist, darum zu betteln, daß andere deine Hausaufgaben für dich erledigen?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
That Guy Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 02.11.04 18:25 
nö,
zum einen sind es keine hausaufgaben und zum anderen lasse ich mir lieber von leuten zeigen wie es richtig geht anstatt in der schule ne 5 oder gar 6 dafür zu kassieren, es ist ja nicht so dass ich es nicht selber versuche, wie mein sehr stümperhafter anfang ja beweist, jedoch habe ich mehr davon wenn ich ein funktionsfähiges programm habe und daran dann sehen kann wie es geht, anstatt ein programm das ich selber gemacht habe was nur falsch oder gar nicht geht :D
st-matze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
BeitragVerfasst: Mi 03.11.04 10:48 
So hier hast du drei funktionen die dir weiter helfen sollten


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
//Addition zweier binärer Zahlen im String format

function addbin(IN_bin1, IN_bin2:string):string;
var bitsum, bitov: char;
    val1, val2, sum:string;
    i: integer;
begin
  val1:='';
  val2:='';
//eingabewerte werden umgedreht aus '1011' wird '1101'
  for i:=Length(IN_bin1) downto 1 do val1:=val1+IN_bin1[i];
  for i:=Length(IN_bin2) downto 1 do val2:=val2+IN_bin2[i];
//die restlichen stellen des kleineren wertes werden mit '0' aufgefüllt
  if Length(IN_bin1) < Length(IN_bin2) then 
    for i:=Length(IN_bin1)+1 to Length(IN_bin2) do val1:=val1+'0'
  else
    for i:=Length(IN_bin2)+1 to Length(IN_bin1) do val2:=val2+'0';
  sum:='';
  bitov:='0';
//"bit" weisen berechnen im Dualsystem
  for i:=1 to Length(val1) do
  begin
    bitsum := chr(((ord(bitov)-Ord('0'))+(Ord(val1[i])-Ord('0')) + (Ord(val2[i])-Ord('0'))) mod 2 + Ord('0'));
    bitov  := chr(((ord(bitov)-Ord('0'))+(Ord(val1[i])-Ord('0')) + (Ord(val2[i])-Ord('0'))) div 2 + Ord('0'));
    sum := sum + bitsum;
  end;
  if bitov = '1' then sum:=sum + bitov;
  Result:='';
//umkehren des Ergebnisses
  for i:=Length(sum) downto 1 do Result:=Result + sum[i];
end;

//Umwandlung Dezimal zu Binär

function dec2bin(IN_dec:integer):string;
begin
  if IN_dec = 0 then
    Result:='0'
  else
  begin
    Result:='';
    while IN_Dec > 0 do
    begin
      case (IN_dec mod 2of
      0:Result:='0'+Result;
      1:Result:='1'+Result;
      end;
      IN_dec:=Round((IN_dec - (IN_dec mod 2))/2);
    end;
  end;
end;

//Umwandlung Binär zu Dezimal

function bin2dec(IN_bin:string):integer;
var i,mul:integer;
begin
  Result:=0;
  i:=Length(IN_bin);
  mul:=1;
  while i > 0 do
  begin
    if IsDelimiter('1',IN_bin,i) then 
      Result:= Result + mul;
    Dec(i);
    mul:=mul*2;
  end;
end;


Für dein Memo solltest du

Memo.Clear; anstatt Memo.Lines[0]:='' verwenden

und

Memo.Text enthält alle Linien auf einmal, falls auch mal mehr als nur eine Zeile drin steht.

verwendung der Funktionen is irgendwie so:

Memobin.text := dec2bin(Memodec.text);
Memobinsum.text := addbin(memobin1.text,memobin2.text);
memodecsum.text := inttostr(bin2dec(Memobinsum.text));

bitte beachte, dass hier noch keine fehlerhaften eingaben abgefangen werden.

Deinen Lehrer kannst ja mal fragen, was der quatsch mit dem Memo überhaupt soll. Edit ist hier meiner meinung nach besser angebracht
That Guy Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 04.11.04 21:48 
vielen dank ^^

ich werd mich dann mals ans umschreiben machen ^^, so wie es da steht nimmt mir mein lehrer das auf keinen fall ab *g*

aber vielen dank schonmal, was würd ich nur ohne euch machen ^^
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 04.11.04 21:56 
That Guy hat folgendes geschrieben:
was würd ich nur ohne euch machen ^^


Das selbe, was du jetzt auch machst: Code umschreiben :twisted:

AXMD
That Guy Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 05.11.04 17:56 
ohne euch hätt ich aber die basis nich ;)