// PascalABC.NET 3.3, сборка 1579 от 18.11.2017 // Внимание! Если программа не работает, обновите версию!
type Mountain=(string,integer);
procedure Print3Highs(t:array of Mountain); begin t.OrderByDescending(x->x[1]).Take(3).Println(NewLine) end;
begin var a:array of Mountain:=Arr( Rec('Эльбрус',5642), Rec('Винсон',4892), Rec('Килиманджаро',5895), Rec('Эверест',8848), Rec('Аконкагуа',6959), Rec('Мак-Кинли',6194)); Print3Highs(a) end.
Результат (Эверест,8848) (Аконкагуа,6959) (Мак-Кинли,6194)
которому учат всех в школе. Мало кто понимает, в чём его суть, но делают так: В твоём случае: 35/2=17 (1) 17/2=8(1) 8/2=4(0) 4/2=2(0) 2/2=1(0) 1/2=0(1)
Собираем в обратном порядке: 100011.
2)Как всегда делал я: Раскладывал число на сумму степеней двойки. Это ряд чисел:1,2,4,8,16,32,64,128,256,512,1024 - такого тебе пока точно хватит. 35=32+2+1
Суть такова: Давай проверим, правильно ли мы разложили его в двоичную систему:100011. Оно представляется так: 1*(32)+0*(16)+0*(8)+0*(4)+1*(2)+1*(1) Получим тот же ответ. (32+2+1) Если много тренироваться, это дойдёт до автоматизма.
// Внимание! Если программа не работает, обновите версию!
type
Mountain=(string,integer);
procedure Print3Highs(t:array of Mountain);
begin
t.OrderByDescending(x->x[1]).Take(3).Println(NewLine)
end;
begin
var a:array of Mountain:=Arr(
Rec('Эльбрус',5642),
Rec('Винсон',4892),
Rec('Килиманджаро',5895),
Rec('Эверест',8848),
Rec('Аконкагуа',6959),
Rec('Мак-Кинли',6194));
Print3Highs(a)
end.
Результат
(Эверест,8848)
(Аконкагуа,6959)
(Мак-Кинли,6194)