Funktionen, Vorbedingung, Nachbedingung
-
Hallo, habe hier 2 Aufgaben, zu denen ich mal Hilfe bräuchte, da ich mir nicht sicher bin. danke
- Hier soll man die Probleme angeben von den gegebenen Funktionen (falls es welche gibt) und Vor- und Nachbedingung bestimmen
a) bool is_even (const int i)
{
if (i % 2 == 0) return true;;
}b) double inverse (const double x)
{
double result;
if (x != 0.0)
result = 1.0 /;
}2)Schreibe eine Funktion mit Vorbedingung:
"return value is true if and only if n is prime"zu 1)a)
Sieht für mich richtig aus. Immer wenn eine Zahl i (außerhalb der Fkt) eingegeben wurde und sie gerade ist, kommt bool-typ true heraus.
Vorbedingung: i=>0 (oder beliebig? Ich weiß nicht ob eine negative Zahl mod 2 definiert ist)
Nachbedingung: true für i=evenb) Sehe keine Fehler.
Vor: x beliebig, weil in der Funktion ja schon die Bedingung auftaucht, x ungleich 0
Nach: Inverse von xbool is_prime (unsigned int n)
{
unsigned int n;
unsigned int d;
for (d=2; n%d != 0)
return true;
}
-
Zu 1.a) Aha, und was passiert wenn die Zahl nicht gerade ist?
Zu 1.b) Du siehst da keine Fehler? Ernsthaft?
Zu 2) Richtige Idee, aber das ist weit entfernt von gültigem C++ Code.
Also: Erst mal deinen Compiler befragen, dann das Forum. Der würde dir nämlich alle Fragen beantworten.
PS: Wir haben [ cpp ] Code-Tags:
#include <iostream> int main() { std::cout << "I like colors!"; }
-
cooky451 schrieb:
Also: Erst mal deinen Compiler befragen, dann das Forum. Der würde dir nämlich alle Fragen beantworten.
Dein compiler erklärt Dir Vor- und Nachbedingungen? Wow den will ich auch...
-
cooky451 schrieb:
PS: Wir haben [ cpp ] Code-Tags:
Warum macht die das Forum nicht automatisch? Wäre doch mal eine nette Herausforderung, Code in Text zu finden.
-
Ok, nochmal.
1a)
#include <iostream> bool is_even (const int i) { if (i % 2 == 0) return true; std::cout << i << " is even" else return false; std::cout << i << " is odd"; }
b)
#include <iostream> double inverse (const double x) { double result; if (x != 0.0) result = 1.0 / x; return result; std::cout << result << " is the inverse of x"; else std::cout << "Division by zero"; }
bool is_prime (unsigned int n) { unsigned int n; unsigned int d; if (d=2; n%d != 0) return true; std::cout << n << " is prime" else std::cout << n << " is not prime" }
-
Die Ausgaben sind nicht nur unschön, aber auch an den völlig falschen Stellen. Wenn eine Funktion zurückkehrt, wird logischerweise der Code dahinter nicht mehr aufgeführt. c) ist immer noch kein gültiges C++. Teste das doch bitte erst mal alles mit einem Compiler. (Wenn du keinen hast nimm ideone.com)
-
Ok, danke. Leider bekomme ich es irgendwie nicht hin. Compiler sagt immer "expected if before else". (Habe die cout Zeile mit der return zeile vertauscht)
Kannst du mir mal bitte sagen wie ich das bei der a richtig mache? denke den rest bekomme ich dann auch hin.
-
Indem du das machst, was der Compiler dir sagt. Vielleicht rückst du dein Code mal ein wenig ein und siehst den Fehler selbst. Da ich es aber nicht vermute:
bool is_even (int i) { if (i % 2 == 0) return true; std::cout << i << " is even" else return false; std::cout << i << " is odd"; }
Eingerückt sieht man, dass vor dem else kein if ist, denn du hast als Anweisung das std::cout dazwischen. Vor einem else muss aber direkt das if sein. Wenn du jetzt noch Klammern hinzufügt und die returns mit den std::couts tauschst, funktioniert es.
bool is_even (int i) { if (i % 2 == 0) { std::cout << i << " is even" return true; } else { std::cout << i << " is odd"; return false; } }
-
Danke, jetzt ist es mir klar, habe das mit den Klammern nicht gewusst/gesehn und das mit return ebenfalls. Werde mich wohl mal mehr mit beschäftigen, aber der Rest sollte klappen