Programowanie i algorytmy

Funkcja liniowa

Zad. 1. Napisz program, który realizuje następujące zadanie:

Rozważmy funkcję liniową y = ax + b i następujące opcje:

1 - program wylicza miejsce zerowe funkcji liniowej

2 - program określa monotoniczność funkcji liniowej

3 - program określa dziedzinę i zbiór wartości funkcji liniowej

4 - program podaje wartości dodatnie i ujemne funkcji liniowej

5 - program podaje punkt przecięcia się z osią Y

6 - program wylicza argument dla danej wartości

7 - program wylicza wartość dla danego argumentu

 

Rozwiązanie:

Obliczenie miejsca zerowego zależy od tego, czy prosta jest równoległa do osi X, czy nie. Gdy nie jest równoległa, tzn. musi przeciąć oś OX w dokładnie jednym miejscu. Mówi nam o tym współczynnik kierunkowy "a", który w tym przypadku jest różny od zera. Wtedy obowiązuje wzór:

{tex}x_0=\frac{-b}{a}{/tex}

Gdy funkcja jest równoległa (dla a = 0), mamy dwie możliwości, gdy leży na osi OX (b = 0), lub na niej nie leży {tex}a \not= 0{/tex}. Gdy leży na osi OX, to oczywiście każdy punkt jest miejscem zerowym, w przeciwnym razie tych miejsc nie ma.

Monotoniczność zależy od współczynnika kierunkowego. Gdy

dla a < 0 funkcja jest malejąca

dla a = 0 funkcja jest stała

dla a> 0 funkcja jest rosnąca.

Dziedziną funkcji liniowej jest zbiór liczb rzeczywistych (chyba, że ją okroimy, ale w tym zadaniu to nie dotyczy), natomiast zbiorem wartośći jest zbiór liczb rzeczywistych dla {tex}a \not= 0{/tex}, oraz "b", gdy a = 0.

Wartości dodatnie, to ta część wykresu, która znajduje się nad osią X, np. dla a > 0, wartości dodatnie należą do przedziału: {tex}x \in (x_0, \infty){/tex}, a wartości ujemne {tex}x \in (-\infty,x_0){/tex}. Podobnie rozpatrujemy wartości dodatnie i ujemne dla a < 0 i a = 0.

Punktem przecięcią się z osą Y jest wartość "b".

Dla zadania 6 podajemy wartość y z klawiatury, a program wylicza x na podstawie zadanego wzoru y = ax + b.

W zadaniu 7 podajemy wartość argumentu x, a program wylicza y.

A oto program:

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
  float a, b;
  short opcja;
 
  cout<<"Podaj współczynnik kierunkowy: ";
  cin>>a;
  cout<<"Podaj wyraz wolny: ";
  cin>>b;
  system("cls"); //czyszczenie ekranu
 
  if(b>=0)
    cout<<"Rozpatrywana funkcja: y = "<<a<<"x + "<<b<<endl;
  else
    cout<<"Rozpatrywana funkcja: y = "<<a<<"x "<<b<<endl;
 
  cout<<endl<<endl;  
 
  cout<<"1 - miejsce zerowe funkcji liniowej"<<endl;
  cout<<"2 - monotoniczność funkcji liniowej"<<endl;
  cout<<"3 - dziedzina i zbiór wartości funkcji liniowej"<<endl;
  cout<<"4 - wartości dodatnie i ujemne funkcji liniowej"<<endl;
  cout<<"5 - punkt przecięcia się z osią Y"<<endl;
  cout<<"6 - wyznaczenie argumentu dla danej wartości"<<endl;
  cout<<"7 - wyznaczenie wartości dla danego argumentu"<<endl;
  cout<<endl<<"Wybierz opcję: ";
  cin>>opcja;
 
  switch(opcja)
  {
    case 1:
      if(a!=0)
        cout<<"Miejsce zerowe = "<<(-b/a)<<endl;
      else
        if(b==0)
          cout<<"Funkcja ma nieskończenie wiele miejsc zerowych"<<endl;
        else
          cout<<"Funkcja nie ma miejsc zerowych"<<endl;
    break;
 
    case 2:
      if(a > 0)
        cout<<"Współczynnik kierunkowy ma wartość "<<a<<", więc funkcja jest rosnąca"<<endl;
      else
        if(a < 0)
          cout<<"Współczynnik kierunkowy ma wartość "<<a<<", więc funkcja jest malejąca"<<endl;
        else
          cout<<"Współczynnik kierunkowy jest równy 0, więc funkcja jest stała"<<endl;
    break;
 
    case 3:
      cout<<"Dziedziną funkcji liniowej jest zbiór liczb rzeczywistych"<<endl;
      if(b==0)
        cout<<"Zbiorem wartość jest tylko jeden element ZW = {"<<b<<"}"<<endl;
      else
        cout<<"Zbiorem wartości jest zbiór liczb rzeczywistych"<<endl;
    break;
 
    case 4:
      if(a == 0)
      {
        if(b > 0)
          cout<<"Wszystkie wartosci są dodatnie"<<endl;
 
        if(b < 0)
          cout<<"Wszystkie wartości sa ujemne"<<endl;
 
        if(b==0)
          cout<<"Wszystkie wartości są równe zero"<<endl;
 
      }
      else
        if(a > 0)
        {
          cout<<"Wartości dodatnie: x należy do ("<<-b/a<<";+infinity)"<<endl;
          cout<<"Wartości ujemne: x należy do (-infinity;"<<-b/a<<")"<<endl;
        }
        else
        {
 
          cout<<"Wartości dodatnie: x należy do (-infinity;"<<-b/a<<")"<<endl;
          cout<<"Wartości ujemne: x należy do ("<<-b/a<<";+infinity)"<<endl;
        }
    break;
 
    case 5:
      cout<<"Funkcja przecina się z osią Y w punkcie: (0, "<<b<<")"<<endl;
    break;
 
    case 6:
      cout<<"Podaj wartość y: ";
      double y;
      cin>>y;
 
      if(a!=0)
        cout<<"Dla y = "<<y<<" x = "<<(y-b)/a<<endl;
      else
        if(y == b)
          cout<<"x należy do zbioru liczb rzeczywistych"<<endl;
        else
          cout<<"Nie istnieje wartość x dla tej wartości y"<<endl;
    break;
 
    case 7:
      cout<<"Podaj wartość x: ";
      double x;
      cin>>x;
      cout<<"Dla x = "<<x<<" y = "<<a*x+b<<endl;
      break;
 
    default:
      cout<<"Wybrałeś nieprawidłową opcję!"<<endl;
  }
 
  system("PAUSE");
  return EXIT_SUCCESS;
}