Правоъгълник - страни, диагонали, периметър и лице

лице и периметър на правоъгълник
най-голям триъгълник в правоъгълник
ъгъл между диагонали в правоъгълник
най-голямо лице на правоъгълник
два вместени правоъгълника
периметър на правоъгълник – лице и съотношение на страни

Двуизмерна геометрична фигура с четири равни вътрешни ъгъла ще наричаме правоъгълник. Правоъгълникът е частен случай на успоредник с прав ъгъл. В един правоъгълник всяка двойка срещулежащи страни са успоредни, а всяка двойка прилежащи страни сключват прав ъгъл. Квадратът е частен случай на правоъгълник с равни прилежащи страни. Във всеки правоъгълник: срещулежащите ъгли са равни, срещуположните страни са равни, диагоналите са равни и се разполовяват от пресечната си точка. Тази точка е и център на описаната окръжност. Вписана окръжност, която има допирна точка с всяка от страните е възможна само при частния случай на правоъгълник - квадрата. Максималната вписана окръжност в един правоъгълник има диаметър по-малката страна на същия правоъгълник. От определението за правоъгълник следва, че всяка от страните в един правоъгълник се явява и негова височина. Диаметър на описана около правоъгълник окръжност: d = sqrt (a*a +b*b) Диаметър на описана около квадрат окръжност: d = a * sqrt (2) Диаметър на вписана в квадрат окръжност: d = a

лице и периметър на правоъгълник

Дадени са две прилежащи страни a,b от правоъгълник – естествени числа от интервала [1..101]. Търсим периметър P и лице S и радиус на описаната окръжност R за същия правоъгълник.

Алгоритъм
P = 2*(a+b)
S = a*b
R = 0.5* sqrt(a*a + b*b) – от теоремата на Питагор
Следващата примерна програма дава решена задача за лице и периметър на правоъгълник.
#include <iostream>
#include <cmath>
using namespace std;

int main()
{ double a,b,P, S,d;
  char ose;
  cout<<"Imate prawoygylnik s wywedeni dylvini na stranite a,b - realni\n";
  cout<<"chisla ot interwala [1..101]. Tyrsim lice S, perimetyr P i \n";
  cout<<"diametyr d na opisanata okolo prawoygylnika okryvnost.\n";
  cout<<"Da se systawi programa, chrez koqto se wywevdat stranite\n";
  cout<<"a,b i se izchislqwa lice  perimetyr na prawoygylnik.\n";
  cout<<"Primer: 3,4 Izhod: P=14, S=12, R=5 \n";
 do {
    cout<<"Wywedete dylvina na stranata a: ";cin>>a;
    cout<<"Wywedete dylvina na stranata b: ";cin>>b;   
    P=2*(a+b);
    cout<<"Perimetyr na prawoygylnika: "<<P<<endl;
    S=a*b;
    cout<<"Lice na prawoygylnika: "<<S<<endl;
    d=sqrt(a*a + b*b);
    cout<<"Diametyr na opisanata okolo prawoygylnika okryvnost: "<<d<<endl;
    cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
  } while (ose=='y');
 system("pause");
 return 0;
}//kraj na programa prawoygylnik 

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

най-голям триъгълник в правоъгълник

Дадени са две прилежащи страни a,b от правоъгълник – естествени числа от интервала [1..101]. Страните на правоъгълника са успоредни на координатните оси, върховете са ABCD. Дадени са и координати на точка M(x,y), принадлежаща на този правоъгълник. Координатите на точката са въведени като относителни спрямо началния връх А в същия правоъгълник. Точката M е свързана с всеки от върховете в правоъгълника като са формирани следните триъгълници AMB, BMC, CMD, DMA. Търсим триъгълника с най-голямо лице.

Алгоритъм:
А) Можем да използваме ориентирано лице за всеки от триъгълниците, като координатите за отделните точки са:
A - x=0, y=0
B - x=a; y=0
C - x=a, y=b
D - x=0, y=b
M - x=Mx; y=My
Последователно изчисляваме лицето на всеки от триъгълниците и определяме най-голямото лице чрез алгоритъм за търсене на максимална стойност в редица.
Б) Последователно изчисляваме лицата на всеки от триъгълник (страна по височина към нея) и записваме стойностите в масив:
0 – Samb=a*My/2
1 – Sbmc = b*(a-Mx)/2
2 – Scmd = a*(b-My)/2
3 – Sdma = b*Mx/2
Определяме най-голямото лице чрез алгоритъм за търсене на максимална стойност в редица.
Следващата примерна програма дава решена задача за най-голям триъгълник в правоъгълник:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{ double a,b,Mx,My, Smax,mas[4];
  int i, nom;
  char ime[4][5]={"AMB", "BMC", "CMD", "DMA"};
  char ose;
  cout<<"Imate prawoygylnik s wywedeni dylvini na stranite a,b - realni\n";
  cout<<"chisla ot interwala [1..101]. W prawoygylnika e wpisana tochka\n"; 
  cout<<"M s koordinati Mx, My, kydeto 0<Mx<a, 0<My<b. Tochkata M se \n";
  cout<<"swyrzwa s wseki ot wyrhowete na prawoygylnika ABCD kato\n";
  cout<<"obrazuwa triygylnicite AMB, BMC, CMD, DMA. Tyrsim triygylnika\n";
  cout<<"s naj-golqmo lice.\n";
  cout<<"Da se systawi programa, chrez koqto se wywevdat stranite a,b, \n";
  cout<<"Mx, My i se izwevda triygylnika s maksimalno lice.\n";
  cout<<"Primer: a=10, b=12, Mx=2, My=3 Izhod: BMC=48 \n";
 do {
   cout<<"Wywedete dylvina na stranata a: ";cin>>a;
   cout<<"Wywedete dylvina na stranata b: ";cin>>b;   
   cout<<"Wywedete koordinata za Mx: ";cin>>Mx;
   cout<<"Wywedete koordinata za My: ";cin>>My;     
   mas[0] = a*My/2; //- Samb
   mas[1] = b*(a-Mx)/2;//- Sbmc 
   mas[2] = a*(b-My)/2;//- Scmd
   mas[3] = b*Mx/2;//- Sdma 
   nom=0;Smax=mas[0];//inicializaciq
   for (i=1;i<4;i++)
   {if (mas[i]>Smax) {nom=i; Smax=mas[i];}
  } 
    cout<<"Triygylnikyt "<<ime[nom]<<" e s naj-golqmoto lice: "<<Smax<<endl;
    cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
  } while (ose=='y');
 system("pause");
 return 0;
}//kraj na programa prawoygylnik 

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

ъгъл между диагонали в правоъгълник

Дадени са две прилежащи страни a,b от правоъгълник – естествени числа от интервала [1..101]. Ще означим с ABCD върховете на правоъгълника. В страната AB има точка N, разделяща я на отсечки с дължина p и q – AN=p, BN=q. Диагоналът в правоъгълника DB се пресича с отсечката SN в точка M. Търсим ъгъл NMB.

Алгоритъм:
Ще изчислим последователно ъглите NBD,BNC, NMB=180-( NBD+BNC)
Формулата за ъгъла е дадена в градуси, но резултатът ще бъде изведен в радиани.
Разглеждаме правоъгълния триъгълник BAD. Ъгъл ABD = atan(b/(p+q)). Ъгъл NBM=ABD – като общ ъгъл
Разглеждаме правоъгълния триъгълник NBC. Ъгъл BNC = atan(b/q).
NMB=3.141592- ( NBD + BNC )
Следващата примерна програма дава решена задача за ъгъл между диагонали в правоъгълник:
#include <iostream>
#include <cmath>
using namespace std;
double pi=3.141592;

int main()
{double p,q,b, ABD, BNC, NMB; 
    cout<<"W prawoygylnik ABCD sys strana AD=b ima otsechka CN, delqsha\n";
    cout<<"stranata AB na otsechki s dylvina AN=p i BN=q. Diagonalyt BD\n";
    cout<<"se presicha s CN w tochka M. Izchislete ygyl NMB w radiani.\n";
    cout<<"Primer: AN=2, BN=6, AD=8 Izhod: 1.4289\n"; 
    cout<<"Wywedete dylvina na AN: ";cin>>p;
    cout<<"Wywedete dylvina na BN: ";cin>>q;
    cout<<"Wywedete dylvina na stranata b: ";cin>>b;   
    ABD = atan(b/(p+q)); 
    BNC = atan(b/q);
    NMB = pi - ( ABD + BNC );//triygylnikyt ima 180 gradusa ili pi radiana
    cout<<"Izchislen ygyl NMB w radiani: "<<NMB<<endl;
 system("pause");
 return 0;
}//kraj na programa prawoygylnik 

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

най-голямо лице на правоъгълник

Даден е правоъгълник с въведени дължини на прилежащите му страни. Дължините на страните са естествени числа от интервала [1..101]. Търсим друг правоъгълник, който има същия периметър както началния, но е с възможно най-голямото лице.

Алгоритъм:

От всички правоъгълници с равен периметър квадратът е с най-голямо лице.
Въвеждаме страните на началния правоъгълник a и b.
Изчисляваме периметъра P на началния правоъгълник P=2*(a+b).
Изчисляваме лицето S на правоъгълника S=a*b.
Страната на търсения квадрат е с дължина 1/4 от изчисления периметър на началния правоъгълник kwad=P/4.
Двата периметъра на началния правоъгълник и на квадрата са равни.
Изчисляваме лицето на квадрата S=kwad*kwad.

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

int main ()
{ int a,b;
   double kwad,P;
   char ose;
   cout<<"Imame prawoygylnik s dylvini na prilevashite strani a,b - estestweni\n";
   cout<<"chisla ot interwala [1..101]. Tyrsim takyw prawoygylnik, kojto ima\n";
   cout<<"syshiq perimetyr, no naj-golqmo wyzmovno lice.\n";
   cout<<"Primer: 4, 9 Izhod: 42.25\n";
   do {
   cout<<"Wywedete strana a: ";cin>>a;
   cout<<"Wywedete strana b: ";cin>>b;
   P=2*(a + b);//perimetryr na prawoygylnik i kwadrat
   kwad=P/4;//stranata na kwadrata
   cout<<"Liceto na prawoygylnika e: "<<a*b<<", a perimetyra: "<<P<<endl;
   cout<<"Liceto na kwadrata e: "<<kwad*kwad<<", a perimetyra: "<<4*kwad<<endl;
   cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
  } while (ose=='y');
 system("pause");
 return 0;
}//kraj na programa prawoygylnik 

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

два вместени правоъгълника

Дадени са два правоъгълника съответно със страни a1,b1 и a2, b2. Трябва да се извърши проверка дали единия правоъгълник може изцяло да се вмести в другия правоъгълник.

Алгоритъм

Последователно се въвеждат лицата на двата правоъгълника a1,b1; a2, b2.
Два правоъгълника могат да се вместят изцяло един в друг ако са изпълнение едновременно и двете условия:
а) по-малката страна на по-малкия по размери правоъгълник е по-малка или равна на по-малката страна на другия правоъгълник;
б) по-голямата страна на по-малкия по размери правоъгълник е по-малка или равна на по-голямата страна на другия правоъгълник.
В задачата се изисква проверка дали единия правоъгълник може да се вмести в другия правоъгълник без да се уточнява дали първия във втория или обратно.
Възможни са няколко подхода:
1) Подреждаме и двете страни във всеки правоъгълник примерно във възходящ ред и после ги сравняваме;
2) извършваме проверка на всеки от 4-те възможни случая.

Следващата примерна програма дава решена задача за два вместени правоъгълника.
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{ int a1,b1, a2,b2;
   char ose;
   cout<<"Imate 2 prawoygylnika s dylvini na prilevashite strani a1,b1,; a2,b2.\n";
   cout<<"Da se systawi programa, chrez koqto se wywevdat stranite i se izwevda\n";
   cout<<"syob]enie dali ediniq prawoygylnik move izcqlo da se wmesti w drugiq.\n";
   cout<<"Primer: 4,9; 10,4 Izhod: Da \n";
   do {
   cout<<"Wywedete strana a1: ";cin>>a1;
   cout<<"Wywedete strana b1: ";cin>>b1;
   cout<<"Wywedete strana a2: ";cin>>a2;
   cout<<"Wywedete strana b2: ";cin>>b2;
   if ( ((a1<=a2) && (b1<=b2)) || ((a1<=b2) && (b1<=a2)) ||  ((a1>=a2) && (b1>=b2)) || ((a1>=b2) && (b1>=a2))) 
    { cout<<"Dwata prawoygylnika se wmestwat edin w drug.\n";}
     else { cout<<"Dwata prawoygylnika ne se wmestwat edin w drug.\n";}
     cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
   } while (ose=='y');
 system("pause");
 return 0;
}//kraj na programa 2 prawoygylnika 

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

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

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