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

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

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