Avatar billede sl5049 Nybegynder
29. april 2000 - 10:45 Der er 9 kommentarer og
1 løsning

Rekursioner og kvadratrod

Er der nogen der kan hjælp mig ? Jeg sidder og arbejder med rekursioner i delphi og er stødt på et problem, nemlig omkring hvordan man rent matematisk beregner kvadratroden. Kan det lade sig gøre med en rekursion ? Det er ok at det kun er kvadrattal (0,1,4,9,16,25 osv.)
Avatar billede skovhus Nybegynder
29. april 2000 - 11:41 #1
Det letteste er vel at gå den anden vej, d.v.s. at gange et tal med sig selv og se om det bliver til det man vil have.

function kvrod(talind : integer) : integer;
var
  i : integer;
  r : integer;
begin
  result := 0;
  i := 1;
  repeat
    r := i*i;
    if r = talind then
    begin
      result := i;
      break;
    end;
  until (r => talind);
end;
   
Kald denne funktion med det tal du vil finde kvadratroden af.

Denne ganger i med sig selv indtil i * i er lig det tal du vil finde kvadratroden af. Hvis tallet ikke passer bliver r til sidst større end talind og funktionen returnerer med et 0 (nul) ellers returneres kvadratroden af talind.

Det er ganske vist ikke den korrekte mathematiske formel, men den virker for heltal og er såmænd ganske hurtig.

Avatar billede retep Nybegynder
29. april 2000 - 11:58 #2
Tjaaa... Hvis det ikke skal være rekursivt (og det lyder det på spørgsmålet som om det skal; en skoleopgave?)så skal du da bruge Delphi's indbyggede funktion

Sqrt(e:extended): extended;

Mvh
Retep
Avatar billede sl5049 Nybegynder
01. maj 2000 - 22:13 #3
Ja, det skal løses rekursivt, hvis det altså kan lade sig gøre. Og ja, det er en skoleopgave !
Avatar billede dj Nybegynder
05. maj 2000 - 23:21 #4
hej, jeg har faktisk lavet sådan et program til en skoleopgave en gang, hvis du lige kan vente til på mandag så kan jeg gi' dig den.
Avatar billede sl5049 Nybegynder
06. maj 2000 - 09:51 #5
hej dj. Det lyder bare godt...
Avatar billede dj Nybegynder
06. maj 2000 - 10:13 #6
du må hellere lige sende mig en mail til htx98b10@gts.dk så jeg husker det, der er jo lang tid til mandag :)

Til gengæld udregner det program jeg har lavet kvadratroden på den rigtige matematiske måde og den kan derfor tage kvadratroden af et hvilket som helst tal. Den er dog ikke lavet rekursivt.
Avatar billede dj Nybegynder
08. maj 2000 - 11:17 #7
Hej her er den så, jeg har testet at den virker, så alting skulle være perfect, hvis den skal være rekursiv så kan du evt. finde ud af at lave det der hvor While løkken er, ellers så bliver din lærer nok alligevel lidt forbavset over at du kunne lave den her alligevel sååå :))

--------------------------------------

Function kvadratrod(tal: double):double;
var
  G,U,O: double;
  a: string;
begin
  U := 0;
  O := tal;
  {Istedet for While løkken kan du muligvis lave noget rekursivt}
  while abs(G*G - tal) > 0.00000001 do begin //nøjagtighed
    G := (O + U) / 2; //finder det tal midt imellem overværdi og underværdi
    If G * G > tal Then //tjekker om G^2 er størrer eller mindre end epsilon
        O := G //ny overværdi
    Else
        U := G; //ny underværdi
  end;
  G := G + 0.00000001; //runder op
  a:=floattostr(G); //cutter af sådan at vi kun har de decimaler der ligger inden for nøjagtighedsområdet
  a:=copy(a,pos('.',a),10);
  g:=strtofloat(a);
  result := G;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//Dette er kun et test eksempel og du kan bare ændre det til displayet på din lommeregner, men det finder du nok ud af :)
edit1.text := floattostr(kvadratrod(strtofloat(edit1.text)));
end;
Avatar billede dj Nybegynder
08. maj 2000 - 11:20 #8
ps: istedet for at bruge pos('.',a) kan du udskifte '.' med den constant der hedder noget med commaseperator i delphi, jeg kunne bare ikke lige huske det rigtige navn for den, derfor brugte jeg '.' da dette er kommaseperatoren i de fleste tilfælde.

Måske en anden kan huske hvad den hedder ?

ellers kan du sikkert finde den i et andet spørgsmål da jeg har set den anvendt før i funktioner postet her på eksperten.dk
Avatar billede dj Nybegynder
08. maj 2000 - 11:22 #9
jo flere 0 du tilføjer til 0.0000001 jo mere præcis bliver kvadratroden, for du kan tilføje en decimal for hvor 0 der er bagefter, bemærk dog at funktionen bliver en del langsommere af det og en nøjagtighed ned til 7 decimaler plejer også at være mere end rigeligt.
Avatar billede jchris10 Nybegynder
11. maj 2000 - 09:37 #10
Hvorfor gøre det så besværligt ? kvadratroden af et tal a er lig a^0.5
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester