Алгоритмы, реализуемые с помощью комбинации циклов типа ДЛЯ и ПОКА




Схема циклов типа пока /  для                      
нц пока <условие>
  тело внешнего цикла
    . . . . . .
  нц для i от A до B
    тело внутреннего цикла
  кц
    . . . . . .
кц
Схема циклов типа для / пока                      
нц для i от A до B
  тело внешнего цикла
    . . . . . .
  нц пока <условие>
    тело внутреннего цикла
  кц
    . . . . . .
кц

Пример 6.1. В заданной целочисленной матрице A(N, M) найти количество строк, содержащих нули.
 
Тест
 
Данные
Результат
N
M
Матрица А
К
3
3
 2
 
Демонстрация

Школьный АЯ

алг Строки с нулями (арг цел N, M, 
        арг цел таб A[1:N, 1:M], рез цел K)
   дано | N>0, M>0
нач цел i, j, лит Flag
  K := 0
  нц для i от 1 до N | цикл по всем строкам
    j:= 1; Flag := "Нет"
    нц пока (j <= M) и (Flag = "Нет")
           | цикл до нулевого элемента строки
       если A[i, j] = 0 
          то Flag:="Да"; K:=K+1
          иначе j:=j+1
       все
    кц
  кц
кон 
Исполнение алгоритма
Обозначение проверяемого условия:
(j<=M) и (Flag = "Нет" )  => (1)
i
Flag
j
(1)
A[i,j]=0
K
1
"Нет"
"Да"
1
2
+
+
-(кц)
-
+
0
1
2
"Нет"
1
2
3
4
+
+
+
-(кц)
-
-
-
 
3
"Нет"
"Да"
1
+
-(кц)
+
2

Turbo Pascal

Program ContainZero;
  Uses Crt;
  Var A          : Array[1..10, 1..10] of Integer;
      N, M, i, j : Integer;
      K          : Integer; {K - количество строк, содержащих нули} 
{--------------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода данных}
Begin
  ClrScr;
  Write('Количество строк - '); ReadLn(N);
  Write('Количество столбцов - '); ReadLn(M);
  For i := 1 to N do
    For j := 1 to M do
      begin Write('A[' , i , ' , ' , j , ']= ? ');
            ReadLn(A[i, j])
      end;
  WriteLn;  WriteLn('Исходная матрица :');
  For i := 1 to N do
    begin
      For j := 1 to M do Write(A[i, j] : 5);
      WriteLn
    end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Function Zero(i:Integer):Boolean; {описание функции, принимающей        }
   Var Flag : Boolean;            {значение Истина, если в строке есть  }
Begin                             {нули, и Ложь, если в строке нет нулей}
  j:=1; Flag:=FALSE;
  While (j<=M) and not Flag do
    If A[i, j]=0 then Flag:=TRUE else j:=j+1;
  Zero:=Flag               {значение функции присваивается имени функции}
End;
{--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода}
  K:=0;
  For i := 1 to N do 
    If Zero(i) then K:=K+1;       {Zero(i) - указатель функции Zero}
  WriteLn('Количество строк, содержащих нули, равно ', K); ReadLn
END.


QBasic

CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M : DIM A(N, M)
FOR i = 1 TO N
  FOR j = 1 TO M
    PRINT "A(" ; i ; ", " ; j ; ") = " ;
    INPUT A(i, j)
  NEXT j
NEXT i : CLS 
PRINT "Исходная матрица :" : PRINT
FOR i = 1 TO N
  FOR j = 1 TO M
    PRINT A(i, j) ;
  NEXT j : PRINT
NEXT i : PRINT
K = 0 
FOR i = 1 TO N                'цикл по всем строкам
  j = 1 : Flag = 0
  WHILE (j <= M) AND ( Flag = 0 ) 'цикл до нулевого элемента строки
    IF A(i, j) = 0 THEN Flag = 1: K = K + 1 ELSE j = j + 1
  WEND
NEXT i
PRINT "О т в е т : строк, содержащих нули, " ; K ; "."
END


Пример 6.2. Дана целочисленная матрица A(N, M). Определить, встречается ли заданное целое K среди максимальных элементов столбцов этой матрицы.

Система тестов

 
Номер теста
Проверяемый случай
Данные
Результат
K
N
M
Матрица А
 Otvet
1
Встречается
5
3
3
''Встречается''
2
Не встречается
1
2
2
''Не встречается''
 
Демонстрация


Школьный АЯ
алг Да или Нет(арг цел N,M,K, арг цел таб 
               A[1:N, 1:M], рез лит Otvet) 
   дано | N, M >0 
нач цел i, j, JMax, лит Flag 
  Flag:="Нет"; j:=1 
  нц пока (j<=M) и (Flag="Нет") 
          | цикл по столбцам с прерыванием 
    JMax:=A[1,j] 
    нц для i от 2 до N | цикл нахождения JMax 
      если A[i,j]>JMax 
        то JMax:=A[i, j] 
      все 
    кц 
    если K=JMax | условие прерывания цикла 
      то Flag:="Да"
      иначе j:=j+1
    все
  кц
  если Flag="Да"
    то Otvet := "Встречается"
    иначе Otvet := "Не встречается"
  все
кон
Блок-схема (фрагмент)

 Исполнение алгоритма
 
Обозначение проверяемого условия:
(j<=M) и (Flag = "Нет" ) => (1)
N теста
Flag
j
(1)
Jmax
I
A[i,j]>Jmax
K=Jmax
1
"Нет"
1
+
1
4
2
3
+
-
-
"Да"
2
+
-(кц)
5
2
3
-
-
+
2
"Нет"
1
2
3
+
+
-(кц)
2
1
2
2
2
-
+
-
-

Turbo Pascal

Program Checking; 
  Uses Crt; 
  Var A          : Array[1..10, 1..10] of Integer; 
      N, M, i, j : Integer; 
      K          : Integer; {заданное число} 
      JMax       : Integer; {максимальный элемент столбца} 
      Flag       : Boolean; 
{---------------------------------------------------} 
Procedure InputOutput; {описание процедуры ввода-вывода} 
 Begin 
  ClrScr; 
  Write('Введите целое K = '); ReadLn(K); WriteLn; 
  WriteLn('Введите целочисленную матрицу А'); 
  Write('Количество строк - '); ReadLn(N); 
  Write('Количество столбцов - '); ReadLn(M); 
  For i := 1 to N do 
    For j := 1 to M do 
      begin Write('A[' , i , ', ' , j , '] = '); 
            ReadLn(A[i, j]) 
      end; ClrScr;
  WriteLn('Исходная матрица :'); WriteLn; 
  For i := 1 to N do 
    begin 
      For j := 1 to M do Write(A[i, j] : 4); 
      WriteLn 
    end; WriteLn; 
End; { of InputOutput } 
{--------------------------------------------} 
Procedure YesOrNot(Var Flag:Boolean); {описание процедуры решения задачи} 
 Begin 
  Flag:=FALSE; j:=1; 
  While (j<=M) and not Flag do {цикл по столбцам с прерыванием} 
    begin JMax:=A[1, j]; 
      For i := 2 to N do {цикл нахождения JMax} 
        If A[i, j]>JMax then JMax:=A[i, j]; 
      If K=JMax then Flag:=TRUE else j:=j+1 {условие прерывания} 
    end; 
 End; 
{--------------------------------------------} 
BEGIN 
  InputOutput;    {вызов процедуры ввода-вывода исходных данных} 
  YesOrNot(Flag); {вызов процедуры решения задачи}
  Write('О т в е т : число ', K ); 
  If Flag then Write(' встречается')  
          else Write(' не встречается'); 
  WriteLn(' среди максимальных элементов столбцов матрицы'); 
  ReadLn 
END.


QBasic

CLS : INPUT "Введите целое K = ", K 
PRINT "Введите целочисленную матрицу А" 
INPUT "Количество строк - ", N 
INPUT "Количество столбцов - ", M 
DIM A(N, M) 
FOR i = 1 TO N 
  FOR j = 1 TO M 
    PRINT "A(" ; i ; ", " ; j ; ") = " ; 
    INPUT A(i, j) 
  NEXT j 
NEXT i : CLS 
PRINT "Исходная матрица " 
FOR i = 1 TO N 
  FOR j = 1 TO M 
    PRINT A(i, j); 
  NEXT j : PRINT 
NEXT i : PRINT
Flag = 0 : j = 1 
WHILE (j <= M) AND (Flag = 0) 'цикл по столбцам с прерыванием 
  JMax = A(1, j) 
  FOR i = 2 TO N 'цикл нахождения JMax 
    IF A(i, j) > JMax THEN JMax = A(i, j) 
  NEXT i 
  IF K = JMax THEN Flag = 1 ELSE j = j + 1 'условие прерывания 
WEND 
PRINT "О т в е т : число"; K; 
IF Flag = 1 THEN 
    PRINT "встречается"; 
  ELSE PRINT "не встречается"; 
END IF 
PRINT " среди максимальных элементов столбцов матрицы" 
END
 
Пример 6.3. Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит, что суммы чисел во всех её строках, всех столбцах и двух диагоналях одинаковы).

Система тестов

 
Номер теста
Проверяемый случай
Данные
Результат
N
Матрица А
Otvet
1
Является
3
''Магический квадрат''
2
Не является
2
''Не магический квадрат ''
 
Демонстрация
Школьный АЯ
алг Магический квадрат (арг цел N, арг цел таб A[1:N, 1:N], рез лит Otvet)
    дано | N>0
нач цел i, j, St, S, лит Flag 
  St:=0              | вычисление суммы элементов главной диагонали 
  нц для i от 1 до N | в качестве эталонной суммы St 
    St:=St+A[i, i] 
  кц
  Flag:="Да"; i:=1 
  нц пока (i<=N) и (Flag="Да") | вычисление сумм элементов строк 
    S:=0 
    нц для j от 1 до N 
      S:=S+A[i, j] 
    кц 
    если S<>St | сравнение суммы элементов текущей строки с эталонной 
      то Flag:="Нет" 
      иначе i:=i+1 
    все 
  кц
  j:=1 
  нц пока (j<=N) и (Flag="Да") | вычисление сумм элементов столбцов 
    S:=0 
    нц для i от 1 до N 
      S:=S+A[i, j] 
    кц 
    если S<>St                 |сравнение суммы элементов текущего 
      то Flag:="Нет"           |столбца с эталонной суммой 
      иначе j:=j+1 
    все 
  кц
  если Flag="Да" 
    то S:=0 | вычисление суммы элементов побочной диагонали 
      нц для i от 1 до N 
        S:=S+A[i, N+1-i] 
      кц 
      если S<>St | сравнение суммы с эталонной 
        то Flag:="Нет" 
      все 
  все 
  если Flag="Да" 
    то Otvet := "Это магический квадрат." 
    иначе Otvet := "Это не магический квадрат." 
  все 
кон
Блок-схема (фрагмент)
Вычисление суммы 
элементов главной 
диагонали в качестве 
эталонной суммы

Вычисление сумм 
элементов строк и 
сравнение их с 
эталонной суммой 
 
 
 

 

Блок-схема (продолжение)

 

Вычисление сумм 

элементов столбцов
и сравнение их с 
эталонной суммой 

 

 

 

 

Вычисление суммы 
элементов побочной 
диагонали и сравнение 
ее с эталонной суммой
Исполнение алгоритма
 
(в таблице отражен только конечный результат работы циклов типа для, в которых вычисляются суммы)
Обозначения проверяемых условий:
(i<=N) и (Flag = "ДА" )=> (1)
(j<=N) и (Flag = "ДА" )=> (2)
 Flag = "ДА"  => (3)

 

теста
St
Flag
i
(1)
j
(2)
(3)
S
S<>St
Otvet

1
6
"Да"
1
2
3
1,2,3
1,2,3
1,2,3
1,2,3
+
+
+
1,2,3
1,2,3
1,2,3
1
2
3
 
 

+
+
+

 
 

+

6
6
6
6
6
6
6
-
-
-
-
-
-
-

 
 

"Магический квадрат"

2
4
"Да"
"Нет"
1
+
-(кц)
1,2
1
-(кц)
-
3
+
"Не магический квадрат"

Turbo Pascal

Program MagicSquare; 
Uses Crt; 
Var A : Array [1..20, 1..20] of Integer; 
    i, j, N : Integer; 
    Standard, S : Integer; {Standard - сумма-эталон, S - текущая сумма} 
    Flag : Boolean; 
{-------------------------------------} 
Procedure InputOutput; {описание процедуры ввода-вывода матрицы} 
Begin 
  ClrScr; 
  Write('Количество строк и столбцов - '); 
  ReadLn(N); 
  For i := 1 to N do 
    For j := 1 to N do 
      begin Write('A[' , i , ', ' , j , '] = '); 
            ReadLn(A[i, j]) 
      end;
  ClrScr; 
  WriteLn('Исходная матрица :'); WriteLn; 
  For i := 1 to N do 
    begin 
      For j := 1 to N do Write(A[i, j] : 5); 
      WriteLn 
    end; WriteLn 
End; { of InputOutput } 
{-------------------------------------------} 
Procedure MagicOrNot(Var Flag : Boolean);          {описание процедуры, }
                 {в которой выясняется, является ли квадрат "магическим"} 
 Begin   {вычисление суммы элементов главной диагонали} 
         {в качестве эталонной суммы} 
  Standard:=0; 
  For i := 1 to N do Standard := Standard + A[i,i];
  Flag:=TRUE; i:=1; 
  While (i<=N) and Flag do {вычисление сумм элементов строк} 
    begin 
      S:=0; 
      For j := 1 to N do S := S+A[i, j]; 
      If S<>Standard then Flag := FALSE else i:=i+1 
    end;
  j:=1; 
  While (j<=N) and Flag do {вычисление сумм элементов столбцов} 
    begin 
      S:=0; 
      For i := 1 to N do S:=S+A[i, j]; 
      If S<>Standard then Flag := FALSE else j := j+1 
    end;
  If Flag then 
    begin 
      S:=0; {вычисление суммы элементов побочной диагонали} 
      For i := 1 to N do S := S+A[i, N+1-i]; 
      If S<>Standard then Flag := FALSE; 
    end; 
End; 
{--------------------------------------------------------} 
BEGIN 
  InputOutput; {Вызов процедуры ввода-вывода } 
  MagicOrNot(Flag); {Вызов процедуры решения задачи } 
  If Flag then WriteLn('Это магический квадрат.') 
          else WriteLn('Это не магический квадрат.'); 
  ReadLn 
END.


QBasic

CLS : INPUT "Количество строк и столбцов - ", N : DIM A(N, N)
FOR i = 1 TO N 
  FOR j = 1 TO N 
    PRINT "A(" ; i ; ", " ; j ; ") = "; : INPUT A(i, j) 
  NEXT j 
NEXT i : CLS
PRINT "Исходная матрица: " : PRINT 
FOR i = 1 TO N 
  FOR j = 1 TO N 
    PRINT A(i, j); 
  NEXT j : PRINT 
NEXT i : PRINT
Standard = 0 'вычисление суммы-эталона Standard 
FOR i = 1 TO N 
   Standard = Standard + A(i, i) 
NEXT i
Flag = 1 : i = 1 
WHILE (i <= N) AND (Flag = 1) 'вычисление сумм элементов строк 
  S = 0 
  FOR j = 1 TO N 
    S = S + A(i, j) 
  NEXT j 
  IF S <> Standard THEN Flag = 0 ELSE i = i + 1 
WEND
j = 1 
WHILE (j <= N) AND (Flag = 1) 'вычисление сумм элементов столбцов 
  S = 0 
  FOR i = 1 TO N 
    S = S + A(i, j) 
  NEXT i 
  IF S <> Standard THEN Flag = 0 ELSE j = j + 1 
WEND
IF Flag = 1 THEN 
  S = 0 'вычисление суммы элементов побочной диагонали 
  FOR i = 1 TO N 
    S = S + A(i, N + 1 - i) 
  NEXT i 
END IF  
IF S <> Standard THEN Flag = 0
IF Flag = 1 THEN PRINT "Это магический квадрат." 
  ELSE PRINT "Это не магический квадрат." 
END IF : PRINT 
END


Пример 6.4. Дана матрица A(N, N). Если хотя бы один элемент строки матрицы отрицателен, то все элементы этой строки заменить нулями.

Тест

Данные
Результат
N
Матрица А
Матрица А
3
Демонстрация
Школьный АЯ
(в этом алгоритме отражены процессы  ввода  исходных данных и вывода результатов )
алг Модификация(арг цел N, арг рез 
                вещ таб A[1:N, 1:N])
  дано | N>0
  надо | элементы строк, содержащих отрица-
       | тельные числа, заменены на нули
нач цел i, j, лит Flag
  ввод N
  нц для i от 1 до N
    нц для j от 1 до N
       ввод A[i,j]
    кц
  кц
  нц для i от 1 до N | цикл по строкам 
    j := 1; Flag := "Нет"
    нц пока (j<=N) и (Flag = "Нет") |цикл до 
       если A[i, j]<0    |первого отрицат.
         то Flag := "Да" |элемента строки
         иначе j:=j+1
       все
    кц
    если Flag = "Да" |обнуление строки
      то нц для j от 1 до N
          A[i, j]:=0
         кц
    все
  кц
  нц для i от 1 до N
    нц для j от 1 до N
       вывод A[i,j]
    кц
  кц
кон
Блок-схема (фрагмент)
Исполнение алгоритма
 
Обозначение проверяемого условия:
(j<=N) и (Flag = "Нет")=> (1)
i
Flag
j
(1)
A[i,j]<0
Flag="Да"
A[i,j]
1
"Нет"
"Да"
1
2
1
2
3
+
+
-(кц)
-
+
+

A[1,1]=0
A[1,2]=0
A[1,3]=0
2
"Нет"
1
2
3
4
+
+
+
-(кц)
-
-
-
-
 
3
"Нет"
"Да"
1
1
2
3
+
-(кц)
+
+
A[3,1]=0
A[3,2]=0
A[3,3]=0

Turbo Pascal

Program Modify;
 Uses Crt;
 Var A       : Array[1..10, 1..10] of Real;
     N, i, j : Integer;
{-------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода матрицы}
 Begin ClrScr;
   Write(’Количество строк и столбцов – ’); ReadLn(N);
   For i := 1 to N do
     For j := 1 to N do
       begin Write(’A[’ , i , ’, ’ , j , ’] = ’);
             ReadLn(A[i, j])
       end; ClrScr;
   WriteLn(’ Исходная матрица :’); WriteLn;
   For i := 1 to N do
     begin
       For j := 1 to N do Write(A[i, j] : 5 : 1);
       WriteLn
     end; WriteLn
 End; { of InputOutput }
{-------------------------------------------}
Procedure Line(Var i : Integer);         {описание процедуры обработки}
 Var Flag : Boolean;                     {строки матрицы              }
 Begin
   j := 1; Flag := FALSE;
   While (j<=N) and not Flag do           {цикл до первого отрицательного}
     If A[i, j]<0 then Flag:=TRUE else j:=j+1;           {элемента строки}
   If Flag then                      {обнуление строки, содержашей}
     For j := 1 to N do A[i, j] := 0 {отрицательные элементы      }
End;
{-------------------------------------------}
Procedure OutRes; {описание процедуры вывода матрицы-результата}
 Begin
   WriteLn(’ Матрица-результат :’); WriteLn;
   For i := 1 to N do
     begin
       For j := 1 to N do Write(A[i, j]:5:1);
       WriteLn
     end; ReadLn
 End; { of OutRes }
{-------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода матрицы}
  For i := 1 to N do Line(i);{циклический вызов процедуры обработки строк}
  OutRes;      {вызов процедуры вывода матрицы-результата}
END.


QBasic

CLS : INPUT "Количество строк и столбцов - ", N
DIM A(N, N)
FOR i = 1 TO N ’ввод матрицы
  FOR j = 1 TO N
    PRINT "A(" ; i ; ", " ; j ; ") = " ;
    INPUT A(i, j)
  NEXT j
NEXT i : CLS
PRINT "Исходная матрица :" : PRINT
FOR i = 1 TO N ’вывод матрицы
  FOR j = 1 TO N
    PRINT A(i, j) ;
  NEXT j
  PRINT
NEXT i : PRINT
FOR i = 1 TO N ’цикл по строкам матрицы
  j = 1 : Flag=0
  WHILE (j <= N) AND (Flag = 0) ’цикл до первого отрицательного
   IF A(i, j) < 0 THEN Flag = 1 ELSE j = j + 1 ’элемента строки
  WEND
  IF Flag = 1 THEN    ’обнуление строки, содержащей
    FOR j = 1 TO N    ’отрицательные элементы
      A(i, j) = 0
    NEXT j
  END IF
NEXT i
PRINT "Матрица-результат :" : PRINT   ’вывод матрицы-результата
FOR i = 1 TO N
  FOR j = 1 TO N
    PRINT A(i, j) ;
  NEXT j : PRINT
NEXT i
END


Задачи для самостоятельного решения

6.1. [Pascal | C | Basic]  Дана матрица  A(N, N) . Переменной  В  присвойте значение, равное количеству строк матрицы А, содержащих хотя бы одну нулевую компоненту.

6.2. [Pascal | C | Basic]  Дана матрица  B(N, N) . Получите вектор  A(N) , компоненты которого находятся по правилу:   Ai  равно первому по порядку положительному элементу в  i-ой строке матрицы (если таких элементов в строке нет, то примите  Ai = -1).

6.3. [Pascal | C | Basic]  Дана матрица  B(N, N). Получите вектор  A(N), компоненты которого находятся по правилу:  Ai равно количеству отрицательных чисел, с которых начинается i-ая строка.

6.4. [Pascal | C | Basic]  Среди строк заданной целочисленной матрицы, содержащих только нечётные элементы, найдите строку с максимальной суммой модулей элементов.

6.5. [Pascal | C | Basic]  Среди столбцов заданной целочисленной матрицы, содержащих только такие элементы, которые по модулю не больше 10, найдите столбец с минимальным произведением элементов.

6.6. [Pascal | C | Basic]  Задано два множества точек на плоскости. В первом множестве найдите хотя бы одну точку, сумма расстояний от которой до точек второго множества превышала бы заданную величину.

6.7. [Pascal | C | Basic]  В заданной матрице  A(N, M)  найдите количество строк, не содержащих отрицательных чисел.

6.8. [Pascal | C | Basic]  Дана целочисленная матрица  А(N, N) . Сформируйте результирующий вектор  B , элементами которого являются суммы элементов только тех строк матрицы  А , которые начинаются с  К  положительных чисел подряд.

6.9. [Pascal | C | Basic]  Подсчитайте количество столбцов заданной целочисленной матрицы  A(N, N) , в которых имеются взаимнопротивоположные соседние числа.

6.10. [Pascal | C | Basic]  Дана матрица  A(N, M) . Постройте вектор  B(N) , элементы  Bi  которого равны единице, если элементы  i-ой строки образуют упорядоченную по убыванию или по возрастанию последовательность, и нулю во всех остальных случаях.

6.11. [Pascal | C | Basic]  Определите, сколько строк заданной матрицы  A(N, M)  содержат хотя бы один элемент из заданного числового диапазона.

6.12. [Pascal | C | Basic]  Найдите номера строк заданной целочисленной матрицы  A(N, M) , в которых:
   а) на всех нечётных позициях стоят нули;
   б) на нечетных позициях встречаются нули.

6.13. [Pascal | C | Basic]  Найдите номера столбцов заданной целочисленной матрицы  A(N, M),  которые составлены из попарно различных чисел, и подсчитайте количество таких столбцов.

6.14. [Pascal | C | Basic]  Подсчитайте количество различных (не повторяющихся) чисел, встречающихся в заданном целочисленном массиве  A(N)

6.15. [Pascal | C | Basic]  Подсчитайте количество различных (не повторяющихся) чисел, встречающихся в заданной целочисленной матрице  A(N, M) .

6.16. [Pascal | C | Basic]  Даны сведения о количестве забитых голов каждого футболиста команды в каждом из матчей чемпионата. Проверьте, сколько в команде есть футболистов:
   а) забивших хотя бы два гола;
   б) забивавших голы в каждом матче;
   в) не забивших ни одного гола.

6.17. [Pascal | C | Basic]  Используя сведения о ежемесячных выплатах зарплаты сотрудникам фирмы, выясните, не оказалась ли годовая зарплата кого-либо из сотрудников ниже годового минимума, оговоренного в его контракте.

6.18. [Pascal | C | Basic]  Используя сведения о результатах сдачи n вступительных экзаменов  m  абитуриентами, определите, сколько абитуриентов сдали все экзамены на "отлично".

6.19. [Pascal | C | Basic]  Используя сведения о размере обуви каждого члена баскетбольной команды, а также сведения о наличии в обувном магазине размеров спортивной обуви, определите, сколько членов команды можно обуть в этом магазине.

6.20*. [Pascal | C | Basic]  Найдите максимальное из чисел, встречающихся в заданной матрице более одного раза.

6.21*. [Pascal | C | Basic]  Подсчитайте количество строк заданной целочисленной матрицы А(5,5), являющихся перестановкой чисел   1, 2, ..., 5.

6.22. [Pascal | C | Basic]  Из массива  A(N) , состоящего из натуральных чисел, получите массив  B(N) , элементами которого являются разрядности элементов массива  A(N) .

6.23. [Pascal | C | Basic]  Задана последовательность  N  вещественных чисел. Определите, можно ли так переставить ее элементы, чтобы они образовали геометрическую прогрессию.

6.24. [Pascal | C | Basic]  В заданном одномерном массиве удалите каждый третий положительный элемент.

6.25. [Pascal | C | Basic]  В каждой строке матрицы  A(N, N)  определите наибольшее простое число. Если в строке нет простых чисел, выдайте соответствующее сообщение.

6.26. [Pascal | C | Basic]  Задана квадpатная таблица  А(N, N) , элементами котоpого являются нули и единицы. Подсчитайте в ней:
   а) количество квадpатов pазмеpом 3 на 3, в котоpых есть не менее пяти нулей;
   б) количество стpок, в котоpых есть тpи нуля, pасположенных pядом;
   в) количество столбцов, в котоpых нули и единицы чеpедуются;
   г) количество единичных столбцов и количество нулевых стpок.

6.27. [Pascal | C | Basic] Пифагоровыми называются тройки натуральных чисел  a, b, с , удовлетворяющие условию:  a2 + b2 = c2 . Например, пифагоровой является тройка чисел 6, 8, 10. Найдите все тройки пифагоровых чисел, не превышающих 25.

6.28. [Pascal | C | Basic]  Совершенными называются числа, равные сумме своих делителей. Например, совершенным является число  28 , равное 1 + 2 + 4 + 7 + 14. Найдите все совершенные числа в интервале [1, 1000].