Styl wygląda znajomo, być może mijamy się na korytarzu
.
Zadanie
Masz napisać funkcję
Kod: Zaznacz cały
auto mniejsze(int a, int b, int c, int d) -> bool;
Która zwraca wartość
true, gdy
\(\displaystyle{ \frac{a}{b} < \frac{c}{d}}\) oraz
false w przeciwnym przypadku (no chyba że w innej kolejności podajemy argumenty, ale wydaje mi się, że tylko taka interpretacja pasuje do testów).
Działanie funkcji test_mniejsze
Funkcja
test_mniejsze sprawdza jej poprawność poprzez "wywoływanie funkcji" (tak naprawdę jest to makro preprocesora: )
assert.
Działa ona w bardzo prosty sposób:
- jeśli wartość, którą otrzyma jako argument to true (bądź inna, która konwertuje się do true, np. niezerowa wartość typu int), nic się nie dzieje
- jeśli jednak przekazana jej zostanie wartość false, przerywa ona działanie programu na wierszu z jej "wywołaniem".
Przykład
W pierwszym wierszu
"wywoływana" jest funkcja
assert dla wartości zwróconej przez wywołanie funkcji
mniejsza dla argumentów
1, 3, 1, 2, czyli sprawdzane jest, czy napisana przez Ciebie funkcja "stwierdzi', że
\(\displaystyle{ \frac{1}{3} < \frac{1}{2}}\) (zakładam, że tak ma działać ta funkcja, ale równie dobrze najpierw mogłyby być podawane liczniki, póżniej mianowniki, czyli to wywołanie mogłoby znaczyć
\(\displaystyle{ \frac{1}{1}<\frac{3}{2}}\)).
Jeśli napisana przez Ciebie funkcja stwierdzi, że to nieprawda, program się zatrzyma z komunikatem podobnym do poniższego:
Kod: Zaznacz cały
c: c.cpp:10: void test_mniejsze(): Assertion `mniejsze( 1, 3, 1, 2)' failed.
[1] 16404 abort (core dumped) ./c
Miejsce w kodzie
Funkcja
mniejsze powinna być widoczna w funkcji
test_mniejsze. Zakładając, że piszesz wszystko w jednym pliku, znaczy to tyle, że:
- albo powinieneś zdefiniować funkcję mniejsze przed funkcją test_mniejsze
- albo tylko zadeklarować tę funkcję przed funkcją test_mniejsze, a jej ciało napisać w dowolnym miejscu po tej deklaracji (np. na końcu pliku)
Poza tym powinieneś wywołać funkcję
test_mniejsze w funkcji
main (lub pośrednio, przez jakąś inną funkcję.
Szkielet programu
Kod: Zaznacz cały
#include <cassert>
// deklaracja funkcji mniejsze, by funkcja ta byla widoczna
// w funkcji test_mniejsze
auto mniejsze(int a, int b, int c, int d) -> bool;
auto test_mniejsze(void) -> void
{
assert(mniejsze( 1, 3, 1, 2));
assert(mniejsze(-1,-3,-1,-2));
assert(mniejsze(-1, 2, 1, 3));
assert(mniejsze(-1, 2,-1,-3));
assert(mniejsze( 1,-2, 1, 3));
assert(mniejsze( 1,-2,-1,-3));
// dodatkowy test, który sprawdza, czy
// -1/-3 *nie* jest mniejsze od 1/-2, czyli:
// -1/-3 >= 1/-2
// (zwroc uwage na wykrzyknik - logiczna negacje)
assert(!mniejsze( -1,-3,1,-2));
}
int main()
{
// wywolujemy test
test_mniejsze();
return 0;
}
auto mniejsze(int a, int b, int c, int d) -> bool
{
// tutaj trzeba wpisac wlasciwy kod funkcji mniejsze
return false;
}