Ciąg uporządkowany, funkcja bool

0

Mam następujące polecenie:
Napisać klasę T której obiekty reprezentują uporządkowane ciągi liczb typu double o długości nie
większej niż 100.
W ramach tej klasy mam między innymi napisać funkcję bool która zwraca przynależność, zadanie to rozwiązywaliśmy na zajęciach nie rozumiem jednak jaką funkcję pełni tutaj zmienna c ?

class T {
public:
T() {}
 // tworzy nowy pusty ci¹g
void dodaj(double x) {
    v.push_back(x);
    for(int i=v.size()-1; i>0; i--) {
        if(v[i]<v[i-1])
            swap(v[i],v[i-1]);
    }
}
bool nalezy(double x, int a, int b) {  //zwraca true jeœli x nale¿y do v[a] .. v[b]
    if(b<a)
        return false;
    int c=(a+b)/2;
    if(v[c]==x)
        return true;
    if(v[c]<x)
        return nalezy(x, c+1, b);
    return nalezy(x, a, c-1);
}
bool nalezy(double x) {
    return nalezy(x, 0, v.size()-1);
}
0

c to jest http://www.matematykam.pl/srednia_arytmetyczna.html

ale te nazwy zmiennych sa tragiczne, bo wlasnie trzeba domyslac sie co to jest zamiast c nazwalbym to arithmetic_progression albo arithmetic_average

0

domyśliłam się, że jest to średnia artymetyczna liczby wyrazów ciągu, ale w jakim celu ją definiujemy w funkcji sprawdzajacej przy dany wyraz należy do ciągu ?

0

W funkcji:

bool nalezy(double x, int a, int b) {  //zwraca true jeœli x nale¿y do v[a] .. v[b]
    if(b<a)
        return false;
    int c=(a+b)/2;
    if(v[c]==x)
        return true;
    if(v[c]<x)
        return nalezy(x, c+1, b);
    return nalezy(x, a, c-1);
}

x to szukana wartość
a to lewa granica przedziału
b to prawa granica przedziału
c to indeks sprawdzanej wartości, używany także do podzielenia przedziału na dwie części

Sam sposób obliczenia średniej jest błędny, bo podatny na przepełnienie, ale pewnie na studiach nikt się takimi "szczegółami" nie przejmuje. Szczegóły tutaj: https://en.wikipedia.org/wiki/Binary_search_algorithm#Implementation_issues

0

ok dzięki już rozumiem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1