[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 5.4. Из партии шин отобрать две шины, диаметры которых отличаются не более, чем на D см, а вес — не более, чем на W грамм.
 
Система тестов
 
N теста
Проверяемый случай
Данные
Результат
N шины
Диаметр
Вес
Допуски
Otvet
диам.
вес
1
Есть такие шины
1
2
3
4
103
100
99
101
98
100
101
99
 1
 1
"2-я и 3-я шины"
 2
Нет таких шин
1
2
3
100
98
100
100
100
98
1
1
"Подходящих шин нет"
 
Демонстрация

Школьный АЯ

алг МоиШины (арг цел N, арг вещ таб Диам[1 : N] , Вес[1 : N] , 
             арг вещ ДопДиам, ДопВес, рез цел Шина1, Шина2, 
             рез лит Otvet) 
нач цел i, j, лит Flag 
  i:=1; Flag:="Нет" 
  нц пока (i< =N-1) и (Flag="Нет") | цикл по первой шине из пары 
    j:=i+1 
    нц пока (j< =N) и (Flag="Нет") | цикл по второй шине из пары 
      если (abs(Диам[i] - Диам[j]) <= ДопДиам)  | условие соче- 
          и (abs(Вес[i] - Вес[j]) <= ДопВес )   | таемости шин 
        то Flag:="Да"; Шина1:=i; Шина2:=j 
        иначе  j:=j+1 
      все 
    кц 
    i:=i+1 
  кц
  если Flag="Да" 
    то Otvet := "По параметрам подходят друг другу " 
             + Шина1 + "-ая и " + Шина2 + "-ая шины." 
    иначе  Otvet := "Шин, подходящих друг другу, в партии нет." 
  все
кон
Исполнение алгоритма 
 
Обозначения проверяемых условий:
(i <= N-1) и (Flag = "Нет")   => (1) 
(i < N) и (Flag = "Нет")    => (2) 
(abs(Диам[i] - Диам[j]) <= ДопДиам)  
и (abs(Вес[i] - Вес[j]) <= ДопВес) => (3) 
 
N теста
i
Flag
(1)
j
(2)
(3)
Шина 1
Шина 2
1
1
"Нет"
+
2
3
4
5
+
+
+
-(кц)
-
-
-
   
2
"Да"
+
3
+
-(кц)
+
2
3
3
 
-(кц)
         
 2
1
 
"Нет"
+
2
3
4
+
+
-(кц)
-
-
   
2
 
+
3
4
+
+
-
   
3
 
-(кц)
         
 
Блок-схема (фрагмент)
Turbo Pascal
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.
 
QBasic
CLS : INPUT "Количество шин : " , Number
DIM Diam(Number), Weight(Number) 
PRINT "Параметры шин :"
FOR i = 1 TO Number
  PRINT i; "-ая шина: " ; : INPUT "Диаметр - " , Diam(i)
  PRINT TAB(14);
  INPUT " Вес - ", Weight(i)
NEXT i : PRINT 
INPUT "Допуск по диаметру : " , D
INPUT "Допуск по весу : " , W 
PRINT : PRINT TAB(11); "Пapаметры шин"
PRINT "N шины Диаметр Вес"
FOR i = 1 TO Number
  PRINT TAB(3) ; i , Diam(i) , Weight(i)
NEXT i : PRINT 
i = 1 : Flag = 0
WHILE (i <= Number-1) AND (Flag = 0)
  j = i + 1
  WHILE (j <= Number) AND (Flag = 0)
    IF (ABS(Diam(i)-Diam(j))<=D) AND (ABS(Weight(i)-Weight(j))<=W) THEN
         Flag = 1 : First = i : Second = j
       ELSE j = j + 1
    END IF
  WEND
  i = i + 1
WEND 
PRINT : PRINT "О т в е т :"
IF Flag = 1 THEN
      PRINT "По параметрам подходят друг другу ";
      PRINT First; "-ая и "; Second; "-ая шины."
  ELSE PRINT "Шин, подходящих друг другу, нет."
END IF
END

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]