Advertisement
hanelolo

algo do wyznaczania pierwiastkow

Apr 4th, 2014
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. //kod wyjęty żywcem z upraszczacza; wersja surowa, więc daj sobie siana ze zgłaszaniem, jakich to on przypadków nie obsłuży bo ja to wiem
  6.  
  7. double bezwzgledna(double wejscie){return ((wejscie<0) ? wejscie*(-1) : wejscie);}
  8.  
  9. double potegowanie(double podstawa, int wykladnik){
  10.     double wynik=1.0;
  11.     bool licz=true;
  12.     bool czy_blad=false;
  13.     bool odwroc_wynik=false;
  14.     if(podstawa==0&&wykladnik==0) {czy_blad=true;licz=false;}
  15.     if(podstawa==0) {wynik=0;licz=false;}
  16.     if(podstawa!=0&&wykladnik==0) {wynik=1;licz=false;}
  17.     if(podstawa!=0&&wykladnik<0) {wykladnik=wykladnik*(-1);odwroc_wynik=true;}
  18.     if(licz==true) {
  19.         for(int i=1;i<=wykladnik;i++) {
  20.             wynik=wynik*podstawa;
  21.         }
  22.         if(odwroc_wynik==true) {wynik=1/wynik;}
  23.     } else {
  24.         if(czy_blad==true) {
  25.             return false;
  26.         }
  27.     }
  28.     return wynik;
  29. }
  30.  
  31. double pierwiastkowanie(int stopien, double wejscie, int precyzja){
  32.     if(stopien<=1) return false;
  33.     if(stopien%2==0&&wejscie<0) return false;
  34.     bool wynik_ze_znakiem=false;
  35.     if(wejscie<0) wynik_ze_znakiem=true;
  36.     int j=0;
  37.     double prec=1;
  38.     double seek=0.0;
  39.     while(1) {
  40.         if(potegowanie(j,stopien)>bezwzgledna(wejscie)) break;
  41.         j+=1;
  42.     }
  43.     j-=1;
  44.     seek=j;
  45.     for(int i=0;i<precyzja;i++){
  46.         prec=prec*0.1;
  47.         while(1){
  48.             seek+=prec;
  49.             if(potegowanie(seek,stopien)>bezwzgledna(wejscie)) break;
  50.         }
  51.         seek-=prec;
  52.     }
  53.     return ((wynik_ze_znakiem==true) ? seek*(-1) : seek);
  54. }
  55.  
  56. int main(){
  57.     for(;;){
  58.         float wejscie=0.0;
  59.         int wykl=0;
  60.         cout << "\n Podaj liczbe podpierwiastkowa: ";
  61.         cin >> wejscie;
  62.         cout << "\n Podaj stopien pierwiastka: ";
  63.         cin >> wykl;
  64.         cout << "\n Pierwiastek stopnia " << wykl << ". z liczby " << wejscie << " wynosi (ok.) " << pierwiastkowanie(wykl,wejscie,10);
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement