Програма за извеждане на Питагорова тройка числа

програма за Питагорова тройка числа - без функция
програма за Питагорова тройка числа - функция с итерация
програма за Питагорова тройка числа - рекурсивна функция

Едно от най-известните следствия на Питагоровата теорема е: сборът от квадратите на двата катета е равен на втората степен на хипотенузата.

   Нека разгледаме следната задача: търсим такива естествени числа, които отговарят за дължини на страни в правоъгълен триъгълник, т.е. образуват Питагорова тройка числа.
   Задачата може да бъде решена по няколко различни начина, един от които е три вложени цикъла като в най-вътрешният се проверява изпълнение на условието. Този начин индуктивно ще изведе всички възможни комбинации от стойности отговарящи на изискването като някой могат да се повтарят.
   По-елегантен подход е използване на вече изследвани решения на задачата. Нека 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 

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

 
Размер на шрифта
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
Търсене в сайта: