Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

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:

$$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;
}