AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rekursiv function

Offene Frage von "speedy23"
Ein Thema von speedy23 · begonnen am 11. Nov 2008 · letzter Beitrag vom 12. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
speedy23

Registriert seit: 11. Nov 2008
76 Beiträge
 
#1

Rekursiv function

  Alt 11. Nov 2008, 18:25
Delphi-Quellcode:
implementation
function ZweiHoch(n:integer):real;
var i:integer;
    p:real;

begin
   if n=0 then Zweihoch:=1
   else Zweihoch:=2*Zweihoch(n-1);

end;
function bindual(s:string):integer;
begin
if length(s)=0 then bindual:=0 else
if s[1]='1then
bindual:=zweihoch(length(s))+bindual(copy(s,2,length(s)-1)) else
bindual:=bindual(copy(s,2,length(s)-1));
end;
integer und extendet sind inkompatibel. d.h. ich kann nich kompilieren...warum??
PS das soll ne binärzahl in ne dezimalzahl rekursiv umwandeln

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]
...oh yeah...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Rekursiv function

  Alt 11. Nov 2008, 18:32
wofür hast du die Variable i declariert in der Funktion ZweiHoch?
Im übrigen hast du weniger Aufwand bei der Pflege wenn du "result :=" anstelle von "Funktionsname :=" verwendest. Wenn du die Funktion irgendwann mal umbenennst musst du, so wie du es bisher machst, diese ganzen Stellen auch mit ändern. Wenn du jedoch "result" verwendest musst du dort nichts mehr machen.
In welcher Zeile bekommst du den Fehler? Und kannst du das ganze eventuell richtig einrücken, dann findet man auch leichter den Fehler weil man sofort sieht was wohin gehört
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Rekursiv function

  Alt 11. Nov 2008, 18:39
Besser
Delphi-Quellcode:
function ZweiHoch(n:integer):Extended;
var i:integer;
    p:real;

begin
   if n=0 then result :=1
          else result := 2*Zweihoch(n-1);

function bindual(s:string):integer;
begin
  if length(s)=0 then result := 0
                 else if s[1]='1then result := Trunc(zweihoch(length(s)))+bindual(copy(s,2,length(s)-1))
                                  else result := bindual(copy(s,2,length(s)-1));
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Rekursiv function

  Alt 11. Nov 2008, 18:40
Wieso nicht einfach den Ergebnistyp von ZweiHoch von Real auf Integer stellen? Denn diese Funktion kann sowieso nur Ganzzahlen zurückgeben.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
speedy23

Registriert seit: 11. Nov 2008
76 Beiträge
 
#5

Re: Rekursiv function

  Alt 11. Nov 2008, 18:41
ja stimmt...war blöde sry bin nich draufgekommen...O trotzdem danke für die mühe
...oh yeah...
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Rekursiv function

  Alt 11. Nov 2008, 18:45
Und noch was: In ZweiHoch musst du n nicht gleich Null sondern gleich 1 prüfen, hier nochmal beide Funktionen (auch richtig eingerückt, das sollte man sich unbedingt angewöhnen )
Delphi-Quellcode:
function ZweiHoch(n: integer): Integer;
begin
   if n = 1 then
     Result := 1
   else
     Result := 2 * Zweihoch(n - 1);
end;

function BinDual(s: String): Integer;
begin
  if Length(s) = 0 then
    Result := 0
  else
    if s[1]= '1then
      Result := ZweiHoch(Length(s)) + BinDual(Copy(s, 2, Length(s) - 1))
    else
      Result := BinDual(Copy(s, 2, Length(s) - 1));
end;
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: Rekursiv function

  Alt 11. Nov 2008, 18:55
2^1 ergibt bei mir immer noch 2, 2^0 = 1.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Rekursiv function

  Alt 11. Nov 2008, 18:59
Nein Detlef dann wirds falsch

Da 2 Fehler eingebaut sind, die sich gegenseitig kompensieren, müsstest du schon beide beheben

Der erste Fehler ist natürlich dass 2^1 = 2 und 2^0 = 1

Der zweite liegt hier:
      Result := ZweiHoch(Length(s)) + BinDual(Copy(s, 2, Length(s) - 1)) Denn length() liefert bei eine string der länge 1 auch 1 Zuürck und nicht 0 (obwohl die Wertigkeit dieser Position 2^0 ist)

Wenn der erste Fehler korrigiert wird, muss da dann length(s)-1 stehen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#9

Re: Rekursiv function

  Alt 11. Nov 2008, 19:21
Ich hatte mir auch nur die erste Funktion angesehen, daher mein Einwand.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#10

Re: Rekursiv function

  Alt 11. Nov 2008, 19:30
Hallo Speedy23,

schon mal daran gedacht, die Logik und die Ausgabe zu vereinen?
Delphi-Quellcode:
procedure WriteBin(aNum: word; Anz: integer = 4*4-1);
begin
  if (aNum and $8000) <> 0 then
    write('1')
  else
    write('0');
  if Anz > 0 then
    WriteBin(aNum shl 1, Anz -1);
end;
Der Aufruf sähe in etwa wie folgt aus: WriteBin(12); Schöne Grüße
Oreaden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz