Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Rekursivelösung für my_atoi

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.05.2004, 18:23 Uhr
~FIFo
Gast


Ich habe als aufgabe die Funktion atoi selber rekusiv zu schreiben. Ich habe da mit ein Problem, vielleicht kann mir ja einer von euch sagen wo hier mein Fehler ist.

C++:
int my_atoirek(char *s)
{
     static int faktor =1;
    int ergebnis =0;
    if(*s != '\0'){
        s+=1;
        faktor*=10;
        my_atoirek(s);
    }
    else ergebnis = ((int)s-48)*faktor;

    return ergebnis;
}



Hoffentlich kann mit da jemand helfen, ich habe da so meine Probleme mit der rekusion.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2004, 18:28 Uhr
0xdeadbeef
Gott
(Operator)


Du solltest nicht s+=1 machen, sondern my_atoirek mit (s+1) aufrufen und dir das Ergebnis des rekursiven Aufrufs auch merken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2004, 18:45 Uhr
~FIFO
Gast


Das mit my_atoirek(s+1) leuchtet mir ein, aber müsset ich nicht den rekursions aufruf vom ende des Strings beginnen. den so multipiziere ich ja die einer stelle mit einem fator >1?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.05.2004, 18:50 Uhr
0xdeadbeef
Gott
(Operator)


Jepp, das ist richtig. faktor *= 10 musst du nach dem rekursiven Aufruf machen. Wobei meine Vermutung eh ist, dass du eigentlich eine Hilfsfunktion bauen sollst, die den Faktor als Parameter entgegennimmt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 28.05.2004 um 18:50 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.05.2004, 19:19 Uhr
~FIFO
Gast


Ich habe mich entschieden einen Parameter mehr der Funktion mir zu geben.Dann Funktionier es einwandfrei. Nur habe ich jetzt ja die aufgabenstellung verändert.
Aber sonst fällt mir keine Lösung ein.


C++:
int my_atoirek(char *s, int len)
{
    static int faktor =1;
    int ergebnis =0;
    
    if(len==0)
        return 0;
    else
    {
        len--;
        ergebnis=(s[len]-48)*faktor;
        faktor*=10;

    }
    ergebnis += my_atoirek(s,len);
    
    return ergebnis;
}


Danke für deine Hilfe!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.05.2004, 22:51 Uhr
0xdeadbeef
Gott
(Operator)


Na, das ist doch schon mal garnicht so blöde. Jetzt pack das in ne Hilfsfunktion und du hast deine Aufgabenstellung wieder. Etwa so:

C++:
int _aux_my_atoirek(char *s, int len) {
  /* ... */
}

int my_atoirek(char *s) {
  return _aux_my_atoirek(s, strlen(s));
}


Und wenn du jetzt noch das static int faktor da raus kriegst, ist die Aufgabe wirklich rekursiv gelöst. Aber das machst du bitte noch selbst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: