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

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

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

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   

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

сума от диагонали в права 4-стенна призма

Имаме правоъгълен паралелепипед с въведени дължини за ръбове на основата - a,b, както и дължина на околния ръб - c. Търсим S - сумата от дължините на всички неповтарящи се диагонали в тази призма.

Имаме правоъгълен паралелепипед с въведени дължини за ръбове на основата - a,b, както и дължина на околния ръб - c. Търсим S - сумата от дължините на всички неповтарящи се диагонали в тази призма.

Алгоритъм:
Всеки правоъгълен паралелепипед има за стени 3 двойки еднакви правоъгълници. Във всеки от тези правоъгълнци има 2 двойки еднакви диагонали. Всеки връх от двете основи на призмата се свързва със срещулежащ връх чрез телесен диагонал. При изчисляване на диагоналите ще използваме формула на Питагор - дължина на хипотенуза чрез корен квадратен sqrt.
Така сумата от диагоналите за стените е S= 4*(d1+d2+d3), където:
d1 = sqrt (a*a+b*b)
d2 = sqrt ( a*a+c*c)
d3 = sqrt (b*b+c*c)
d4 = sqrt (a*a+b*b+c*c) - телесен диагонал. Формира се като хипотенуза с катети: d1 - диагонал на основата и c - околен ръб на призмата.
Следващата програма съдържа решен пример за сума от диагонали:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{ double a, b, c,d, S;
  cout<<"Imate 3 realni chisla a,b,c ot interwala [3.99..33.99],\n";
  cout<<" predstwlqwashi dylvinata na osnowni i okolen ryb w paralelepiped.\n";
  cout<<"Da se systawi programa, chez koqto se izchislwqa sumata\n";
  cout<<"ot dylvinite na wsichki diagonali w tozi paralelepiped.\n";
  cout<<"Primer: 3,4,6 Izhod: 97.2206\n";
  cout<<"Wywedete dylvina za a: ";cin>>a;
  cout<<"Wywedete dylvina za b: ";cin>>b;
  cout<<"Wywedete dylvina za c: ";cin>>c;
  S= sqrt (a*a +b*b);//formula na Pitagor - koren kwadraten sqrt 
  S+= sqrt (a*a+c*c);
  S+= sqrt (b*b+c*c);
  S+= sqrt (a*a+b*b+c*c);//telesen diagonal
  S*=4;
  cout<<"Suma ot diagonali w paralelepiped "<<S<<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
Търсене в сайта: