poniedziałek, 10 kwietnia 2017

Zamiana ułamka dziesiętnego na zwykły

Zasady zmiany
Ułamki dziesiętne zamieniamy na ułamki zwykłe, zapisując je za pomocą kreski ułamkowej, tak jak się czyta. W wyniku zostawia się ułamek nieskracalny tzn. w miarę możliwości należy skrócić ułamek.
C++
#include<iostream>
using namespace std;
int main()
{
  float num, origNum, rem = 1;
  int den = 1, i, count=0, gcd=1;
cout << "wprowadz cyfre dziesietna: ";
 cin >> origNum;
num = origNum - static_cast<int>(origNum);  
 if (num > 0.1)
    {
        while ( (rem > 0.1) )
        {
            num = num * 10;
            rem = num - static_cast<int>(num);
            count++;
        }

      for (i = 1; i <= count; i++)  
        {
            den = den * 10;
        }                                                             
for (i = 2; i <= num|| i<=rem; i++)
        {
            if( (static_cast<int>(num) % i == 0) && (den % i == 0) )
            {
                gcd = i;
            }   
        }

        cout << (static_cast<int>(origNum)) << " and " << (static_cast<int>(num))/gcd << "/" << den/gcd;
    }
    else
        cout << (static_cast<int>(origNum));

    return 1;   
}

Program w Excel


Wpisujemy w pole C7 liczbe dziesiętną która automatycznie zamienia nam liczbe dziesiętną w ułamek zwykły.

Opracował: Daniel Gleba

Zamiana systemu dziesiątkowego na binarny

System binarny, inaczej dwójkowy -pozycyjny system liczbowy, w którym podstawą jest liczba 2. Do zapisu liczb potrzebne są tylko dwie cyfry: 0 i 1.
Używał go już John Napier w XVI wieku, przy czym 0 i 1 zapisywał jako a i b. Ojcem nowoczesnego systemu binarnego nazywany jest Gottfried Wilhelm Leibniz, autor opublikowanego w 1703 roku artykułu Explication de l'Arithmétique Binaire.

Wykorzystanie systemu binarnego 
Powszechnie używany w elektronice cyfrowej, gdzie minimalizacja liczby stanów (do dwóch) pozwala na prostą implementację sprzętową odpowiadającą zazwyczaj stanom wyłączony i włączony oraz zminimalizowanie przekłamań danych. Co za tym idzie, przyjął się też w informatyce.

System dziesiątkowy
Pozycyjny system liczbowy, w którym podstawą jest liczba 10; do zapisu liczb stosuje się 10 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Liczby zapisuje się jako ciąg cyfr, z których każda jest mnożnikiem kolejnej potęgi liczby 10. Niekiedy dla poprawy czytelności cyfry grupuje się po trzy (Okcydent) lub cztery (część Orientu). Część całkowitą i ułamkową oddziela separator dziesiętny.

Zmiana systemu dziesiątkowego na binarny
Liczba którą będziemy konwertować to 67. Sposób jest następujący: liczbę dzielimy przez 2 i jeżeli wynik będzie z resztą: zapisujemy 1, jeżeli nie - zapisujemy 0. Następnie znowu dzielimy przez 2 to co zostało z liczby, ale bez reszty. Taki proces trwa, aż zostanie 0 (zero). Otrzymane zera i jedynki zapisujemy w odwrotnej kolejności. Wyjaśni się to wszystko na konkretnym przykładzie. Zatem do dzieła: 67:2 |133:2 |116:2 |08:2 |04:2 |02:2 |01:2 |1   Co daje 1000011. Jak widzimy, wynik zgadza się. Widać również, że zawsze na samym końcu po podzieleniu będzie 0, zatem ostatnia liczba jest równa 1. Jeden podzielić na dwa zawsze wyjdzie 0,5 zatem wynik z resztą. Co za tym idzie - pierwsza cyfra w zapisie dwójkowym jest ZAWSZE RÓWNA 1. Nie tylko matematycznie można to udowodnić. W elektronice, również musi być taka postać rzeczy. Przyjęliśmy bowiem, że dla komputera brak przepływu prądu oznacza "0", natomiast przepływ prądu - "1". Sygnał zatem nie może zaczynać się od "0", gdyż jest to brak sygnału. Procesor nie wie, czy sygnał już się zaczął, czy jeszcze nie. Początek musi być "1" (jest sygnał).

Wg mnie najprostszym sposobem jest Dzielić za każdym razem przez 2 i wpisywać resztę 1 lub 0. Przykład: liczba 125 w systemie binarnym to 1111101 gdyż: 125:2=62 reszty 1 (62,5czyli 62 i 63 = 125) 62:2 = 31 reszty 0 31:2 = 15 reszty 1 15:2 = 7 reszty 1 7:2 = 3 reszty 1 3:2 = 1 reszty 1 1:2 = 0 reszty 1. Teraz wynik czytamy OD DOŁU DO GÓRY, czyli 1111101.
Teraz zamiana liczb binarnych na dziesiętną: Zaczynając od tyłu zapisujemy każdą potęgę liczby 2 zaczynając od 1 (1 2 4 8 16 32 64 128, itd) a następnie możymy odpowiednio wartości przez 0 lub 1. Następnie sumujemy wartości. Np 11101100 = 236 gdyż: lecąc od tyłu: 0*1 + 0*2 + 1*4 + 1*8 + 0*16 + 1*32 + 1*64 + 1*128 = 4+8+32+64+128= 236.
Co to jest system dwójkowy? Mówiąc najprościej jest to taki system, który do zapisu informacji wykorzystuje tylko 2 cyfry: 0 i 1, gdzie 0 oznacza brak impulsu a 1 oznacza przepływ impulsu. 

Kroki:
W pierwszej kolejności wpisuję liczbę jaką chcę zamienić, w tym przypadku jest to liczba 191919. Następnie tworzę dwie tabelki: LICZBA oraz RESZTA. Przechodzimy w komórkę A5 która będzie podstawą naszego rozwiązania. Pobieramy wybraną wcześniej liczbę, czyli wpisujemy w komórkę A5 komendę =G5 (czyli komórkę w której znajduje się nasza liczba). Kolejnym krokiem będzie przejście w niższą komórkę gdzie wpisujemy komendę: =JEŻELI(ORAZ(A5<>0;A5<>"");LICZBA.CAŁK(A5/2);"")  Teraz przechodzimy do obliczenia reszty. Wchodzimy w komórkę B5 w której wpisujemy komendę:
=JEŻELI(ORAZ(A5<>0;A5<>"");MOD(A5;2);"")       
Ostatnim krokiem jest po prostu skopiowanie obu komórek, aż dojdziemy do wartości 0. Naszym wynikiem jest liczba: 101110110110101111        

Rozwiązanie w Excel:
                       

Opracował: Michał A.


Algorytm Newtona-Raphsona

Interpretacja geometryczna pierwiastka kwadratowego 
Szukamy długości boku kwadratu o zadanym polu, poprzez jego przybliżanie kolejnymi prostokątami o tym samym polu.

Ponieważ dana figura ma być kwadratem więc wartości x i p/x powinny być sobie równe. Jeśli nie są, to szukane rozwiązanie jest położone między nimi, czyli możemy przyjąć, że jest to średnia arytmetyczna tych dwóch wielkości.A zatem możemy wyznaczyć kolejne przybliżenia pierwiastka.
 
Mamy za zadanie obliczyć wartość pierwiastka kwadratowego z liczby dodatniej
Nie możemy jednak posłużyć się funkcją standardową SQRT. Na szczęście jeden z takich przepisów został podany ponad 300 lat temu przez Newtona i Raphsona. Przepis Newtona – Raphsona: Jako pierwsze przybliżenie bierzemy np.1, a jako kolejne – wyrażenie: średnią arytmetyczną z poprzedniego przybliżenia i liczby podzielonej przez poprzednie przybliżenie.
Skończymy ciąg obliczeń wtedy, gdy różnica między kolejnymi przybliżeniami będzie nie większa niż podana dokładność.

Wzór na ciąg kolejnych przybliżeń ma postać:
Lista kroków:
  1. Pobieramy wartość liczby podpierwiastkowej p oraz dokładność obliczeń Eps
  2. Przyjmujemy pierwsze przybliżenie poszukiwanego rozwiązania np. x=1
  3. Jeśli |x – p/x|<=Eps  to idziemy do 6.
  4. Obliczamy kolejne przybliżenie x:= (x+p/x)/2
  5. Przechodzimy do 3.
  6. Wypisujemy wartość x.
  7. Koniec

Schemat blokowy:
C++
#include <iostream> 
#include <math.h>   
using namespace std;   
int main() 
{     
float A,a;     
float eps = 0.0001;         
cin >> A;     
a = A/2;         
while(fabs(A/a-a)>eps)     
{         
a = (A/a+a)/2;    
 }         cout << a;     
return 0; 
}

Program w Excel




Opracował: Mateusz Cz.


Algorytm Euklidesa

Algorytm Euklidesa -algorytm wyznaczania największego wspólnego dzielnika dwóch liczb (NWD). Został opisany przez greckiego matematyka, Euklidesa w jego dziele „Elementy”, w księgach siódmej oraz dziesiątej
NWD - największy wspólny dzielnik (ang. GCD - Greatest Common Divisor) liczb a i b jest największą liczbą naturalną, która jednocześnie dzieli a i b bez reszty.
Euklides zauważył, że NWD liczb a i b dzieli również ich różnicę.

Schemat blokowy


C++

#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char ** argv)
{
int a, b, c;
cin >> a;
cin >> b;
if (a != b)
{
while (a%b != 0)
{
c = a;
a = b;
b = c % b;
}
cout << b << endl;
}
else
cout << a << endl;
}

Rozwiązanie w Excel

W komórkach  F4 i F5 wpisujemy  dowolne liczby  „a” i „b”
W komórki arkusza wpisano formuły:
A3=F4  ;
B3=F5 ; 
C3=JEŻELI(B3=0;A3;"") 
A4=JEŻELI(ORAZ(B3>0;B3<>"");B3;"")  - kopiujemy wprowadzoną formułę do wiersza np. 300
B4=JEŻELI(ORAZ(B4>0;B4<>"");MOD(A4;B4);"")  - kopiujemy wprowadzoną formułę do wiersza np. 300

Jeżeli w kolumnie „C” pojawi się liczba to jest ona NWD  naszych liczb „a” i „b”

Opracował: Eliasz M.

Czy liczba jest pierwsza?

Test pierwszości to algorytm określający, czy dana liczba jest pierwsza, czy złożona. Nie jest to równoważne znalezieniu jej rozkładu na czynniki pierwsze. W obecnej chwili nie są znane efektywne algorytmy rozkładu na czynniki pierwsze, natomiast testy pierwszości można przeprowadzać bardzo szybko.
 Metoda naiwna
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.

Zamiast testować wszystkie liczby do n−1, wystarczy sprawdzić podzielność n przez liczby mniejsze lub równe sqrt(n).
Kolejne udoskonalenie polega na sprawdzaniu podzielności n jedynie przez liczby pierwsze mniejsze lub równe sqrt(n). Ich listę łatwo możemy uzyskać metodą sita Eratostenesa. Metoda ta wciąż wymaga wykonania dużej liczby (sqrt(n)) dzieleń, co oznacza, że już dla 50-cyfrowych liczb pierwszych jest niewykonalna na współczesnych komputerach


Lista kroków:

K01:g ← [√n]
K02:Dla i = 2,3,...,g wykonuj krok K03
K03: Jeśli n % i = 0, to pisz NIE i zakończ
K04:Pisz 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;
  g=sqrt(n);

  for(int i=2;i<=g;i++)
    if(n%i==0)
      return false; 
  return true;
}

int main()
{
  int n;

  cout<<"Podaj liczbe: ";
  cin>>n;

  if(czy_pierwsza(n))
    cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
  else
    cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;

  return 0;
}

Rozwiązanie w Excel


W komórce E5 podajemy liczbę, której pierwszość chcemy zbadać.
Do komórki H5 należy wpisać formulę:

=JEŻELI(LUB(E5=2;E5=1);"Liczba pierwsza";JEŻELI(ORAZ(MOD(E5;WIERSZ(ADR.POŚR("2:"&ZAOKR.GÓRA(E5^0,5;0))))<>0);"Liczba pierwsza";"Liczba nie jest pierwsza"))

W komórce H5 pojawi się informacja czy liczba jest pierwsza.

Opracował: Maciej G. 

wtorek, 4 kwietnia 2017

Algorytm wyszukujący wartość max w ciągu liczb

// post w trakcie tworzenia

Pierwiastki równania kwadratowego

Równanie kwadratowe posiada następującą postać:
x2 + bx + c = 0,  a ≠ 0
gdzie x to poszukiwana niewiadoma, a a, b, c to współczynniki równania.
Pierwiastkiem równania jest taka wartość niewiadomej x, która podstawiona w jej miejsce do równania spełnia je. Równanie kwadratowe często posiada dwa pierwiastki rzeczywiste. Jeśli istnieje tylko jedna taka liczba, to mówimy, iż jest ona pierwiastkiem podwójnym.

Lista kroków

Specyfikacja: 
Dane: a, b, c є R (a≠0)
Wynik:  x₁, x₂ ϵR


K0: Wczytaj dane: a, b i c;
K1: Jeżeli D>0 to x₁=(-b-√delta)/2a, x₂=(-b+√delta)/2a;
K2: Jeżeli D=0 to x₁= x₂= -b/2a
K3: Jeżeli D<0 to równanie nie ma rozwiązania.

Schemat blokowy



Rozwiązanie w C++

#include <iostream>
#include <math.h>
using namespace std;
int main()
   double a, b, c, delta, x1, x2;
    cout << "Podaj wspolczynnik a rownania kwadratowego: "; cin >> a;
    cout << "Podaj wspolczynnik b rownania kwadratowego: "; cin >> b;
    cout << "Podaj wspolczynnik c rownania kwadratowego: "; cin >> c;
    delta = b * b -( 4 * a * c );
    if ( delta < 0 )
    { 
       cout << "Rownanie nie ma rozwiazania";
        return 0;
      }
    if (delta == 0 )
    { 
       cout << "Rownanie ma jedno rozwiazanie ";
        cout << "x_0 = " <<- b /( 2 * a );
        return 0; 
    }
    delta = sqrt( delta );
    if ( b > 0 )
    { 
        x1 =( - b - delta ) /( 2 * a );
        x2 = c /( a * x1 );
     }
    else
    {  
        x2 =( - b + delta ) /( 2 * a );
        x1 = c /( a * x2 );
    }
    cout << "Rownanie ma dwa rozwiazania: ";
    cout << "x_1 = " << x1 << "   x_2 = " << x2;
    return 0;
}


Rozwiązanie w Excelu



1. W pola zaznaczone kolorem zielonym wpisujemy wartości współczynników trójmianu: 
     a w B2, b w D2 i c w F2. 
    Reszta pól jest wypełniana automatycznie jako wynik działania formuł. 

2. Komórka D5 wylicza wartość Δ równą b- 4ac.
Wpisana formuła to: =POTĘGA(D2;2)-4*B2*F2

3. Komórka D6 to pierwiastek z tej wartości, 
czyli =PIERWIASTEK(D5)

4. Komórka D8 wylicza pierwiastek  X1 = (- b - √Δ)/2a.
W arkuszu wygląda to tak: =(-D2-D6)/(2*B2)

5. Analogicznie komórka D10 wylicza
pierwiastek X2 = (- b + √Δ)/2aczyli =(-D2+D6)/(2*B2)

Opracował Emil Barnowski