| Autor |
Beitrag |
DarkDaywalker
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 07.03.08 17:16
Hi, und zwar hab ich ein Problem mit dem Vorzeichen bei meinem Taschenrechner.. er gibt immer Plus aus ....
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 public 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 Gausi: Delphi-Tags hinzugefügtModeriert von Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 07.03.2008 um 17:44
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: 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.
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 procedure RechenenClick(Sender: TObject); public 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 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
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 Christian S.: Delphi-Tags hinzugefügt
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Fr 07.03.08 18:48
Hi,
benutze bitte delphi-Tags für deine Beiträge: [delphi ] quelltext [/delphi ]
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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 07.03.08 19:43
ähmm.. sry was meisnt du mit initialisieren? bin doch anfänger ^^ 
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 07.03.08 21:00
danke für die Erklärung
ja ich habe die Variabeln am Anfang den Feldern zugewiesen....
|
|
|