Entwickler-Ecke

Sonstiges (Delphi) - Wurzelrechnung im Konsolenfenster


654321 - So 14.10.07 19:41
Titel: Wurzelrechnung im Konsolenfenster
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?


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 - So 14.10.07 19: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.


654321 - So 14.10.07 19:59

argh danke hab meinen fehler gefunden ;-)

MfG

Numberz


654321 - So 14.10.07 20: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:



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 - So 14.10.07 20:18

Power liefert eine Komma-Zahl zurück. Du musst also noch mit round runden.


654321 - So 14.10.07 20:20

Ahh, danke für den Tipp!

MfG

Numberz


654321 - So 14.10.07 20: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 - So 14.10.07 20:30

zeig mal bitte deinen aufruf von round und power, der sollte nämlich so sein:


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


und bitte verwende delphi-tags wenn du Quelltext postest das steigert die Lesbarkeit enorm.


654321 - So 14.10.07 20:41

Vielen Dank Jann1k, da war der Fehler!
Und das mit den Delphitags mach ich in Zukunft auch! ;-)