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

Funkcja liniowa z interwałem ?

VPS Starter Arubacloud
0 głosów
325 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,340 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,340 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,340 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,340 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ź 324 wizyt
0 głosów
1 odpowiedź 470 wizyt
0 głosów
1 odpowiedź 308 wizyt

92,454 zapytań

141,262 odpowiedzi

319,094 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...