1. Вариант с массивом
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
type
Поезд=record
номер_поезда:string;
город_отправления:string;
город_назначения:string;
расстояние:integer;
средняя_скорость:real;
количество_остановок:integer
end;
begin
var n:=ReadlnInteger('Количество поездов:');
var tr:=new Поезд[n];
Writeln('Вводите построчно информацию о каждом поезде через пробел:');
Writeln('Номер поезда, город отправления, город назначения, ');
Writeln('расстояние, средняя скорость, количество остановок');
var s:string;
for var i:=0 to n-1 do begin
Write(i+1,': '); Readln(s);
var w:=s.ToWords;
tr[i].номер_поезда:=w[0];
tr[i].город_отправления:=w[1];
tr[i].город_назначения:=w[2];
tr[i].расстояние:=w[3].ToInteger;
tr[i].средняя_скорость:=w[4].ToReal;
tr[i].количество_остановок:=w[5].ToInteger
end;
var tmax:=0.0;
var k:integer;
var t:real;
for var i:=0 to n-1 do
if tr[i].город_отправления='Москва' then begin
t:=tr[i].расстояние/tr[i].средняя_скорость+
0.25*tr[i].количество_остановок;
if t>tmax then (tmax,k):=(t,i)
end;
Println(tr[k])
end.
2. Вариант с очередью
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!
type
Поезд=record
номер_поезда:string;
город_отправления:string;
город_назначения:string;
расстояние:integer;
средняя_скорость:real;
количество_остановок:integer
end;
begin
var n:=ReadlnInteger('Количество поездов:');
var tr:=new Queue<Поезд>;
var b:Поезд;
Writeln('Вводите построчно информацию о каждом поезде через пробел:');
Writeln('Номер поезда, город отправления, город назначения, ');
Writeln('расстояние, средняя скорость, количество остановок');
var s:string;
for var i:=0 to n-1 do begin
Write(i+1,': '); Readln(s);
var w:=s.ToWords;
b.номер_поезда:=w[0];
b.город_отправления:=w[1];
b.город_назначения:=w[2];
b.расстояние:=w[3].ToInteger;
b.средняя_скорость:=w[4].ToReal;
b.количество_остановок:=w[5].ToInteger;
tr.Enqueue(b)
end;
var tmax:=0.0;
var bmax:Поезд;
var t:real;
for var i:=1 to tr.Count do begin
b:=tr.Peek;
if b.город_отправления='Москва' then begin
t:=b.расстояние/b.средняя_скорость+
0.25*b.количество_остановок;
if t>tmax then (tmax,bmax):=(t,b)
end;
tr.Dequeue
end;
Println(bmax)
end.
Пример работы
Количество поездов: 3
Вводите построчно информацию о каждом поезде через пробел:
Номер поезда, город отправления, город назначения,
расстояние, средняя скорость, количество остановок
1: 020с Москва Ростов 1130 69.97 5
2: 025Б Москва Минск 750 79.78 9
3: 037Н Томск Екатеринбург 1852 77.97 17
(020с,Москва,Ростов,1130,69.97,5)