Autor Beitrag
DarkDaywalker
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 07.03.08 17:16 
Hi, und zwar hab ich ein Problem mit dem Vorzeichen bei meinem Taschenrechner.. er gibt immer Plus aus ....

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:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
unit Bruchrechnung;

interface

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

type
  TForm1 = class(TForm)
    Nenner1: TEdit;
    GanzeZ1: TEdit;
    Vorz1: TEdit;
    Zaehler1: TEdit;
    Vorz2: TEdit;
    Nenner2: TEdit;
    Rechenzeichen: TEdit;
    GanzeZ2: TEdit;
    Zaehler2: TEdit;
    Gleichzeichen: TLabel;
    VorzeichenE: TLabel;
    GanzeZE: TLabel;
    NennerE: TLabel;
    ZaehlerE: TLabel;
    Rechenen: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure RechenenClick(Sender: TObject);

     private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;



var


  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.RechenenClick(Sender: TObject);

Var
Gz1,N1,Z1,Gz2,N2,Z2,Ne,Ze,Gze,VVz1,VVz2,a,b,r : INTEGER;
Rz,Vz1,Vz2,VorzE: CHAR;

begin

Gz1:= StrToInt(GanzeZ1.Text);
Gz2:= StrToInt(GanzeZ2.Text);
N1:= StrToInt(Nenner1.Text);
N2:= StrToInt(Nenner2.Text);
Z1:= StrToInt(Zaehler1.Text);
Z2:= StrToInt(Zaehler2.Text);
Rz:= Rechenzeichen.Text[1];
Vz1:= Vorz1.Text[1];
Vz2:= Vorz2.Text[1];


CASE Rz OF
  '*':
   begin
    Z1:= N1 * Gz1 + Z1;
    Z2:= N2 * Gz2 + Z2;
    Ne:= N1 * N2;
    Ze:= Z1 * Z2;
  end;
  '+':
  begin
    if (N1=N2) then
    begin
      Z1:= N1 * Gz1 + Z1;
      Z2:= N2 * Gz2 + Z2;
      Ze:= Z1+Z2;
      Ne:= N1;
    end
    else
    begin
      Z1:= N1 * Gz1 + Z1;
      Z2:= N2 * Gz2 + Z2;
      Z1:=Z1*N2;
      Z2:=Z2*N1;
      Ze:= Z1+Z2;
      Ne:= N1;
    end;
  end;
  '-':
  begin
     if (N1=N2) then
     begin
      Z1:= N1 * Gz1 + Z1;
      Z2:= N2 * Gz2 + Z2;
      Ze:= Z1-Z2;
      Ne:= N1;
     end
     else
     begin
      Z1:= N1 * Gz1 + Z1;
      Z2:= N2 * Gz2 + Z2;
      Z1:=Z1*N2;
      Z2:=Z2*N1;
      Ze:= Z1-Z2;
      Ne:= N1;
     end;
  end;

  '/':
  begin
   Z1:= N1 * Gz1 + Z1;
   Z2:= N2 * Gz2 + Z2;
   Ze:= Z1*N2;
   Ne:= Z2*N1;
  end;

end;

if (Vz1='-')
 then
  begin
   VVz1:=-1;
  end
 else
  begin
   VVz1:=+1;
  end;

if (Vz2='-')
 then
  begin
   VVz2:=-1;
  end
 else
  begin
   VVz2:=+1;
  end;

Z1 := VVz1*Z1;
Z2 := VVz2*Z2;




if (Ze<0)
 then
  begin
   VorzE := '-';
   Ze:=Ze * -1;
  end
 else
  begin
   VorzE:= '+';
  end;

VorzeichenE.Caption := VorzE;

Gze:= Ze div Ne;
Ze:= Ze mod Ne;

if Ze>Ne then
 begin
  a:=Ze;
  b:=Ne;
 end
else
 begin
  b:=Ze;
  a:=Ne;
 end;

repeat
 r:= a mod b;
 a:=b;
 b:=r
until (r=0);

Ne:= Ne div a;
Ze:= Ze div a;


GanzeZE.Caption:= IntToStr(Gze);
ZaehlerE.Caption := IntToStr(Ze);
NennerE.Caption:= IntToStr(Ne);

 end;

end.




Danke für eure Hilfe
MfG

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 07.03.2008 um 17:44
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 07.03.08 18:19 
Hi,

Bevor ich zum Thema komme: Warum so viele Editfelder, da blickt doch keiner durch, der Inhalt ist ein String und demnach kannst du direkt eingeben: "34/23 + 67/23".
Zum Isolieren der Argumente nimmst du dann Pos, etc. siehe dazu hier: r2c2.weingut-rehn.de...itung_mit_Delphi.htm

Zum Thema :) .
Hier der Code in lesbarer Form:(Bitte kopiere sie doch und arbeite von daher ausgehend weiter).
Bitte gib den Variablen a,b,r,Rz,Vz1,Vz2,VorzE selbsterklärende Namen... der Rest ist teilweise schon so verständlich.
Danach schaue ich mir den Text dann problemorientiert an.
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:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
unit Bruchrechnung;

interface

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

type
  TForm1 = class(TForm)
    Nenner1, GanzeZ1, Vorz1, Zaehler1, Vorz2, Nenner2,
    Rechenzeichen,GanzeZ2, Zaehler2: TEdit;
    Gleichzeichen, VorzeichenE, GanzeZE, NennerE,
    ZaehlerE: TLabel;
    Rechenen: TButton;
    Label1, Label2: TLabel;
  private
    { Private-Deklarationen }
    procedure RechenenClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

  procedure TForm1.RechenenClick(Sender: TObject);
  var
    Gz1,N1,Z1,Gz2,N2,Z2,Ne,Ze,Gze,VVz1,VVz2,a,b,r : integer;
    Rz,Vz1,Vz2,VorzE: char;  //Benenn deinen Variablenwust mal verständlich; im Unterschied zur Mathematik sollten in der Informatik selbsterklärende Namen verwendet werden.
  begin
    Gz1 := StrToInt(GanzeZ1.Text);
    Gz2 := StrToInt(GanzeZ2.Text);
    N1 := StrToInt(Nenner1.Text);
    N2 := StrToInt(Nenner2.Text);
    Z1 := StrToInt(Zaehler1.Text);
    Z2 := StrToInt(Zaehler2.Text);
    Rz := Rechenzeichen.Text[1];
    Vz1 := Vorz1.Text[1];
    Vz2 := Vorz2.Text[1];

    case Rz of
      '*': begin
        Z1 := N1 * Gz1 + Z1;
        Z2 := N2 * Gz2 + Z2;
        Ne := N1 * N2;
        Ze := Z1 * Z2;
      end;
      '+': begin
        Z1 := N1 * Gz1 + Z1;
        Z2 := N2 * Gz2 + Z2;
        if N1 <> N2 then begin
          Z1 := Z1 * N2;
          Z2 := Z2 * N1;
        end;
        Ne := N1;
        Ze := Z1 + Z2;
      end;
      '-': begin
        Z1 := N1 * Gz1 + Z1;
        Z2 := N2 * Gz2 + Z2;
        if N1 <> N2 then begin
          Z1 := Z1 * N2;
          Z2 := Z2 * N1;
        end;
        Ne := N1;
        Ze := Z1 - Z2;
      end;
      '/': begin
        Z1:= N1 * Gz1 + Z1;
        Z2:= N2 * Gz2 + Z2;
        Ze:= Z1 * N2;
        Ne:= Z2 * N1;
      end;
    end;

    if Vz1 = '-' then
      VVz1 := -1
    else VVz1 := 1;

    if Vz2 = '-' then
      VVz2 := -1
    else VVz2 := 1;

    Z1 := VVz1 * Z1;
    Z2 := VVz2 * Z2;

    if Ze < 0 then begin
      VorzE := '-';
      Ze := -Ze;
    end else VorzE := '+';

    VorzeichenE.Caption := VorzE;

    Gze  := Ze div Ne;
    Ze  := Ze mod Ne;

    if Ze > Ne then begin
      a := Ze;
      b := Ne;
    end else begin
      b := Ze;
      a := Ne;
    end;

    repeat
      r := a mod b;
      a := b;
      b := r
    until r = 0;

    Ne := Ne div a;
    Ze := Ze div a;


    GanzeZE.Caption:= IntToStr(Gze);
    ZaehlerE.Caption := IntToStr(Ze);
    NennerE.Caption:= IntToStr(Ne);
  end;

end.

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Fr 07.03.08 18:31, insgesamt 1-mal bearbeitet
DarkDaywalker Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 07.03.08 18:27 
ja ich weiß das sieht alles noch unordenlich aus bin ja auch anfänger....
aber es geht mir eigentlich nur um den Teil

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
if Vz1 = '-' then
      VVz1 := -1
    else VVz1 := 1;

    if Vz2 = '-' then
      VVz2 := -1                                     
    else VVz2 := 1;

    Z1 := VVz1 * Z1;
    Z2 := VVz2 * Z2;

    if Ze < 0 then begin
      VorzE := '-';
      Ze := -Ze;
    end else VorzE := '+';

    VorzeichenE.Caption := VorzE;


Vz1= Vorzeichen1
VVz1= Vorzeichen wird umgewandelt in eine Integerzahl
Z1= Zähler1


ja das komische is ja das nen Kumpel von mir den Code genauso hat nur mit anderen variabelnamen und bei dem funzt das

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 07.03.08 18:48 
Hi,

benutze bitte delphi-Tags für deine Beiträge: [delphi ] quelltext [/delphi ]

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  if Vz1 = '-' then
    Z1 := -Z1;

  if Vz2 = '-' then
    Z2 := -Z2;

  if Ze < 0 then begin
    VorzE := '-';
    Ze := -Ze;
  end else VorzE := '+';

  VorzeichenE.Caption := VorzE;


über Ze kann ich nur mutmaßen^^
Du scheinst die Variable aber nirgens zu initialisieren?
Edit: ups, übersehen. Das ist nciht das Problem.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Fr 07.03.08 21:50, insgesamt 1-mal bearbeitet
DarkDaywalker Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 07.03.08 19:43 
ähmm.. sry was meisnt du mit initialisieren? bin doch anfänger ^^ :P
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 07.03.08 20:16 
Initialisieren = Wert zuweisen bei einfachen Integer etc. Datentypen.

Wiktionary - Initialisieren:

[1] Herstellung eines ganz bestimmten Startzustandes eines Computers, eines Programms, einer Prozedur oder eines Objekts. Bei Computern erfolgt die ~ durch das Einschalten (Kaltstart) oder durch die Eingabe des Befehls zum Neustart (Warmstart) ohne vorheriges Ausschalten.
[2] Bei Programmen und sonstigen Software- Einheiten sind alle Variablen vor der ersten Anwendung zu belegen (zu "initialisieren"), um einen korrekten Ablauf des Programms zu gewährleisten, da in imperativen Programmiersprachen jeder Variablen bei ihrer Deklaration ein bestimmter Bereich zugeordnet ist.

Zu 2: Uninitialisierte Variablen haben in Delphi einen zufälligen Startwert, meißtens null.
Kannst du dich aber nciht drauf verlassen.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
DarkDaywalker Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 07.03.08 21:00 
danke für die Erklärung


ja ich habe die Variabeln am Anfang den Feldern zugewiesen....