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

Funkcja liniowa z interwałem ?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
564 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,020 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ź 655 wizyt
0 głosów
1 odpowiedź 775 wizyt
0 głosów
1 odpowiedź 388 wizyt

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2704p. - Tomasz Bielak
  5. 2678p. - Łukasz Siedlecki
  6. 2627p. - CC PL
  7. 2485p. - Marcin Putra
  8. 2443p. - rucin93
  9. 2418p. - Michal Drewniak
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2127p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...