Brauche dringend Hilfe bei Rekursionsaufgaben



  • Ich habe folgende Aufgabe vor mir liegen:
    . In einem geheimen Labor werden Testversuche mit Viren durchgeführt. Die Forscher
    geben beim Start des Tests eine Anzahl N Viren in den Testautomat. Dort werden
    die Viren bekämpft. Beobachtungen haben gezeigt, dass sich die Viren bei Lichteinstrahlung
    im Laufe eines Tages zunächst um das 3-fache vermehren. Bei Nacht nach
    einer Stunde in Dunkelheit sterben 72%. Geben die Forscher beim Start eine zusätzliche
    Substanz hinzu, sterben 82%. Bleiben jetzt nur noch 100 Viren übrig, sterben
    alle bis zum nächsten Morgen.
    Schreiben Sie eine rekursive Funktion, die abhängig von der Eingabe und Beobachtung
    der Forscher berechnet, wie viele Tage ein Testversuch dauert. Hinweis: Beim
    Start mit 2 Viren dauert der Test 1 Tag.
    Listen Sie die Anzahl der Tage der Dauer eines Tests in einer Tabelle auf. Die Stückzahl
    beginnt bei 100 und erhöht sich um 100 je Schritt bis 2000. Stellen sie dabei
    die Ergebnisse des Tests bei Zugabe der Substanz und ohne Zugabe der Substanz
    gegenüber.

    ... Und irgendwie bekomme ich die Aufgabe einfach nicht hin, mein Compiler hängt sich quasi immer auf bzw macht außer der ersten Ausgabe der main() einfach nichts. Vielleicht kann mir hier ja jemand helfen bzw mir sagen wo meine grundlegenden Fehler sind.

    #include <iostream>
    
    using namespace std;
    
    float viren (int N, int anz, int tag)
    {
    
      char c='0';
        if(N<100) return 0;
    
        while (anz>100)
        {
            int tag=0;
            if(c=='1')
            { anz = N*3-(N*0.72);
               if (anz>100) return anz,tag++;
               else cout<< "alle gestorben" << endl;
    
            }
    
            if (c=='2')
            { anz=N*3-(N*0.82);
               if (anz>100) return anz,tag++;
               else cout << "alle gestorben" << endl;
    
            }
        }
    
    }
    int main()
    {   char c='0';
        int N,anz,tag;
    
        cout<< " 1:ohne Substrat \n 2:mit Substrat\n x:Ende \n" << endl;
        cin>>c;
    
     cout << viren(N,anz,tag) << endl;
        return 0;
    }
    

    Mod-Edit Arcoth: Code-Tags.



  • Also die zwei Posts waren eher Iteration ...



  • Der Compiler übersetzt das Programm. Wenn es läuft, hat er damit nichts mehr zu tun.

    Benutze einen Debugger und schau nach, was das Programm tut.



  • Und überleg dir, was mit dem

    char c='0';
    

    in der Funktion viren passiert.


Anmelden zum Antworten