Autor Beitrag
654321
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 20:41 
Hallo,

ich habe folgendes Problem: ich möchte in einer Konsolenanwendung die Wurzel ausrechnen und zwar nicht mit Real sondern mit Integer. Nun habe ich versucht mit den div für Integer zu arbeiten und obwohl der Debugger keinen Fehler anzeigt wird, egal welche Zahl ich eingebe, immer 0 als Wurzel ausgerechnet. Könntet ihr mir sagen wo der Fehler liegt?

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:
program
       QuadratundWurzelBerechnung;

uses
  Windows,
  Messages,
  SysUtils,
  Dialogs;

var
       x: integer;
       y: integer;
       Rechnung: string;

begin
     showmessage('Test');

     Rechnung:= Inputbox ('Quadratrechnen und Wurzelziehen',
                          'Geben Sie bitte eine Zahl ein, die quadriert und aus der die Wurzel gezogen werden soll. Die Zahl muss aufgrund der Beschränkungen durch Integer zwischen -46340 und +46340 liegen.','1');

     x:= strtoint(Rechnung);

     y:= x;

if   ((y <=-46340or (y >=46340))

 then

  begin
     showmessage ('Geben Sie bitte eine ZAHL zwischen -46340 und +46340 ein!');

  end

 else

  begin
     y:= x;
     x:= x*x;
     y:= y*(1 div 2);


     showmessage ('Das Quadrat von '+Rechnung+' ist '+inttostr(x)+' und die Wurzel aus '+Rechnung+' ist '+inttostr(y)+'!');

  end;

end.


Danke im Vorraus.

MfG

Numberz

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 14.10.07 20:49 
1 div 2 ist 0, weil 2 0 mal in 1 reinpasst. Und 0 mal irgendwas ist nun mal 0.
Und vorallem ist die Wurzel einer Zahl nur in den allerwenigsten Fällen die Hälfte von der Zahl.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
654321 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 20:59 
argh danke hab meinen fehler gefunden ;-)

MfG

Numberz
654321 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 21:13 
Hmm habs jetzt mal mit Power versucht aber ohne Erfolg, der Debugger sagt inkompatible Typen Integer und Extended und ich hab keine Ahnung wie ich das beheben kann:


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:
program
       QuadratundWurzelBerechnung;

uses
  Windows,
  Messages,
  SysUtils,
  Dialogs,
  math;

var
       x: integer;
       y: integer;
       Rechnung: string;

begin
     showmessage('Test');

     Rechnung:= Inputbox ('Quadratrechnen und Wurzelziehen',
                          'Geben Sie bitte eine Zahl ein, die quadriert und aus der die Wurzel gezogen werden soll. Die Zahl muss aufgrund der Beschränkungen durch Integer zwischen -46340 und +46340 liegen.','1');

     x:= strtoint(Rechnung);

     y:= x;

if   ((y <=-46340or (y >=46340))

 then

  begin
     showmessage ('Geben Sie bitte eine ZAHL zwischen -46340 und +46340 ein!');

  end

 else

  begin
     y:= x;
     x:= x*x;
     y:= power (y , 2)


     showmessage ('Das Quadrat von '+Rechnung+' ist '+inttostr(x)+' und die Wurzel aus '+Rechnung+' ist '+inttostr(y)+'!');

  end;

end.



MfG

Numberz

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 14.10.07 21:18 
Power liefert eine Komma-Zahl zurück. Du musst also noch mit round runden.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
654321 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 21:20 
Ahh, danke für den Tipp!

MfG

Numberz
654321 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 21:26 
Die Delphi-Hilfe sagt mir zu Round: "Round rundet einen Wert des Typ Real auf einen Integer-Wert."
Das Problem ist aber das mein Wert ja schon ein Integer Wert ist und ich keine Real Werte verwenden will. Gibt es vielleicht etwas analoges für Integer?

MfG

Numberz
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 14.10.07 21:30 
zeig mal bitte deinen aufruf von round und power, der sollte nämlich so sein:

ausblenden Delphi-Quelltext
1:
y:= round(power (y , 2));					


und bitte verwende delphi-tags wenn du Quelltext postest das steigert die Lesbarkeit enorm.
654321 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 14.10.07 21:41 
Vielen Dank Jann1k, da war der Fehler!
Und das mit den Delphitags mach ich in Zukunft auch! ;-)