i'm going to read a lot of books this year. я собираюсь прочесть много книг в этом году.
we hope you will solve all your problems soon. мы надеемся, что вскоре ты решишь все свои проблемы.
when everyone took their places my grandmother said "well, now listen to stories". когда все заняли свои места, моя бабушка сказала: "ну, теперь послушайте ".
i will try to answer all your questions. я постараюсь ответить на все твои вопросы.
we're going to discuss this buisness plan with our partners. мы собираемся обсудить этот бизнес-план с нашими партнёрами.
type cName = string[20]; RC = record position: byte; name: cName; nGold: byte; nSilver: byte; nBronze: byte; cTotal: byte end; tM = array[1..nMax, 1..2] of byte;
procedure Shell(var a: tM; n: integer); { Сортировка методом Шелла массива a[1..n, 1..2] по убыванию значений элементов второго столбца. } var i, j, step, t1, t2: integer;
begin step := n div 2; while step > 0 do begin for j := n - step downto 1 do begin i := j; while i <= n - step do begin if a[i, 2] < a[i + step, 2] then begin t1 := a[i, 1]; t2 := a[i, 2]; a[i, 1] := a[i + 1, 1]; a[i, 2] := a[i + 1, 2]; a[i + 1, 1] := t1; a[i + 1, 2] := t2 end; i := i + step end end; step := step div 2 end end;
{ Основная программа } var f: file of RC; a: tM; i, n: byte; s: cName; t: RC;
begin { Организуем ввод данных } Assign(f, 'Olympic.in'); Rewrite(f); n := 0; repeat Writeln('Введите наименование команды или * для окончания ввода'); Readln(s); if s[1] <> '*' then begin n := n + 1; Write('Количество медалей: золото, серебро, бронза: '); Readln(t.nGold, t.nSilver, t.nBronze); t.position := n; t.name := s; t.cTotal := t.nGold * cGold + t.nSilver * cSilver + t.nBronze * cBronze; Write(f, t); a[n, 1] := t.position; a[n, 2] := t.cTotal end until s[1] = '*'; Reset(f); { Выполняем сортировку заполненного массива a, определяя положение записей в файле } Shell(a, n); { Выводим результаты, используя прямой доступ к файлу } Writeln('Результаты олимпиады'); for i := 1 to n do begin seek(f, a[i, 1] - 1); Read(f, t); Writeln(i, ': ', t.name, '(', t.nGold, ' зол, ', t.nSilver, ' сер, ', t.nBronze, ' бронз), очков- ', t.cTotal) end; Close(f); end.
Тестовое решение: Введите наименование команды или * для окончания ввода Веселые медузы Количество медалей: золото, серебро, бронза: 4 6 10 Введите наименование команды или * для окончания ввода Юные сурки Количество медалей: золото, серебро, бронза: 2 0 5 Введите наименование команды или * для окончания ввода Черепашки-ниндзя Количество медалей: золото, серебро, бронза: 3 7 11 Введите наименование команды или * для окончания ввода * Результаты олимпиады 1: Черепашки-ниндзя(3 зол, 7 сер, 11 бронз), очков- 118 2: Веселые медузы(4 зол, 6 сер, 10 бронз), очков- 114 3: Юные сурки(2 зол, 0 сер, 5 бронз), очков- 39
i'm going to read a lot of books this year. я собираюсь прочесть много книг в этом году.
we hope you will solve all your problems soon. мы надеемся, что вскоре ты решишь все свои проблемы.
when everyone took their places my grandmother said "well, now listen to stories". когда все заняли свои места, моя бабушка сказала: "ну, теперь послушайте ".
i will try to answer all your questions. я постараюсь ответить на все твои вопросы.
we're going to discuss this buisness plan with our partners. мы собираемся обсудить этот бизнес-план с нашими партнёрами.
const
nMax = 50; { максимум 50 команд }
cGold = 7;
cSilver = 6;
cBronze = 5;
type
cName = string[20];
RC = record
position: byte;
name: cName;
nGold: byte;
nSilver: byte;
nBronze: byte;
cTotal: byte
end;
tM = array[1..nMax, 1..2] of byte;
procedure Shell(var a: tM; n: integer);
{ Сортировка методом Шелла массива a[1..n, 1..2]
по убыванию значений элементов второго столбца. }
var
i, j, step, t1, t2: integer;
begin
step := n div 2;
while step > 0 do
begin
for j := n - step downto 1 do
begin
i := j;
while i <= n - step do
begin
if a[i, 2] < a[i + step, 2] then
begin
t1 := a[i, 1]; t2 := a[i, 2];
a[i, 1] := a[i + 1, 1]; a[i, 2] := a[i + 1, 2];
a[i + 1, 1] := t1; a[i + 1, 2] := t2
end;
i := i + step
end
end;
step := step div 2
end
end;
{ Основная программа }
var
f: file of RC;
a: tM;
i, n: byte;
s: cName;
t: RC;
begin
{ Организуем ввод данных }
Assign(f, 'Olympic.in');
Rewrite(f);
n := 0;
repeat
Writeln('Введите наименование команды или * для окончания ввода');
Readln(s);
if s[1] <> '*' then
begin
n := n + 1;
Write('Количество медалей: золото, серебро, бронза: ');
Readln(t.nGold, t.nSilver, t.nBronze);
t.position := n;
t.name := s;
t.cTotal := t.nGold * cGold + t.nSilver * cSilver + t.nBronze * cBronze;
Write(f, t);
a[n, 1] := t.position; a[n, 2] := t.cTotal
end
until s[1] = '*';
Reset(f);
{ Выполняем сортировку заполненного массива a,
определяя положение записей в файле }
Shell(a, n);
{ Выводим результаты, используя прямой доступ к файлу }
Writeln('Результаты олимпиады');
for i := 1 to n do
begin
seek(f, a[i, 1] - 1);
Read(f, t);
Writeln(i, ': ', t.name, '(', t.nGold, ' зол, ', t.nSilver, ' сер, ',
t.nBronze, ' бронз), очков- ', t.cTotal)
end;
Close(f);
end.
Тестовое решение:
Введите наименование команды или * для окончания ввода
Веселые медузы
Количество медалей: золото, серебро, бронза: 4 6 10
Введите наименование команды или * для окончания ввода
Юные сурки
Количество медалей: золото, серебро, бронза: 2 0 5
Введите наименование команды или * для окончания ввода
Черепашки-ниндзя
Количество медалей: золото, серебро, бронза: 3 7 11
Введите наименование команды или * для окончания ввода
*
Результаты олимпиады
1: Черепашки-ниндзя(3 зол, 7 сер, 11 бронз), очков- 118
2: Веселые медузы(4 зол, 6 сер, 10 бронз), очков- 114
3: Юные сурки(2 зол, 0 сер, 5 бронз), очков- 39