Brauche Hilfe bei einer Aufgabe
-
Ich habe während meines Studiums das Modul Einführung in die Programmierung in dem ich in regelmäßigen Abständen HA abgeben muss nun komme ich aufgrund einer Fehlermeldung bei meinem Programm nich weiter und brauche dringend Hilfe...
Hier einmal die Aufgabenstellung...
Bei Bakterienkulturen beobachtet man mitunter linear abnehmende Vermehrungsraten, die zum Beispiel
durch zeitlich variierende Nahrungsressourcen oder sich allm¨ahlich ver¨andernde Umgebungsbedingungen
verursacht sein k¨onnen. In einem konkreten Szenario k¨onnte sich eine Anfangspopulation von a Bakterien
am ersten Tag um 5% gegen¨uber dem Vortag vermehren, am zweiten Tag um 4:8%, am dritten Tag um 4:6%,
am vierten Tag um 4:4% usw., bis eines Tages keine Vermehrung mehr beobachtet wird (Vermehrungsrate
0%) und danach sogar eine Reduktion der Bakterienkultur unter ihren Anfangswert a auftritt, erst um 0:2%,
am darauffolgenden Tag bereits um 0:4%, einen Tag sp¨ater um 0:6% usw. bis die Population nach einer
gewissen Anzahl von Tagen durch Reduktion um 100% ausgestorben ist. Allgemein formuliert, l¨asst sich
die Entwicklung einer solchen Bakterienkultur bei anf¨anglicher Vermehrungsrate von p% und t¨aglicher Abnahme
der Vermehrungsrate um q% durch folgende Rekursionsgleichung beschreiben, wobei das Argument
i den betrachteten Tag kennzeichnet:
bac(0) = a
bac(i + 1) = bac(i) + piq
100 bac(i)
Ausgehend von der Anfangspopulation a w¨achst die Bakterienkultur erst schnell, dann immer langsamer,
bis sie ihren Maximalwert max am Tag peak erreicht. Zum Zeitpunkt return to initial ist die Population
wieder auf ihren Ausgangswert geschrumpft und zum Tag extinction ausgestorben, siehe Grafik.
Anzahl Bakterien
max
a
peak return to initial
Zeit (Tage)
extinction
(Labor¨ubung) Programmieren Sie eine rekursive Funktion
double bac(int i, double a, double p, double q),
die die Anzahl Bakterien nach i Tagen berechnet.
(Labor¨ubung) Betten Sie Ihre Funktion bac geeignet in eine main-Funktion ein, die zuvor die
Parameter a, p und q vom Nutzer abfragt und auf Plausibilit¨at testet.
Geben Sie eine Berechnungsvorschrift f¨ur die Zeitpunkte peak, return to initial und extinction an.
(Labor¨ubung) Experimentieren Sie mit Ihrem C-Programm und testen Sie es anhand von drei selbstgew
¨ahlten Szenarien. Sind die Zeitpunkte peak und extinction von a abh¨angig?
(Labor¨ubung) Ersetzen Sie in Ihrer Funktion bac die Bildungsvorschrift bac(i + 1) = bac(i) +
piq
100 bac(i) durch bac(i + 1) =
1 + piq
100
bac(i) und vergleichen Sie die Programmlaufzeiten
f¨ur beide Varianten anhand mehrerer Testl¨aufe.Was stellen Sie fest? Erkl¨aren Sie Ihre Beobachtungen.
Erarbeiten Sie L¨osungsvorschl¨age, wie die rekursive Berechnungsvorschrift in eine rein iterative Variante
transformiert werden kann. Vergleichen Sie beide Varianten hinsichtlich erwarteter Laufzeit,
Speicherplatzverbrauch und Quelltextl¨ange.Mein bisheriger Quelltext...
#include <stdio.h> #include <stdlib.h> double bac(int i, double a, double p, double q) { if (i == 0) { return a; } if (a == 0) { return 0; } if (p == 0); { return 0; } if (q == 0) { return 0; } else { return (1+((p-i*q)/100))*bac(i); } } int main() { int i; double a,p,q; printf("\n Geben Sie eine Anfangspopulation ein: "); scanf("%lf", &a); printf("\n Geben Sie eine Vermehrungsrate ein: "); scanf("%lf", &p); printf("\n Geben Sie die Abnahme der Vermehrungsrate ein: "); scanf("%lf", &q); printf("\n Geben Sie den Tag von dem die Population berechnet werden soll ein: "); scanf("%d", &i); if (i < 0) { return 0; } else { printf("\n bac(%d) = %d \n", i, bac(i)); return 0; } }
Und nun die Fehlermeldung mit der ich nichts anfangen kann...
bung 5\Bakteri... In function `double bac(int, double, double, double)`:
bung 5\Bakteri... 5 error: too few arguments to functiondouble bac(int, double, double, double) bung 5\\Bakteri... 24 error: at this point in file bung 5\\Bakteri... In function ìnt main()
:
bung 5\Bakteri... 5 error: too few arguments to function `double bac(int, double, double, double)
bung 5\Bakteri... 48 error: at this point in fileich hoffe mir kann jemand weiterhelfen...
-
Du definierst eine Funktion mit 4 Parametern, willst sie dann aber mit nur einem Parameter aufrufen. Das geht nicht.
-
Was ist daran unverständlich? bac erwartet 4 Parameter (int und 3x double), du gibst nur einen an. Welchen Wert sollen die anderen haben?
P.S.: Die Aufgabe kam mir doch gleich so bekannt vor:
http://www.google.com/search?hl=en&safe=off&tbo=d&biw=1920&bih=889&q=bac+site%3Awww.c-plusplus.net
-
erstmal danke für deine hilfe...
wenn ich jetzt alle 4 Parameter bei dem
printf("\n bac(%d) = %d \n", i, bac(i,a,p,q));
mit aufrufe krieg ich immernoch die Fehlermeldung von Zeile 24 was muss ich da denn ändern???
-
In Zeile 24 machst du den gleichen Fehler. Wieder Funktionsaufruf mit nur einem Parameter.
-
Irgendwo muss aber noch ein i-1 (i minus eins) hin.
-
hab jetzt die Berechnung durch eure hinweise und den link von SeppJ soweit hinbekommen...
jetzt stellt sich mir noch die Frage wie ich die Berechnungen von peak, return to initial und extinction mit einbauen kann???