Функция sqrt - изчисляване на корен квадратен

ръчен алгоритъм за коренуване
дължина на хипотенуза - sqrt
дължина на ъглополовяща в триъгълник - sqrt

Описание на библиотечна функция sqrt - аргументът и резултатът са от тип реален. Резултатът е корен квадратен, корен втори на аргумента. При изчисляване на корен квадратен, чрез функция sqrt, има изискване аргумента да е с положителна стойност. Библиотечната функция sqrt е във файла cmath, както и в по-стария math.h. С основание функция sqrt е смятана за бавна функция - процесът на изчисляване налага използване на редове.

ръчен алгоритъм за коренуване

Съществува алгоритъм за ръчно коренуване, изчисляване на квадратен корен. В следващия алгоритъм за коренуване ще разглеждаме само цели числа като подкоренна стойност, но той може да се приложи и за реални числа. Стъпките са следните:

1) В самото начало инициализираме крайния резултат със стойност 0.
2) Цифрите в числото се разделят на групи по две като броенето започва отдясно.
3) Взема се най-лявата група цифри - само в първата стъпка е възможно цифрата да е една.
4) Умножаваме получения до момента резултат с 20.
5) Проверяваме кое е най-голямото едноцифрено число, така че като го прибавим към резултата и получената сума умножим със същото число да се получава по-малко или равно число на проверяваното.
6) Получената цифра прибавяме като най-дясна на числото резултат.
7) Извършваме операцията изваждане
8) Ако има още необработени цифри се прибавят вдясно и се отива в т.3, ако няма се извежда получения резултат.

Да вземем число 625. Разделяме го на групи 6 и 25
Най-близкото търсено число до 6 е 2
Новото число е 225, а новия делите е 2*20
Най-близкото число е 5, т.к. 45*5 е 225
Цифрите свършиха.
След изваждането се получава 0, т.е. 25 е точен корен на 625

Друг пример с 1024. Разделяме го на групи 10 и 24
Най-близкото търсено число до 10 е 3.
Новото число е 124, а новия делите е 6*20
Най-близкото число е2, т.к. 62*2 е 124
Цифрите свършиха.
След изваждането се получава 0, т.е. 32 е точен корен на 1024

Възможно е да се вземат не една а две групи, но в резултата се добавя 0 - оепрацията е същата както при делене на многоцифрено число.

Следващата програма съдържа решен пример, илюстриращ ръчен алгоритъм за коренуване - изчисляване на корен квадратен:
  #include <iostream>
  #include <cstring>
  using namespace std;
  int const br_cifri=10;

  #define korenuwane (2*delitel +i)*i;
  int i,delitel;

  int koren (int &delimo)
  { int rez;
  cout<<"Obrabotwam: "<<delimo;
    i=0;
    do {
      i++;
      rez=korenuwane;
    } while (rez<=delimo);
    i--;
   cout<<":"<<2*delitel<<"+"<<i<<" s chislo "<<i<<endl;
    delimo-=korenuwane;
    return i;
  }// izwyrshwa korenuwane 

   int Wywevda(int mas[])
   {int dyl, j;
    char chis[br_cifri];
    cout<<"Wywedete estestweno chislo [100..100001]: ";cin>>chis;
    dyl=strlen(chis);//chisloto kato string
    //prehwyrlq otdelnite cifri
    for (j=0;j<dyl;j++)    {mas[j]=chis[j]-'0';}//stringa w chifra
    return dyl;
  } //wywevda estestweno chsilo za korenuwane
  
  int main()
   {int delimo, poz,br,razr;
   int mas[br_cifri];//masiwa s cifrite na chisloto za korenuwane
   cout<<"Da se systawi programa, chrez koqto se wywevda estestweno \n";
   cout<<"chsilo ot interwala [100.100001] i se izwevda naj-blizkoto \n";
   cout<<"chislo do negowiq celochislen koren kwadraten \n";
   cout<<"Primer: 10609 Izhod: 103 \n";
 
   br= Wywevda(mas);//lkolko cifri ima w chisloto
   delimo=0; //125;
   delitel=0;
   poz=0;
   do {
    //ako chisloto e s necheten broj cifri se wzema samo pyrwata cifra
    if (br%2 && poz==0)
     { razr= mas[poz];
       poz++;
     }//samo pri pyrwa cifra i necheten broj cifri   
    else {//wyw wsichki ostanali sluchai se wzemat po dwe cifri
    razr=delimo*100+ mas[poz]*10+mas[poz+1];   
    poz+=2;
    }//formirano e nowoto chislo
   
    delimo=razr;//nowoto chislo za korenuwane  
    delitel*=10;//wsichki cifri se premestwat s edna poziciq nalqwo
    delitel+=koren(delimo);//polucheniq do momenta koren kwadraten
    } while (poz<br);//dokato ne sa otcheteni wsichki wywedeni cifri pri korenuwane
   
   cout<<"Namerih koren kwadraten "<<delitel<<endl;
   cout<<" kwadrat na chisloto "<<delitel*delitel<<endl;
   system("pause");
   return 0;
  }//karj na programa za korenuwane - celochislen koren kwadraten

Докато предходната програма имаше за цел илюстриране на ръчния алгоритъм за коренуване, то следващата примерна функция дава изчисляване на целочислен корен.
В самото начало (цикъл for) се формира допълнително число - степен на 2, което е равно или по-голямо от въведеното число.
В следващия цикъл започва обратният процес - допълнителното число се дели целочислено на 2.
В този цикъл се прави проверка дали квадрата на достигната степен на 2 е по-малка или равна на въведеното число.
С всеки следващ ход на цикъла се натрупват по-малките степени на 2.
Тази функция за целочислено коренуване има недостатъци, но и едно определено предимство - лесен за запомняне алгоритъм.

  int koren_cql(int chis)
   {int step,koren=0,;
    for( step=1; step<=chis; step<<=1 );//do stepen na 2 >= na wywedcenoto chislo
    while( step>1 )
    {  step>>=1;//posledowatelno se deli celochisleno na 2
  //pri sledwa]ata prowerka zapochwa narastwane stojnostta na tyrseniq koren      
       if ( (koren + step)*(koren+step)<=chis ) {koren+=step;}
    }
       return koren;
   }// korenuwane - cqlo chislo za koren kwadraten 

Начало на страницата

дължина на хипотенуза - sqrt

Една от най-често срещаните задачи изискващи изчисляване на корен квадратен е изчисляване катет или хипотенуза в правоъгълен триъгълник.

Следващата програма съдържа решен пример, илюстриращ работата на библиотечна функция sqrt - изчисляване на корен квадратен:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
   double a, b, c;
   cout<<"Imate 2 realni chisla ot interwala [3.99..33.99], predstwlqwashi\n";
   cout<<"dylvinata na kateti w prawoygylen triygylnik.\n";
   cout<<"Da se systawi programa, chez koqto se izchislwqa dylvinata na\n";
   cout<<"hipotenuzata w prawoygylen triygylnik po wywedeni dylvini na dwata kateta.\n";
   cout<<"Primer: 3,4 Izhod: 5\n";
   cout<<"Wywedete dylvina na kateta a: ";cin>>a;
   cout<<"Wywedete dylvina na kateta b: ";cin>>b;
   c= sqrt (a*a +b*b);//formula na Pitagor - koren kwadraten sqrt 
   cout<<"Dylvinata na hipotenuzata e: "<<c<<endl;
   system("pause");
   return 0;
}//kraj na programa koren kwadraten  sqrt 

Начало на страницата

дължина на ъглополовяща в триъгълник - sqrt

Имаме триъгълник ABC. От връх A е спусната ъглополовяща La, разделяща страната BC на части с дължина n и m. Въведена е дължината на страна AC = b. Да се състави програма, чрез която се изчислява радиуса на описаната около този триъгълник окръжност по въведени b, m, n.

   Алгоритъм
   страна BC в този триъгълник е: a=m+n
   От свойството на ъглополовящите b/c = m/n. Страна c= n*b/m
   p - полупериметър на триъгълник p = 0.5 * (a + b + c)
   Ще ползваме алгоритъм на Херон за изчисляване лице на триъгълник    S - лице на триъгълник S = sqrt (p*(p-a)*(p-b)*(p-c)
   дължина на ъгополовяща в триъгълник La = 2 * sqrt ( b*c*p* (p-a) ) / (b+c)
   радиус на описаната около триъгълник окръжност R = a*b*c / (4*S)

   Следващата примерна програма съдържа решена задача за изчисляване на ъглополовяща в триъгълник и използване на функция sqrt - изчисляване на корен квадратен:
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{ double m,n,a,b,c,p,S,La,R;
  cout<<"Ot wryh A na triygylnika ABC e spusnata yglopolowqsha La, razdelqsha\n";
  cout<<"stranata BC na chast w otnoshenie m:n. Wywedena e dylvinata na \n";
  cout<<"AC = b. Po wywedeni m,n, b da se izchisli radiusa na opisanata okolo\n";
  cout<<"tozi triygylnik okryvnost R i dylvinata na yglopolowqshata La.\n";
  cout<<"Primer: m=3; n=3; b=5 Izhod La=4; R=3.125 \n";
  cout<<"Wywedete m: ";cin>>m;
  cout<<"Wywedete n: ";cin>>n;
  cout<<"Wywedete b: ";cin>>b;
  a=m+n; //strana BC
  c= n*b/m; //swojstwo na yglopolowqshi b/c = m/n 
  p=0.5*(a+b+c);//poluperimetyr
 S = sqrt (p*(p-a)*(p-b)*(p-c)); //lice po Heron koren kwadraten  sqrt 
 La = 2 * sqrt ( b*c*p* (p-a) ) / (b+c); 
 cout<<"Dylvina na yglopolowqsha La: "<<La<<endl;
 R = a*b*c / (4*S);
 cout<<"Radius na opisanata okryvnost: "<<R<<endl;
system ("pause");
return 0;
}//kraj na programa koren kwadraten  sqrt   

Задачи с подобни функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени примери.

Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: