Паскаль ABC.Net Помогите,пожалуйста:Сведения о поездах содержат следующую информацию:...

0 голосов
51 просмотров

Паскаль ABC.Net Помогите,пожалуйста:Сведения о поездах содержат следующую информацию: номер поезда, город отправления, город назначения, расстояние, средняя скорость, количество остановок. Создать массив записей (из 6-10 элементов) и заполнить его данными. Найти номер поезда, отправляющегося из Москвы, который проводит в пути больше времени, чем остальные, если время стоянки на каждой остановке – 15 минут. Решить эту же задачу с использованием очереди (вместо массива).


Информатика (32 баллов) | 51 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
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)
(150k баллов)