Даны длины а,в,с сторон некоторого треугольника. найти медианы треугольника, сторонами которого являются медианы исходного треугольника. pascal abc нужно написать программу, используя процедуру(ы) и функцию(ы). , ! : )
Type num=double; { в этом месте можно сменить тип на иной }
function Legal(a,b,c:num):boolean; { возвращает True, если из отрезков длиной a,b,c можно построить треугольник } begin Legal:=(a+b>c) and (a+c>b) and (b+c>a) end;
function Med(a,b,c:num):num; { возвращает длину медианы, проведенную к стороне а } begin Med:=sqrt(2*(sqr(b)+sqr(c))-sqr(a))/2 end;
procedure Med3(a,b,c:num; var m1,m2,m3:num); { возвращает длины m1,m2,m3 всех медиан треугольника, построенного из отрезков длиной a,b,c. При этом m1- длина медианы, проведенной к стороне а, m2- дилна медианы,проведенной к стороне b и т.д. Если треугольник построить нельзя, m1=m2=m3=0 } begin if Legal(a,b,c) then begin m1:=Med(a,b,c); m2:=Med(b,a,c); m3:=Med(c,a,b) end else begin m1:=0; m2:=0; m3:=0 end end;
{ основная программа } var a,b,c,m1,m2,m3:num; begin Write('Введите длины сторон треугольника: '); Readln(a,b,c); Med3(a,b,c,m1,m2,m3); if m1>0 then begin Med3(m1,m2,m3,m1,m2,m3); if m1>0 then Writeln('Длины медиан: ',m1,', ',m2,', ',m3) else Writeln('Из полученных медиан нельзя построить треугольник.') end else Writeln('Невозможно построить треугольник с такими сторонами.') end.
Тестовое решение: Введите длины сторон треугольника: 14.3 18.9 8.6 Длины медиан: 10.725, 14.175, 6.45
Думаю, логика у нас здесь будет такая: нужно разложить данные три числа на простые сомножители. Получится: 132 = 2 * 2 * 3 * 11 106 = 2 * 53 134 = 2 * 67 Что у них есть общего - то можно откинуть, потому что количество кругов будет при общих сомножителях делиться без остатка. Собрать в ответ нужно следующее: от первого - 2 * 2 * 3 * 11 от второго - 53 (двойку не берём, потому что она уже взята с первым) от третьего - 67 (двойку опять не берём)
Получается: 2 * 2 * 3 * 11 * 53 * 67 = 468732 секунды. Это, как я думаю, ответ.
При этом (чисто для сведения), до момента встречи: первый намотает 3551 круг второй - 4422 круга третий - 3498 кругов.
/* C++ compiler gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 Copyright (C) 2015 Free Software Foundation, Inc. */
#include <iostream> #include <vector> using namespace std;
int main() { int count = 0; cout <<"Введите количество призывников: "; cin >>count; if (count>17) count=17; vector<int> tanks(count); for (unsigned i=0; i<tanks.size(); i++) cin >>tanks[i]; int min=300, max=0; for (unsigned i=0; i<tanks.size(); i++) { if (min>tanks[i]) min=tanks[i]; if (max<tanks[i]) max=tanks[i]; } int cnt=0; for (unsigned i=0; i<tanks.size(); i++) { if ((tanks[i]!=min) and (tanks[i]!=max)) cnt++; }
num=double; { в этом месте можно сменить тип на иной }
function Legal(a,b,c:num):boolean;
{ возвращает True, если из отрезков длиной a,b,c
можно построить треугольник }
begin
Legal:=(a+b>c) and (a+c>b) and (b+c>a)
end;
function Med(a,b,c:num):num;
{ возвращает длину медианы, проведенную к стороне а }
begin
Med:=sqrt(2*(sqr(b)+sqr(c))-sqr(a))/2
end;
procedure Med3(a,b,c:num; var m1,m2,m3:num);
{ возвращает длины m1,m2,m3 всех медиан треугольника,
построенного из отрезков длиной a,b,c.
При этом m1- длина медианы, проведенной к стороне а,
m2- дилна медианы,проведенной к стороне b и т.д.
Если треугольник построить нельзя, m1=m2=m3=0 }
begin
if Legal(a,b,c) then
begin m1:=Med(a,b,c); m2:=Med(b,a,c); m3:=Med(c,a,b) end
else begin m1:=0; m2:=0; m3:=0 end
end;
{ основная программа }
var
a,b,c,m1,m2,m3:num;
begin
Write('Введите длины сторон треугольника: '); Readln(a,b,c);
Med3(a,b,c,m1,m2,m3);
if m1>0 then begin
Med3(m1,m2,m3,m1,m2,m3);
if m1>0 then Writeln('Длины медиан: ',m1,', ',m2,', ',m3)
else Writeln('Из полученных медиан нельзя построить треугольник.')
end
else
Writeln('Невозможно построить треугольник с такими сторонами.')
end.
Тестовое решение:
Введите длины сторон треугольника: 14.3 18.9 8.6
Длины медиан: 10.725, 14.175, 6.45