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




 
Язык Схемы вложенных циклов типа для
Школьный АЯ   нц для i от A1 до B1 
      тело внешнего цикла 
      . . . . . . 
      нц для j от A2 до B2 
          тело внутреннего цикла 
           . . . . . . 
      кц
      . . . . . . 
  кц
Pascal   For i := A1 to B1 do
      begin  . . . . . . 
          For j := A2 to B2 do
              begin 
                   . . . . . . 
              end; 
           . . . . . . 
      end; 
Basic   FOR I = A1 TO B1 STEP H1 
      . . . . . . 
      FOR J = A2 TO B2 STEP H2 
           . . . . . . 
      NEXT
       . . . . . . 
  NEXT

Вложенные циклы типа для особенно часто используются при обработке матриц (двумерных массивов, прямоугольных таблиц) и векторов (одномерных массивов, линейных таблиц):

 
 
 
Пример 3.1. Вычислить суммы элементов столбцов заданной матрицы A(N, M).
 
Тест
 
Данные
Результат
N=2 
M=2
A=
S=(6,74)
 
Демонстрация
Школьный АЯ 
алг Суммы столбцов (арг цел N, M, арг вещ таб A[1:N, 1:M],
                    рез вещ таб S[1:M])
  дано | N>0, M>0
нач цел i, j
  нц для j от 1 до M | цикл по столбцам
    S[j]:=0
    нц для i от 1 до N | цикл по элементам
      S[j]:=S[j] + A[i, j] |текущего столбца
    кц
  кц
кон
Исполнение алгоритма 
 
j
i
S[i]
 
1
 
 
1
2
S1=0
S1=0+2=2
S1=2+4=6
 
2
 
 
1
2
S2=0
S2=0+1=1
S2=1+3=4
 
Блок-схема 
Turbo Pascal
Program SumColumn;
  Uses Crt;
  Var A          : Array [1..10, 1..10] of Real;
      N, M, i, j : Integer;
      S          : Array [1..10] of Real;
  {--------------------------------------------}
  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;
      ClrScr;
      WriteLn(' Матрица А');
      For i := 1 to N do {Вывод матрицы по строкам}
        begin
          For j := 1 to M do Write(A[i, j] : 5 : 1); {вывод i-ой строки}
          WriteLn {перенос курсора на начало следующей строки}
        end; WriteLn
    End; { of InputOutput }
  {--------------------------------------------}
  Procedure SumCol;
    Begin {описание процедуры вычисления сумм элементов столбцов}
      For j := 1 to M do {цикл по столбцам матрицы}
        begin
          S[j] := 0; {обнуление суммы элементов j-го столбца}
          For i := 1 to n do S[j] := S[j] + A[i, j] {накопление суммы}
        end;
    End; { of SumCol }
  {--------------------------------------------}
  Procedure OutResult; {описание процедуры вывода результатов}
    Begin
      Write( 'О т в е т : Суммы элементов столбцов равны ');
      For j := 1 to M do Write(S[j] : 5 : 1); WriteLn; ReadLn
    End; { of OutResult }
  {--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода исходных данных }
  SumCol; {вызов процедуры вычисления сумм }
  OutResult; {вызов процедуры вывода результатов}
END.
 
QBasic
CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M), S(M) 'Резервирование памяти для матрицы A и вектора S
FOR i = 1 TO N 'Ввод матрицы
  FOR j = 1 TO M
    PRINT "A(" ; i ; ", " ; j ; ") = ";
    INPUT A(i, j)
  NEXT j
NEXT i
FOR j = 1 TO M 'Вычисление сумм элементов столбцов
  S(j) = 0
  FOR i = 1 TO N
    S(j) = S(j) + A(i, j)
  NEXT i
NEXT j
PRINT "О т в е т : Суммы элементов столбцов равны ";
FOR j = 1 TO M
  PRINT S(j);
NEXT j : PRINT
END
 
 
Пример 3.2. Подсчитать, сколько раз встречается в заданной целочисленной матрице A(N, M) максимальное по величине число.
 
Тест
 
Данные
Результат
N=2 
M=3
A=
K=3
 
Демонстрация
Школьный АЯ
алг Количество максимумов(арг цел N,M, арг цел таб А[1:N,1:M], рез цел K)
нач цел i, j, Amax
  Amax := A[1, 1] | Поиск максимального элемента матрицы
  нц для i от 1 до N
    нц для j от 1 до M
      если A[i, j] > Amax
        то Amax := A[i, j]
      все
    кц
  кц 

  K := 0 | подсчет количества вхождений Amax
  нц для i от 1 до N
    нц для j от 1 до M
      если A[i, j] = Amax
        то K := K+1
      все
    кц
  кц
кон
Исполнение алгоритма
i
j
A[i,j]>Amax
Amax
 
1
 
 
2
 
1
2
3
1
2
3
 
-
+
+
-
-
-
1
 
2
5
 
 
 
 
(продолжение)
i
j
A[i,j]=Amax
K
1
 
 
2
1
2
3
1
2
3
-
-
+
+
-
+
0
 
1
2
 
3
 
Блок-схема (фрагмент) 
 Turbo Pascal
Program NumberOfMaximums;
  Uses Crt;
  Type Mas = Array [1..10, 1..10] of Integer;
  Var A                   : Mas;
      N, M, K, Amax, i, j : Integer; {K - искомый результат}
{--------------------------------------------}
  Procedure InputOutput(Var A : Mas);
    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;
      ClrScr;  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 }
    {--------------------------------------------}
  Procedure MaxElement(Var A : Mas; Var Amax : Integer);
    Begin {описание процедуры поиска Amax}
      Amax := A[1, 1];
      For i := 1 to N do
        For j := 1 to M do
          If A[i, j] > Amax then Amax := A[i, j];
    End; {of MaxElement}
    {--------------------------------------------}
  Procedure HowMuch(Var A : Mas; K : Integer);
    Begin {описание процедуры подсчета числа вхождений Amax}
      K:=0;
      For i := 1 to N do
        For j := 1 to M do
          if A[i, j] = Amax then K := K+1;
      WriteLn('Максимальное число ', Amax : 3 ,
              ' встречается ', K, ' раз(a)'); ReadLn;
    End; {of HowMuch}
{--------------------------------------------}
BEGIN
  InputOutput(A);      {Вызов процедуры ввода-вывода матрицы}
  MaxElement(A, Amax); {Вызов процедуры поиска макс. элемента}
  HowMuch(A, K)        {Вызов процедуры подсчета числа
                        вхождений максимального элемента }
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 "Матрица А"
FOR i = 1 TO N 'Вывод матрицы
  FOR j = 1 TO M
    PRINT A(i, j) ;
  NEXT j
  PRINT
NEXT i : PRINT
Amax = A(1, 1) 'Поиск максимального элемента
FOR i = 1 TO N
  FOR j = 1 TO M
    IF A(i, j) > Amax THEN Amax = A(i, j)
  NEXT j
NEXT i
K = 0 'Подсчет числа вхождений Amax
FOR i = 1 TO N
  FOR j = 1 TO M
    IF A(i, j) = Amax THEN K = K + 1
  NEXT j
NEXT i
PRINT "Максимальное число " ; Amax ;
PRINT " встречается " ; K ; " раз(a)"
END
 
Пример 3.3. В заданной матрице A(N, M) поменять местами строки с номерами P и Q
(1 <= P <= N, 1 <= Q <= N).
 
Тест
 
Данные
Результат
N=3 M=3 P=1 Q=3 
 
Демонстрация
Школьный АЯ
алг Поменять местами строки (арг цел N, M, арг цел P, Q,
                             арг рез вещ таб А[1:N, 1:M] )
нач цел j, вещ Tmp
  нц для j от 1 до M | цикл по элементам строк матрицы
    Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp
  кц
кон
Исполнение алгоритма
 
j
Tmp
A[1,j]
A[3,j]
1
2
3
1
2
1
3
1
3
1
2
1
 
Блок-схема (фрагмент) 
Turbo Pascal
Program Exchange;
  Uses Crt;
  Type Mas = Array [1..10, 1..10] of Real;
  Var A   : Mas;
  N, M, P, Q, i, j : Integer;
  Tmp   : Real;
{--------------------------------------------------------------}
 Procedure InputOutput(Var A:Mas); {описание процедуры ввода-вывода}
  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 , '] = ? ');
              Read(A[i, j])
        end; WriteLn; 
    WriteLn('Номера строк, которые нужно поменять местами :');
    Write('P = '); ReadLn(P); Write('Q = '); ReadLn(Q); WriteLn; 
    ClrScr; WriteLn('Исходная матрица : ' ) ;
    For i := 1 to N do
      begin
        For j := 1 to M do Write(A[i, j] : 5 : 1);
        WriteLn
      end; WriteLn
  End; { of InputOutput}
{--------------------------------------------------------}
 Procedure Change(P, Q: Integer); {описание процедуры замены строк }
  Begin
    For j := 1 to M do
      begin Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp end;
  End; { of Change}
{--------------------------------------------------------}
 Procedure OutRes(Var A:Mas); {описание процедуры вывода результатов}
  Begin
    WriteLn('Матрица-результат :');
    For i := 1 to N do
      begin
        For j := 1 to M do Write(A[i, j] : 5 : 1) ;
        WriteLn
      end; ReadLn
  End; { of OutRes}
{--------------------------------------------------------}
BEGIN
  InputOutput(A); {вызов процедуры ввода-вывода исходных данных}
  Change(P, Q); {вызов процедуры замены строк }
  OutRes(A) {вызов процедуры вывода результатов}
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 : PRINT
INPUT "P = " , P : INPUT "Q = " , Q
CLS : PRINT "Исходная матрица :"
FOR i = 1 TO N 'Вывод матрицы
  FOR j = 1 TO M
    PRINT A(i, j) ;
  NEXT j
  PRINT
NEXT i
FOR j = 1 TO M 'Замена строк
  Tmp=A(P,j):A(P,j)=A(Q,j):A(Q,j)=Tmp
NEXT j
PRINT : PRINT "Матрица-результат :"
FOR i = 1 TO N 'Вывод результата
  FOR j = 1 TO M
    PRINT A(i, j) ;
  NEXT j
  PRINT ' переход на новую строку
NEXT i
END
Результаты работы QBasic-программы
 
Исходная матрица:
1 2 1
2 2 2
3 1 3
Матрица-результат:
3 1 3
2 2 2
1 2 1
 
 
Пример 3.4. Элементы заданного числового массива a1, a2, ..., aN  упорядочить по возрастанию.
 
Тест
 
Данные
Результат
N=4
A=(5, 2, 7, 1)
A=(1, 2, 5, 7)
 
Демонстрация
Школьный АЯ 
алг Возрастание(арг цел N, арг рез 
                вещ таб A[1:N])
нач цел i, j, вещ Tmp
  нц для i от 1 до N-1
    нц для j от i+1 до N
      ecли A[i] > A[j]
        то Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp
      все
    кц
  кц
кон
Исполнение алгоритма 
 
i
j
A[i]>A[j]
Массив A
1
2
3
4
+
-
+
2, 5, 7, 1
 
1, 5, 7, 2
2
3
4
-
+
 
1, 2, 7, 5
3
4
+
1, 2, 5, 7
 
Блок-схема (фрагмент) 
Turbo Pascal
Program Regulation;
  Uses Crt;
  Type Mas = Array [1..10] of Real;
  Var A       : Mas;
      i, j, N : Integer;
      Tmp     : Real;
   {--------------------------------------------}
  Procedure Input; {описание процедуры ввода массива }
    Begin
      ClrScr;
      Write('Введите N = '); ReadLn(N);
      WriteLn('Введите элементы массива: ');
      For i := 1 to N do
        begin Write('A [ ' , i , ' ] = ');
              ReadLn(A[i])
        end;
    End; {of Input}
   {--------------------------------------------}
  Procedure Regulate; {описание процедуры упорядочения по возрастанию}
    Begin
      For i := 1 to N-1 do
        For j := i+1 to N do
          If A[i] > A[j] then
            begin Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp
            end;
    End; {of Regulate}
   {--------------------------------------------}
  Procedure Output; {описание процедуры вывода результата}
    Begin
      WriteLn('Упорядоченный массив :');
      For i:=1 to N do Write( A[i] : 6 : 1);
      WriteLn; ReadLn
    End; {of Output}
   {--------------------------------------------}
BEGIN
  Input;    {вызов процедуры ввода массива }
  Regulate; {вызов процедуры упорядочения по возрастанию}
  Output    {вызов процедуры вывода результата}
END.
 
QBasic
CLS : INPUT "N = "; N : DIM A(N)
FOR i = 1 TO N
  PRINT "A(" ; i ; ") = " ;
  INPUT A(i)
NEXT i
FOR i = 1 TO N-1
  FOR j = i+1 TO N
    IF A(i) > A(j) THEN Tmp=A(i) : A(i)=A(j) : A(j)=Tmp

  NEXT j
NEXT i
PRINT : PRINT "Упорядоченный массив :"
FOR i = 1 TO N
  PRINT A(i) ;
NEXT i : PRINT
END
 
Пример 3.5. В массиве A(N, N) вычислить две суммы элементов, расположенных ниже и выше главной диагонали.
 
Тест
 
Данные
Результат
N=3 
S1=6 
S2=9
 
Демонстрация
Школьный АЯ
алг Две суммы (арг цел N, арг вещ таб A[1:N, 1:N], рез вещ S1, S2)
  надо | S1 = сумма элементов ниже главной диагонали
       | S2 = сумма элементов выше главной диагонали
нач цел i, j
  S1:=0; S2:=0
  нц для i от 2 до N | циклы по элементам, расположенным
    нц для j от 1 до i-1 | ниже главной диагонали
      S1:=S1 + A[i, j]
    кц
  кц
  нц для i от 1 до N-1 | циклы по элементам, расположенным
    нц для j от i+1 до N | выше главной диагонали
      S2:=S2 + A[i, j]
    кц
  кц
кон
Исполнение алгоритма 
 
i
j
S1
S2
 
 
2
3
 
 
1
1
2
 
0
0+3=3
3+2=5
5+1=6
0
1
 
2
2
3
3
 
0+2=2
2+4=6
6+3=9
 
Блок-схема (фрагмент) 
Turbo Pascal
Program TwoSums;
  Uses Crt;
  Var A       : Array [1..10, 1..10] of Real;
      S1, S2  : Real; {S1, S2 - суммы элементов, расположенных ниже
                          и выше главной диагонали, соответственно}
      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; WriteLn;
      ClrScr; 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 Under;
    Begin {описание процедуры суммирования элементов, }
      S1 := 0; {расположенных ниже главной диагонали }
      For i := 2 to N do
        For j := 1 to i-1 do
          S1 := S1 + A[i, j];
      WriteLn('О т в е т :');
      WriteLn('Сумма элементов, лежащих ниже главной диагонали =', S1:5:1);
    End;
{--------------------------------------------}
  Procedure Over;
    Begin {описание процедуры суммирования элементов,}
      S2 := 0; {расположенных выше главной диагонали}
      For i := 1 to N-1 do
        For j := i+1 to N do
          S2 := S2 + A[i, j];
      WriteLn('Сумма элементов, лежащих выше главной диагонали =', S2:5:1);
      ReadLn
    End;
{--------------------------------------------}
BEGIN
  InputOutput; {Вызов процедуры ввода-вывода матрицы }
  Under; {Вычисление суммы элементов, лежащих ниже главной диагонали}
  Over ; {Вычисление суммы элементов, лежащих выше главной диагонали }
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 "Матрица А"
FOR i = 1 TO N 'Вывод массива по строкам
  FOR j = 1 TO N
    PRINT A(i, j) ;
  NEXT j
  PRINT
NEXT i : PRINT
S1 = 0 'Вычисление суммы элементов, лежащих ниже главной диагонали
FOR i = 2 TO N
  FOR j = 1 TO i-1
    S1 = S1 + A(i, j)
  NEXT j
NEXT i
S2 = 0 'Вычисление суммы элементов, лежащих выше главной диагонали
FOR i = 1 TO N-1
  FOR j = i+1 TO N
    S2 = S2 + A(i, j)
  NEXT j
NEXT i
PRINT "Сумма элементов, лежащих ниже главной диагонали равна "; S1
PRINT "Сумма элементов, лежащих выше главной диагонали равна "; S2
END


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

  3.1. [Pascal | C | Basic] Дана матрица A(N, M). Найдите её наибольший элемент и номера строки и столбца, на пересечении которых он находится.

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

  3.3. [Pascal | C | Basic] Для заданной целочисленной матрицы A(N, M) определите, является ли сумма её элементов чётным числом, и выведите на печать соответствующий текст.

  3.4. [Pascal | C | Basic] Дана матрица A(N, M). Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.

  3.5. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение тех её элементов, которые при делении на два дают нечётное число.

  3.6. [Pascal | C | Basic] В заданной матрице A(N, M) поменяйте местами столбцы с номерами P и Q.

  3.7. [Pascal | C | Basic] Дана матрица A(N, M). Вычислите вектор X(M), где значение Xj равно сумме положительных элементов j-го столбца матрицы A.

  3.8. [Pascal | C | Basic] Дана матрица A(N, M). Получите вектор X(M), равный P-й строке матрицы, и вектор Y(N), равный Q-му столбцу матрицы.

  3.9. [Pascal | C | Basic] Дана матрица A(N, M). Поменяйте местами её наибольший и наименьший элементы.

  3.10. [Pascal | C | Basic] По заданному n постройте матрицы размером (n,n) вида
 
а)  1 0 ... 0
    0 1 ... 0
     . . . . 
    0 0 ... 1
 б)  n n-1 n-2 ... 1
     0  n  n-1 ... 2
      .  .  . .  . 
     0  0   0  ... n
в)  0 0 ...  0  1
    0 0 ...  1  2
     . . .  .  . 
    1 2 ... n-1 n
  3.11. [Pascal | C | Basic] Даны две целочисленные матрицы A(N, M) и B(N, M). Подсчитате (в отдельности) количество тех пар (ai j , bi j ) , для которых:

а)   ai j < bi j;
б)   ai j = bi j;
в)   ai j > bi j.

  3.12. [Pascal | C | Basic] Дана матрица A(N, N). Перепишите элементы её главной диагонали в одномерный массив Y(N) и разделите их на максимальный элемент главной диагонали.

  3.13. [Pascal | C | Basic] Дана матрица A(N, M). Получите Y =  X1 . XN + X2 . XN-1 +  ... +  XN . X1 ,  где   Xi  - наибольший элемент в строке с номером  i  матрицы  A.

  3.14. [Pascal | C | Basic] Постройте матрицу  A(N, N) ,  элементы которой определяются равенствами        ai j = i + 2 . j , а также найдите произведение чётных элементов этой матрицы, удовлетворяющих условию ai j < P  (0 < P < 3N).

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

  3.16. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение нечётных отрицательных элементов матрицы, удовлетворяющих условию | ai j | < i.

  3.17. [Pascal | C | Basic] Для заданной матрицы А(N, N) найдите:
  а) сумму всех элементов;
  б) сумму элементов главной диагонали;
  в) значения наибольшего и наименьшего из элементов главной диагонали.

  3.18. [Pascal | C | Basic] По трём заданным матрицам А(N, N), В(N, N) и С(N, N) постройте матрицу Х того же размера, каждый элемент которой вычисляется   по формуле xi j = max { ai j , bi j , ci j } .

  3.19. [Pascal | C | Basic] Дана матрица А(N, N) и целое P. Преобразуйте матрицу по правилу: строку с номером P сделайте столбцом с номером P, а столбец с номером P сделайте строкой с номером P.

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

  3.21. [Pascal | C | Basic] Дана матрица A(N, M). Определите:
  а) число ненулевых элементов в каждой строке матрицы;
  б) общее число ненулевых элементов в матрице;
  в) отношение числа ненулевых элементов в каждой строке матрицы к общему числу ненулевых элементов в матрице.

  3.22. [Pascal | C | Basic] Вычислите матрицу С(N, N), являющуюся суммой матриц А(N, N) и В(N, N). Матрица А задана, а элементы матрицы B вычисляются по формуле

  3.23. [Pascal | C | Basic] Из заданной матрицы A(N, M) удалите строку с номером K  и столбцы с номерами P и Q. Полученную матрицу уплотните.

  3.24. [Pascal | C | Basic] В заданном массиве X(N, M) все числа различны. В каждой строке выбирается минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатайте номер строки массива Х, в которой расположено выбранное число.

  3.25. [Pascal | C | Basic] В заданном массиве A(N, M) переставьте строки так, чтобы суммы их элементов возрастали.

  3.26. [Pascal | C | Basic] В заданном массиве A(N, N) вычислите две суммы элементов, расположенных выше и ниже побочной диагонали.

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

  3.28. [Pascal | C | Basic] Расстояние между двумя множествами точек — это расстояние между наиболее близко расположенными точками этих множеств. Найдите расстояние между двумя заданными множествами точек на плоскости.

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

  3.30. [Pascal | C | Basic] Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым местом.

  3.31. [Pascal | C | Basic] На основе сведений о ежедневном пробеге на тренировке спортсменов команды рассчитате среднесуточный и общий пробег каждого спортсмена за 20 дней.

  3.32. [Pascal | C | Basic] Известен расход по N видам горючего в каждом из M автохозяйств. Определите для каждого хозяйства вид горючего с наибольшим и с наименьшим расходом.

  3.33. [Pascal | C | Basic] На основе сведений об отметках учеников класса в последней четверти
  а) вычислите средние баллы по каждому предмету;
  б) определите группу из пяти лучших учеников;
  в) определите группу из пяти самых слабых учеников.

  3.34. [Pascal | C | Basic] Заданы запасы по N видам топлива в каждом из М районов города и нормы минимально допустимого запаса по каждому виду топлива. Определите:
  а) запасы каждого вида топлива на все районы;
  б) запасы всех видов топлива для каждого района;
  в) в каких районах запас того или иного вида топлива меньше минимально допустимого и каких видов топлива запасено недостаточно в каждом районе.

  3.35. [Pascal | C | Basic] Последовательно (в лексикографическом порядке) напечатайте всевозможные перестановки целых чисел  1, 2, ..., n.  Значение n задано.

  3.36*. [Pascal | C | Basic] Напечатать элементы заданной матрицы А(N, N) в следующем порядке:

  3.37*. [Pascal | C | Basic] Дана матрица A(N, N), где N — нечётное число. Вычислите сумму её элементов из заштрихованной области.

  3.38. [Pascal | C | Basic] Шестизначный номер автобусного билета называют "счастливым", если равны суммы его первых трёх и последних трёх цифр. Подсчитате количество "счастливых" билетов.

  3.39. [Pascal | C | Basic] Дана последовательность целых чисел a1, a2, ..., am . Постройте на ее основе новую последовательность, содержащую только те числа, которые в исходную последоватеьность входят по одному разу.

  3.40. [Pascal | C | Basic] Даны два множества целых чисел: a1, a2, ..., an  и  b1, b2, ..., bm. Среди a1, a2, ..., an нет повторяющихся чисел, нет их и среди b1, b2, ..., bm.  Постройте:
  а) пересечение и объединение этих множеств;
  б) множество, содержащее все члены множества b1, b2, ..., bm, которые не входят в множество a 1, a2, ..., an.

  3.41. [Pascal | C | Basic] Вычислите P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 + ...+ N . (N+1) . ... . 2N.

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

  3.43. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Не проверяя значений элементов таблицы, замените каждый из нулей на единицу, а каждую из единиц — на ноль.

  3.44. [Pascal | C | Basic] Имеется N партий микросхем одного вида. Из каждой партии для контроля отобрали M микросхем. Тестовый контроль определил годность или негодность каждой микросхемы. Для того, чтобы вся партия была забракована, достаточно обнаружить в этих M выбранных микросхемах K негодных. По данным тестового контроля определите количество негодных микросхем в каждой партии и число забракованных партий.

  3.45. [Pascal | C | Basic] Числом Армстронга называется целое n-значное число, сумма n-х степеней цифр которого равна самому этому числу. Например, числом Армстронга является число 407, так как 407 = 43 + 03 + 73. Найдите все числа Армстронга для заданного n <= 10.