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:
$$x_0=\frac{-b}{a}$$
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 $$a \not= 0$$. 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 $$a \not= 0$$, 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: $$x \in (x_0, \infty)$$, a wartości ujemne $$x \in (-\infty,x_0)$$. 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 <iostream>
using namespace std;
int main()
{
dobule a, b;
int 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;
}
return 0;
}