Програма за извеждане на Питагорова тройка числа
програма за Питагорова тройка числа - без функция
програма за Питагорова тройка числа - функция с итерация
програма за Питагорова тройка числа - рекурсивна функция
Едно от най-известните следствия на Питагоровата теорема е: сборът от квадратите на двата катета е равен на втората степен на хипотенузата.
Нека разгледаме следната задача: търсим такива естествени числа, които отговарят за дължини на страни в правоъгълен триъгълник, т.е. образуват
Питагорова тройка числа.
Задачата може да бъде решена по няколко различни начина, един от които е три вложени цикъла като в най-вътрешният се проверява изпълнение на условието. Този начин индуктивно ще изведе всички възможни комбинации от стойности отговарящи на изискването като някой могат да се повтарят.
По-елегантен подход е използване на вече изследвани решения на задачата. Нека k e естествено число, така за дължините на двата катета (a,b) и хипотенузата (c) могат да бъдат изведени следните зависимости:
a=2*k+1;
b=2*k*(k+1);
c=b+1;
Използвайки горните формули се предлагат примерни решения на задачата: без функция, с функция, с рекурсивна функция.
програма за Питагорова тройка числа - без функция
#include <iostream>
using namespace std;
int const broi=20;
int main()
{int a,b,c,k;
cout<<"Da se systawi programa, chrez koqto se izwevdat pitagorowi trojki\n";
cout<<"estestweni chisla a,b,c otgowarqshi na iziskwaneto a*a + b*b = c*c.\n";
cout<<"Primer: 3,4,5\n";
for (k=1;k<=broi; k++)
{ a=2*k+1;
b=2*k*(k+1);
c=b+1;
cout<<"Za k = "<<k<<"; a = "<<a<<"; b = "<<b<<"; c = "<<c<<" Pitagor "<<a*a<<" + "<<b*b<<" = "<<c*c<<" == "<<a*a+b*b<<endl;
//cout<<"kakto i "<<b*b<<" + "<<a*a<<" = "<<c*c<<" sywpada s "<<a*a+b*b<<endl;
}//for
system ("pause");
return 0;
}//kraj na programa pitagorowa teorema
Начало на страницата
програма за Питагорова тройка числа - функция с итерация
#include <iostream>
using namespace std;
int const broi=20;
void Pit_iter(int i)
{int a,b,c,k;
for (k=1;k<i; k++)
{ a=2*k+1;
b=2*k*(k+1);
c=b+1;
cout<<"Za k = "<<k<<"; a = "<<a<<"; b = "<<b<<"; c = "<<c<<" Pitagor "<<a*a<<" + "<<b*b<<" = "<<c*c<<" == "<<a*a+b*b<<endl;
//cout<<"kakto i "<<b*b<<" + "<<a*a<<" = "<<c*c<<" sywpada s "<<a*a+b*b<<endl;
}//for
}//pitagorowa trojka
int main()
{ int a,b,c,k;
cout<<"Da se systawi programa, chrez koqto se izwevdat pitagorowi trojki\n";
cout<<"estestweni chisla a,b,c otgowarqshi na iziskwaneto a*a + b*b = c*c.\n";
cout<<"Primer: 3,4,5\n";
Pit_iter(broi);
system ("pause");
return 0;
}//kraj na programa pitagorowa teorema
Начало на страницата
програма за Питагорова тройка числа - рекурсивна функция
#include <iostream>
using namespace std;
int const broi=20;
void Pit_rek(int k)
{ int a,b,c;
if (k) //ako k>0
{ a=2*k+1;
b=2*k*(k+1);
c=b+1;
cout<<"Za k = "<<k<<"; a = "<<a<<"; b = "<<b<<"; c = "<<c<<" Pitagor "<<a*a<<" + "<<b*b<<" = "<<c*c<<" == "<<a*a+b*b<<endl;
Pit_rek(k-1);//rekursiwno izwikwane
}//if
}// pitagorowa trojka
int main()
{int a,b,c,k;
cout<<"Da se systawi programa, chrez koqto se izwevdat pitagorowi trojki\n";
cout<<"estestweni chisla a,b,c otgowarqshi na iziskwaneto a*a + b*b = c*c.\n";
cout<<"Primer: 3,4,5\n";
Pit_rek(broi);
system ("pause");
return 0;
}//kraj na programa pitagorowa teorema
Начало на страницата
аритметична прогресия и Питагорова теорема
Да разгледаме следната задача:
Даден е периметър на правоъгълен триъгълник, за който се знае,
че страните му образуват аритметична прогресия.
Да се изчислят страните на този триъгълник.
алгоритъм:
Да припомним отново едно от следствията в известната Питагорова теорема - квадрата на хипотенузата е равен на сумата от квадратите на двата катета.
Ще означим разликата на тази аритметична прогресия с d, а отделните нейни члена с: 1)x-d; 2) x; 3) x+d
По условие периметъра, т.е. сумата на прогресията е P = x-d + x + x+d
Изчисляваме средния член на тази прогресия: x=P/3;
От познатата Питагорова теорема можем да изведем и следното съотношение между елементите на тази прогресия: (x+d)*(x+d) = x*x + (x-d)*(x-d)
x*x +2*x*d + d*d = x*x + x*x -2*x*d +d*d
4*x*d= x*x
4*d = x
4*d=P/3
Така разликата на тази аритметична прогресия е d = P/12
Следващата програма дава решена задача за аритиметична прогресия между страни на правоъгълен триъгълник:
#include <iostream>
using namespace std;
int main ()
{ double P,d,a,b,c,x;
char ose;
cout<<"Dylvinite na stranite w prawoygylen triygylnik obrazuwat \n";
cout<<"aritmetichna progresiq. Wyweden e perimetyra P na triygylnika.\n";
cout<<"Da se izchislqt stranite na triygylnika.\n";
cout<<"Primer: 60 Izhod 15,20,25\n";
do {
cout<<"Wywedete perimetyr na prawoygylniq triygylnik: ";cin>>P;
d=P/12;
cout<<"Stypka na progresiqta: "<<d<<endl;
x=P/3;
a=x-d;
cout<<"Katet a: "<<a<<endl;
b=x;
cout<<"Katet b: "<<b<<endl;
c=x+d;
cout<<"Hipotenuza c: "<<c<<endl;
cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
} while (ose=='y');
system("pause");
return 0;
}//kraj na programa pitagorowa teorema
Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.