Пример 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, 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