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