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

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

10.06.2016. Пример 3.4. Элементы заданного числового массива a1, a2, ..., aN упорядочить по возрастанию.
Тест Данные Результат N=4 A=(5, 2, 7, 1) A=(1, 2, 5, 7)   Школьный АЯ  алг Возрастание(арг цел N, арг рез                  вещ таб A[1:N]) нач цел i, j, вещ Tmp   нц…
10.06.2016. Пример 3.5. В массиве A(N, N) вычислить две суммы элементов, расположенных ниже и выше главной диагонали.
Тест Данные Результат N=3  S1=6  S2=9 Школьный АЯ алг Две суммы (арг цел N, арг вещ таб A[1:N, 1:N], рез вещ S1, S2)   надо | S1 = сумма элементов ниже главной диагонали       …