Из партии шин отобрать две шины, диаметры которых отличаются не более, чем на D см, а вес — не более, чем на W грамм — Pascal(Паскаль)

{        Пример 5.4. Из партии шин отобрать две шины, диаметры
                     которых отличаются не более, чем на D см,
                     а вес - не более, чем на W грамм.

                                Система тестов
       ╔═══════╤════════╤══════════════════════════════════╤═══════════╗
       ║       │        │              Данные              │           ║
       ║ Номер │ Прове- ├──────┬────────┬─────┬────────────┤           ║
       ║ теста │ ряемый │Колич.│        │     │  Допуски   │ Результат ║
       ║       │ случай │ шин  │Диаметры│ Вес ├──────┬─────┤           ║
       ║       │        │      │        │     │ диам.│ вес │           ║
       ╟───────┼────────┼──────┼────────┼─────┼──────┼─────┼───────────╢
       ║       │ "Есть  │      │  103   │  98 │      │     │           ║
       ║   1   │  такие │  4   │  100   │ 100 │  1   │  1  │"2-я и 3-я ║
       ║       │  шины" │      │   99   │ 101 │      │     │   шины"   ║
       ║       │        │      │  101   │  99 │      │     │           ║
       ╟───────┼────────┼──────┼────────┼─────┼──────┼─────┼───────────╢
       ║       │ "Нет   │      │  100   │ 100 │      │     │"Подходящих║
       ║   2   │  таких │  3   │   98   │ 100 │  1   │  1  │  шин нет" ║
       ║       │  шин"  │      │  100   │  98 │      │     │           ║
       ╚═══════╧════════╧══════╧════════╧═════╧══════╧═════╧═══════════╝
}
  Program MyTyres;
    Uses Crt;
    Type Mas = Array [1..100] of Real;
    Var
      Number, i, j     : Integer; { Number - количество шин    }
      Diameter, Weight : Mas;     { массивы параметров шин     }
      First, Second    : Integer; { номера отобранных шин      }
      Flag             : Boolean;
      D, W             : Real;    {D, W - допуски по параметрам}
  {-------------------------------------------------------}
  Procedure InputOutput; {описание процедуры ввода-вывода данных}
   Begin
    ClrScr;
    Write('Количество шин : '); ReadLn(Number);
    WriteLn('Параметры шин : ');
    For i := 1 to Number do
      begin
        Write(i, '-ая шина: Диаметр - ');   ReadLn(Diameter[i]);
        Write('         Вес - ');   ReadLn(Weight[i])
      end; WriteLn;

    Write('Допуск по диаметру : '); ReadLn(D);
    Write('Допуск по весу : '); ReadLn(W);

    WriteLn; WriteLn(' Пapаметры шин ');
    WriteLn('N шины   Диаметр   Вес');
    For i := 1 to Number do
       WriteLn(i:4, Diameter[i]:10:1, Weight[i]:10:1);
    WriteLn
  End; { of InputOutput }
  {----------------------------------------------------------}
  Procedure YesNo(Var First, Second : Integer; Var Flag : Boolean);
  Begin        { описание процедуры поиска решения задачи }
    i:=1; Flag := FALSE;
    While (i<=Number-1) and not Flag do  { цикл по первой шине из пары }
      begin
        j := i+1;
        While(j<=Number) and not Flag do { цикл по второй шине из пары }
          If (Abs(Diameter[i]-Diameter[j]) <= D)
              and (Abs(Weight[i]-Weight[j]) <= W)
            then begin Flag:=TRUE; First:=i; Second:=j end
            else j := j+1;

        i:=i+1
      end;
  End; {of YesNo }
  {----------------------------------------------------------}
  BEGIN
    InputOutput;        { Вызов процедуры ввода-вывода исходных данных }
    YesNo(First, Second, Flag);{ Вызов процедуры поиска решения задачи }

    WriteLn('О т в е т :');
    If Flag then WriteLn('По параметрам подходят друг другу ',
                          First, '-ая и ', Second, '-ая шины.')
            else WriteLn('Шин, подходящих друг другу, в партии нет.');
    ReadLn
  END.

Leave a Comment

53 − 48 =