• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja liniowa z interwałem ?

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 27 czerwca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)
Cześć,

mam takie polecenie: Wyznacz wartości funkcji liniowej dla określonego przedziału dziedziny (z wybranym interwałem).

Nie bardzo wiem jak mam się za to zabrać: jedyne co wiem to trzeba podać wzór funkcji liniowej. Ale co to znaczy ten interwał?

Bardzo proszę o wskazówki, jakieś kroki co zrobić po kolei.
1
komentarz 27 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
Arytmetyka interwałowa. Pokrótce chodzi po prostu o błąd pomiaru.

1 odpowiedź

0 głosów
odpowiedź 28 czerwca 2020 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 29 czerwca 2020 przez Kacperek_code
 
Najlepsza
Najprawdopodobniej chodzi o obliczenie wartości funkcji dla wartości zmiennej równo od siebie oddalonych na osi.

Na przykład dla funkcji liniowej f(x) = 2x podajesz interesujący się przedział dziedziny, np. [2; 6] (zmienna większa lub równa 2 i mniejsza lub równa 6), później podajesz interwał, czyli różnicę pomiędzy kolejnymi wartościami zmiennej, np. 1,5, a na końcu obliczasz wartości funkcji dla poszczególnych elementów ciągu 2, 2 + 1,5, 2 + 1,5 + 1,5, ...

Jeśli rozpiętość przedziału nie będzie podzielna przez interwał, to już od autora zadania zależy, czy dodasz do wyniku wartość funkcji dla skrajnej wartości dziedziny.
komentarz 29 czerwca 2020 przez Kacperek_code Obywatel (1,690 p.)
Jeśli dobrze zrozumiałem- użytkownik na początku programu podaje przedział, np. wspomniane [2;6]. W drugim kroku podaje ten cały interwał, np. 1,5. Potem program ma mu policzyć wartości f(x) kolejno od 2 do 6 tak? Przy czym biorąc pod uwagę wspomnianą funkcje f(x) = 2x , to rozumiem, że to ma się liczyć tak: f(2) = 4 + 1,5 ?, czy f(2+1,5) = ... ? Myślisz, że użytkownik sam powinien podawać funkcję czy mogę z góry jakąś narzucić? Wielkie dzięki za pomoc!
1
komentarz 30 czerwca 2020 przez Patrycjerz Mędrzec (192,320 p.)

Przy czym biorąc pod uwagę wspomnianą funkcje f(x) = 2x , to rozumiem, że to ma się liczyć tak: f(2) = 4 + 1,5 ?, czy f(2+1,5) = ... ?

Trochę namieszałeś – pomyśl na spokojnie. Ciąg liczb 2, 2 + 1,5, 2 + 1,5 + 1,5, ... to kolejne wartości zmiennej funkcji. Podajesz je jako argumenty, czyli w ostateczności podstawiasz do wzoru. Np. f(2) = 4, f(3,5) = 7, f(5) = 10, ...

Myślisz, że użytkownik sam powinien podawać funkcję czy mogę z góry jakąś narzucić?

Nie wiem, czego oczekuje autor zadania, jednak podanie wzoru funkcji jest dosyć proste. Ma on postać f(x) = Ax + B, więc wystarczy poprosić użytkownika o wprowadzenie współczynników A i B.

komentarz 30 czerwca 2020 przez Kacperek_code Obywatel (1,690 p.)
Okej, w końcu zajarzyłem - tak mi się zdaje. Przykładowo: podaje przedział [0;4], podaje interwał 1,5. Program liczy dla jakiegoś wzoru funkcji, np. f(x) = 2x + 1.

f(0) = 2*0+1;

f(1,5) = 2*1,5+1

f(3) = 2*3+1

i teraz podany został przedział [0;4] - w tym momencie program ostatnią wartość jaką powinien policzyć jest f(3) tak ? ponieważ następna to już f(4,5) - poza podany zakres. Dobrze myślę?
1
komentarz 30 czerwca 2020 przez Patrycjerz Mędrzec (192,320 p.)
Wydaje mi się, że tak.
komentarz 30 czerwca 2020 przez Kacperek_code Obywatel (1,690 p.)
Dobra, wielkie wielkie dzięki za olbrzymią pomoc!
komentarz 1 lipca 2020 przez Kacperek_code Obywatel (1,690 p.)
#include <iostream>

double wartosci(double a, double b, double interwal, int x1, int x2)
{
    double wzor;

    for(float i = x1; i <= x2; i=i+interwal)
    {
        wzor = (a*i)+b;
        std::cout << "f" << "(" << i << ") = " << wzor << "\n";
    }
    return wzor;
}

int main()
{
    double a, b, interwal;
    int x1,x2;

    std::cout << "Podaj a: ";

    while(!(std::cin >> a ))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Podano inna wartosc niz liczba ! Prosze podawac liczby !\n";
        std::cout << "Podaj a: ";
    }

    std::cout << "Podaj b: ";

    while(!(std::cin >> b ))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Podano inna wartosc niz liczba ! Prosze podawac liczby !\n";
        std::cout << "Podaj b: ";
    }

    std::cout << "Podaj przedzial: ";

    std::cout << "Podaj x1: ";

    while (!(std::cin >> x1))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Podano inna wartosc niz liczba ! Prosze podawac liczby ! \n";
        std::cout << "Podaj przedzial (x1): ";
    }

    std::cout << "Podaj x2: ";

    while (!(std::cin >> x2))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Podano inna wartosc niz liczba ! Prosze podawac liczby ! \n";
        std::cout << "Podaj przedzial (x2): ";
    }

       std::cout << "Podaj interwal: ";

    while (!(std::cin >> interwal))
    {
        std::cin.clear();
        std::cin.ignore(1000, '\n');
        std::cout << "Podano inna wartosc niz liczba ! Prosze podawac liczby ! \n";
        std::cout << "Podaj interwal: ";
    }

    std::cout << "\n";
    std::cout << "Wartosci funkcji wynosza kolejno: \n";
    wartosci(a,b,interwal,x1,x2);

    std::cin.ignore();
    std::cin.get();
    return 0;
}

Wymodziłem coś takiego. Nawet działa. Jak oceniasz? Może być?

komentarz 1 lipca 2020 przez Kacperek_code Obywatel (1,690 p.)

Zrobiłem jeszcze schemat blokowy - jeśli mógłbyś zerknąć czy ma to sens, będę Ci bardzo bardzo wdzięczny!

1
komentarz 1 lipca 2020 przez Patrycjerz Mędrzec (192,320 p.)

Kod zapewne działa poprawnie, ale mam kilka uwag:

  1. Dlaczego skrajne wartości dziedziny są całkowite? Nie lepiej zrobić je także typu `double`?
  2. Te pętle zabezpieczające odczyt danych można przenieść do odrębnej funkcji, gdyż sporo kodu się tam powtarza.
  3. Nie rozumiem, czemu zmienna iteracyjna `i` jest typu `float`. Dodajesz do niej wartość `interwal`, co może skutkować utratą dokładności. Można po prostu zmienić jej typ na `double`.
  4. Wartość zwracana z funkcji `wartosci` jest niepotrzebna. Wystarczy typ `void`.

Schemat blokowy wygląda dobrze, chociaż w bloku odczytu nie podajesz wartości `wzor`.

komentarz 2 lipca 2020 przez Kacperek_code Obywatel (1,690 p.)
Działa poprawnie, ale cenne rady wezmę pod uwagę. Faktycznie pisząc program z pośpiechu nie zwróciłem uwagi, ,że tam gdzie powinien być typ double jest float i int. Oczywiście pętle zabezpieczające również muszę w końcu przenieść do funkcji. Dziękuję za pomoc!

Podobne pytania

0 głosów
1 odpowiedź 344 wizyt
0 głosów
1 odpowiedź 486 wizyt
0 głosów
1 odpowiedź 308 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...