SHARE
TWEET

algo do wyznaczania pierwiastkow

hanelolo Apr 4th, 2014 12 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top