wtorek, 14 marca 2017

Czy liczba jest pierwsza?

Algorytm sprawdzający czy liczba jest liczbą pierwszą?

Najprostszy test pierwszości wygląda następująco: dla danej liczby n należy sprawdzić, czy dzieli się ona kolejno przez 2, 3, aż do n−1. Jeśli przez żadną z nich się nie dzieli, oznacza to, że jest pierwsza.

Optymalizacja
Zamiast testować wszystkie liczby do n−1, wystarczy sprawdzić podzielność n przez liczby mniejsze lub równe sqrt(n).

Lista kroków

Specyfikacja algorytmu
Wejście:
n –  liczba naturalna badana na pierwszość, n > 1

Wyjście:
TAK, jeśli n jest pierwsze lub NIE w przypadku przeciwnym.

Elementy pomocnicze:
g – granica sprawdzania podzielności p, g należy do N
i – kolejne podzielniki liczby n, i należy do N

K01         g ← [√n]
K02         Dla i = 2,3,...,g wykonuj krok K03
K03         Jeśli n % i = 0, to Wypisz "NIE" i zakończ
K04         Wypisz "TAK"
K05         Zakończ


Schemat blokowy


Program w C++

#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
bool czy_pierwsza (int n)
{
  if (n<2)  return false;
  int g;
  int i;
  g=sqrt(n); // sqrt - pierwiastek kwadratowy 
  for (i=2;i<=g;i++)
    if (n%i==0)     return false; 
  return true;
}
int main()
{
  int n; // sprawdzana liczba
  cout<<"Podaj liczbe: ";
  cin>>n;

  if (czy_pierwsza(n)) //lub czy_pierwsza(n)==1
    cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
  else
    cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
  return 0;
}


sobota, 11 marca 2017

Algorytm sprawdzający czy ciąg jest rosnący

Algorytm sprawdzający czy ciąg jest rosnący


Algorytm sprawdza, czy wyraz następny jest większy od poprzedniego. Jeżeli kolejny element ciągu jest większy od poprzedniego, to ciąg jest rosnący.

List kroków

K01   Wczytaj n, szukana, T[0…n-1],
K02  Licznik pętli przyjmuje wartość 0,
K03  Dla i < n-1 wykonaj krok od K04 do K06
K04 Sprawdź czy T[i] >= T[i+1],
K05   Jeśli tak to napisz „NIE”, w przeciwnym razie 
K06 Jeśli nie to i = i+1,  Wypisz „TAK”.


Schemat blokowy

Rozwiązanie w C++

#include <iostream>
using namespace std;

int main() 
{
int n; //liczba elementów ciągu
cout << "Podaj liczbe elementow: "; cin >> n;

int t[n]; //tablica t - jednowymiarowa, n-elementowa
// wprowadzenie elementów ciągu do tablicy
for (int i=0; i<n; ++i) 
{
  cout << "Podaj element nr " << (i+1) << ": ";
  cin >> t[i];
}

// sprawdzanie, czy elementy w tablicy t są posortowane rosnąco 
bool rosnace = true;
for (int i=1; i<n; ++i) if (t[i-1] >= t[i]) rosnace = false;

// wypisanie wyniku
if (rosnace) cout << "Tablica jest rosnaca!" << endl; 
else cout<<"Ciag nie jest rosnacy "<<endl;
}

Rozwiązanie w arkuszu kalkulacyjnym EXCEL
Aby rozwiązać algorytm sprawdzający czy ciąg jest rosnący zaprojektowano arkusz, w którym użytkownik musi wprowadzić wartości 5 dowolnych elementów ciągu (do komórek leżących w zakresie B8:B12). 
Następnie w kolumnie C wprowadzono formułę wykorzystującą funkcję logiczną JEŻELI, która sprawdza czy element n+1 jest większy ni jego poprzednik n. 
=JEŻELI(B9>B8;"rosnący";"nie rosnący")
W kolumnie D sprawdzana jest wartość ciągu znaków z kolumny C. Ponownie wykorzystano funkcję logiczną Jeżeli:
=JEŻELI(C8="rosnący";0;1)
W komórce I7 wprowadzono formułę obliczającą sumę wartości w kolumny D
=SUMA(D8:D12)
Ostateczny wynik, który podaje informacje czy ciąg jest rosnący wyświetlany jest w komórce D15
=JEŻELI(I7=0;"CIĄG LICZB JEST ROSNĄCY";"CIĄG LICZB NIE JEST ROSNĄCY")

Opracowała: Ada Sz.






Algorytm obliczający miejsce miejsce zerowe funkcji

Algorytm obliczający miejsce miejsce zerowe funkcji

Nazwa funkcji liniowej pochodzi stąd, iż jej wykres jest linią prostą.
Wzór funkcji liniowej: 
f(x)=ax+b

Żeby narysować wykres funkcji liniowej, wystarczy wyznaczyć dwa punkty, które do niego należą.


Współczynnik kierunkowy „a”

Funkcja liniowa jest rosnąca jeżeli a > 0.
Funkcja liniowa  jest malejąca jeżeli a < 0.
Funkcja liniowa jest stała jeżeli a = 0.


Wyraz wolny „b”
Wyraz wolny jest również wartością funkcji liniowej w punkcie 0.



Miejsce zerowe
Miejsce zerowe funkcji liniowej obliczamy przyrównując wzór funkcji do zera.
0 = f(x) <=> 0 = ax + b


Lista kroków

K01  Wczytaj a i b
K02        Jeśli a<>0 , to idź do K06
K03
                x0  := - b/a
K04   Napisz " x0 = ", x0
K05  Zakończ
K06       Jeżeli b<>0  to Napisz "Równanie ma nieskończenie wiele rozwiązań" 
              w przeciwnym razie Napisz "Brak miejsca zerowego"
K07      Zakończ


Schemat blokowy

Rozwiązanie w C++
#include<iostream>
using namespace std;
int main()
{
  float a;
  float b;
  float x;
  float y;
cout << "         Rozwiazuje rownanie liniowe\n";
cout << "                  y=ax+b\n\n\n\n\n";      
  cout << "Podaj a: ";
  cin >> a;
  cout << "Podaj b: ";
  cin >> b;
cout<<"\n--------------------------------\n\n";
  if(a!=0) 
  {
  x=-b/a; 
   cout<<"x = "<<x;
  }
else
{
if(b!=0) cout<<"Rownanie nie ma rozwiazan";
else cout<<"Rownanie ma nieskonczenie wiele rozwiazan";
}
cout<<"\n";  
  }

Rozwiązanie w arkuszu kalkulacyjnym EXCEL



Aby w arkuszu kalkulacyjnym EXCEL obliczyć miejsce zerowe funkcji należy zastosować formułę, wykorzystującą funkcję logiczną „JEŻELI”.
W komórce C11 wpisano formułę:
=JEŻELI(B6=0;JEŻELI(B7=0;"Funkcja ma nieskończenie wiele miejsc zerowych.";"Funkcja nie ma miejsc zerowych.");-B7/B6)

Opracował Mikołaj M.