Пример 5.3. Выяснить, есть ли в баскетбольных командах "Спартак" и "Зенит" игроки одинакового роста.

Система тестов  Обозначения:
  N -  количество игроков в команде "Спартак";

  M -  количество игроков в команде "Зенит";

  S(N) - массив ростов игроков команды "Спартак" (см);

  Z(N) - массив ростов игроков команды "Зенит" (см).

Номер теста Проверяемый случай Данные Результат
Спартак Зенит  Otvet
N S(N) M Z(M)
 1  Есть 3 200
195
205
4 198
200
206
192
"Есть игроки одинакового роста"
2  Нет 2 200
195
2 198
201
"Нет игроков одинакового роста"

Демонстрация

Школьный АЯ 
алг Рост (арг цел N, M, арг целтаб S[1:N],
  Z[1:M], резлит Otvet) 
нач цел i, j, лит Flag  
  i:=1; Flag:="Нет
  нц пока (i<=N) и (Flag="Нет") 
|цикл по игрокам "Спартака"  
  j:=1  
  нц пока (j<=M) и (Flag="Нет") 
|цикл по игрокам "Зенита"  
  если S[i]=Z[j] |проверка равенства ростов  
  то Flag:="Да"  
  иначе  j:=j+1  
  все 
  кц 
  i:=i+1  
  кц 
  если Flag="Да" 
  то Otvet:="Есть игроки одинакового роста"  
  иначе Otvet:="Нет игроков одинакового роста"  
  все 
кон 
Блок-схема (фрагмент) 

 Исполнение алгоритма
Обозначения проверяемых условий:
(i <= N) и (Flag = "Нет")  => (1)
 (j < i)  и (Flag = "Нет") => (2)

Номер  
теста
 i  Flag (1) j (2)  S[i]=Z[j] Otvet
1 1  "Нет"  
 "Да"
+  1 
 2
+
-
-(кц)
-
+
 
2    -(кц)       "Есть"
2 1  "Нет" + 1
2
3
+
+
-(кц)
-
-
 
2   + 1
2
3
+
+
-(кц)
-
-
 
3   -(кц)       "Нет"


 
Turbo Pascal

Program EqualHeight;
  Uses Crt;
  Type Mas = Array [1..20] of Integer;
  Var
  Spart, Zenit : Mas; {массивы ростов игроков}
  N, M, i, j : Integer; {N - к-во игроков "Спартака", M - "Зенита"}
  Flag : Boolean;
  Name : String;  {название команды}
{------------------------------------------}
Procedure Input(NCommand : Integer; Var Number : Integer; Var Rost:Mas);
{NCommand - номер команды (равен 1 или 2)}
 Begin {описание процедуры ввода данных по команде}
  If NCommand=1 then Name:='Спартак' else Name:='Зенит';
  Write('Введите количество игроков команды ', Name, ': ');
  ReadLn(Number);
  WriteLn('Введите роста игроков:');
  For i := 1 to Number do
  begin Write(i, ' игрок - '); ReadLn(Rost[i]) end;
  WriteLn
 End;
{------------------------------------------}
Procedure Search; {описание процедуры поиска решения задачи}
 Begin
i:=1; Flag:=FALSE;
While
(i<=N) and not Flag do {цикл по игрокам Спартака}
begin
j:=1;
While
(j<=M) and not Flag do {цикл по игрокам Зенита}
If
Spart[i]=Zenit[j] then Flag:=TRUE else j:=j+1;
i:=i+1
end;
 End;
{------------------------------------------------------------}
Procedure OutResult; {описание процедуры вывода результата}
  Begin
  Write('О т в е т : в командах Спартак и Зенит ');
  If
Flag then Write('есть игроки ') else Write('нет игроков ');
  WriteLn('одинакового роста.');
  ReadLn
  End;
{------------------------------------------}
BEGIN ClrScr; {вызов процедур}
  Input(1, N, Spart); {ввод данных для первой команды}
  Input(2, M, Zenit); {ввод данных для второй команды}
  Search; {поиск решения задачи}
  OutResult {вывод результата}
END.
 
QBasic

CLS
INPUT "Введите количество игроков команды Спартак : " , N
DIM Spart(N)
PRINT "Введите роста игроков:"
FOR i = 1 TO N
  PRINT i ; " игрок - " ; : INPUT Spart(i)
NEXT i
 
INPUT "Введите количество игроков команды Зенит : " , M
DIM Zenit(M)
PRINT "Введите роста игроков:"
FOR i = 1 TO M
  PRINT i ; " игрок - " : INPUT Zenit(i)
NEXT i
 
i = 1 : Flag = 0
WHILE
(i <= N) AND Flag = 0 'цикл по игрокам Спартака
  j = 1
  WHILE
(j <= M) AND Flag = 0 'цикл по игрокам Зенита
  IF
Spart(i) = Zenit(j) THEN Flag = 1 ELSE j = j + 1
  WEND
  i = i + 1
WEND
 
PRINT "О т в е т : в командах Спартак и Зенит ";
IF
Flag = 1 THEN PRINT "есть игроки "; ELSE PRINT "нет игроков ";
PRINT "одинакового роста."
END

Другие записи

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