С++
№10
С клавиатуры вводится число N, обозначающие количество футболистов команды "Бублик", а затем- строк, в каждый из которых - информация об одном футболисте в такой формате:
<Фамилия> <Имя> <год рождения> <голы>
Данные разделяются одним пробелом. Нужно подсчитать, сколько футболистов, родившихся в период с 1998 по 2000г., не забили мячей вообще.
№11
В условиях предыдущей задачи определите фамилию и имя футболиста, забившего наибольшее число голов, и количество забитых им голов.
№12
В условиях предыдущей задачи выведите в алфавитном порядке фамилии и имена всех футболистов, которые забили хотя бы один голю в списке не более 100 футболистов.
№13
Измените программу рекурсивного перебора так, чтобы длину слова можно было ввести с клавиатуры.
№14
Выведите на экран все слова длиной L символов, в которых буква Ы встречается более 1 раза, и подсчитаете их количество.
№15
Выведите на экран все слова длиной L символов, в которых есть одинаковые буквы, стоящие рядов (ЫШШО, например), и подсчитайте их количество.
№16
В языке племени "тумба-юмба" запрещено ставить две гласные буквы подряд. Выведите все слова длиной L символов, удовлетворяющие этому условию, и найдите их кол-во.
На С++
Point=record
x,y:real
end;
procedure GetPoint(c:char; var A:Point);
var
x,y:real;
begin
Write('Введите координаты x и y точки ',c,': ');
Read(x,y);
A.x:=x; A.y:=y
end;
function DistPoint(A,B:Point):real;
begin
DistPoint:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y))
end;
var
A,B,M:Point;
d,p,ab,ma,mb:real;
begin
GetPoint('A',A); GetPoint('B',B); GetPoint('M',M);
ab:=DistPoint(A,B); ma:=DistPoint(M,A); mb:=DistPoint(M,B);
if ma>=ab+mb then d:=mb
else
if mb>=ma+ab then d:=ma
else begin
p:=(ma+mb+ab)/2;
d:=2*sqrt(p*(p-ab)*(p-ma)*(p-mb))/ab
end;
Writeln('Минимальное расстояние составляет ',d)
end.
Тестовое решение:
Введите координаты x и y точки A: -3 -5
Введите координаты x и y точки B: 2 5
Введите координаты x и y точки M: -3 4
Минимальное расстояние составляет 4.02492235949962
Пусть ΔABC - равнобедренный, АВ = с - его основание, АС = ВС = b - боковые стороны. По условию треугольник симметричен относительно горизонтальной оси, так что его основание АВ должно быть перпендикулярно горизонтальной оси и при этом АО = ОВ, а вершина С попадет на горизонтальную ось. Разместим ΔABC так, чтобы основание попало на вертикальную ось.
Окружность, описанная вокруг треугольника, пройдет через все три его вершины. Точка М - центр описанной окружности, - лежит на пересечении перпендикуляров, проведенных из середин сторон треугольника. Поскольку ΔABC равнобедренный, то ОС - его высота и отрезок МС, равный радиусу окружности R, также лежит на горизонтальной оси.
Найдем высоту ОС, обозначив её через h, по теореме Пифагора.
ОС - это катет ΔAOC, AO ⊥ OC.
Площадь ΔABC находим по формуле
Для нахождения радиуса R = MC рассмотрим прямоугольные ΔAOC и ΔMDC, имеющие общий угол АСО = α
Теперь легко сделать необходимое построение.
Для этого откладываем от начала координат по горизонтальной оси отрезок ОМ и проводим из него, как из центра, окружность радиуса R. Соединяем между собой три точки пересечения окружностью осей координат и получаем треугольник с длинами сторон, равными заданным.
Ниже приводится программа на языке Microsoft QBasic, позволяющая рассчитать длину отрезка ОМ (Mx - координату х точки М) и радиус описанной окружности R по заданной длине основания с и длине боковой стороны b.
INPUT "Основание: ", c
INPUT "Боковая сторона: ", b
h = SQR(b ^ 2 - (c / 2) ^ 2)
R = b ^ 2 / (2 * h)
Mx = h - R
PRINT "Радиус равен "; R, "Координата центра равна "; Mx
Тестовое решение:
Y:\qbasic>QBASIC.EXE
Основание: 6
Боковая сторона: 5
Радиус равен 3.125 Координата центра равна .875
Чтобы продолжить, нажмите любую клавишу