Навигация

Поиск по сайту

Последние новости

Новое в блогах

Родители - За безопасность детей!
Администрация, педагог
Начало
Лихоманенко Николай Иванович, педагог
Лето с футбольным мячом!
Печалёва Елена Борисовна, педагог
Дружно отдыхаем, дружно пищу поглощаем!
Печалёва Елена Борисовна, педагог
Открытие лагеря "Солнышко"
Печалёва Елена Борисовна, педагог

10 класс. П.67 Задача V. Матрицы

  Учебник. К.Ю Поляков, Е.А. Ерёмин. Информатика. 10 класс. Углублённый уровень. §67 Матрицы


Задача V.  Вращение вправо

PASCAL

program p67V;

var mtr:array of array of longint;

    n:byte; //количество строк и столбцов

    i,j:byte;

    tmp:longint;

    fin:text;

begin

   assign(fin,'input.txt');

   reset(fin);

   readln(fin,n);

    //динамическое выделение памяти под матрицу

   SetLength(mtr,n);

   for i:=0 to n-1 do SetLength(mtr[i],n); 

   //чтение матрицы из файла

   for i:=0 to n-1 do

      for j:=0 to n-1 do read(fin,mtr[i,j]);

   { вращаем по часовой стрелке верхнюю строку, правый столбец, нижнюю строку, левый столбец

   tmp:=mtr[0,0]; mtr[0,0]:=mtr[n-1,0]; mtr[n-1,0]:=mtr[n-1,n-1]; mtr[n-1,n-1]:=mtr[0,n-1]; mtr[0,n-1]:=tmp;

   tmp:=mtr[0,1]; mtr[0,1]:=mtr[n-2,0]; mtr[n-2,0]:=mtr[n-1,n-2]; mtr[n-1,n-2]:=mtr[1,n-1]; mtr[1,n-1]:=tmp;

   tmp:=mtr[0,2]; mtr[0,2]:=mtr[n-3,0]; mtr[n-3,0]:=mtr[n-1,n-3]; mtr[n-1,n-3]:=mtr[2,n-1]; mtr[2,n-1]:=tmp;

   .........................................................................................................

   tmp:=mtr[0,n-2]; mtr[0,n-2]:=mtr[1,0]; mtr[1,0]:=mtr[n-1,1]; mtr[n-1,1]:=mtr[n-2,n-1]; mtr[n-2,n-1]:=tmp;  

     или одним циклом

     for j:=0 to n-2 do

     begin

      tmp:=mtr[0,j]; mtr[0,j]:=mtr[n-1-j,0]; mtr[n-1-j,0]:=mtr[n-1,n-1-j]; mtr[n-1,n-1-j]:=mtr[j,n-1]; mtr[j,n-1]:=tmp;

     end;

     вращаем следующий "слой" по кругу 

     tmp:=mtr[1,1]; mtr[1,1]:=mtr[n-2,1]; mtr[n-2,1]:=mtr[n-2,n-2]; mtr[n-2,n-2]:=mtr[1,n-2]; mtr[1,n-2]:=tmp;

     tmp:=mtr[1,2]; mtr[1,2]:=mtr[n-3,1]; mtr[n-3,1]:=mtr[n-2,n-3]; mtr[n-2,n-3]:=mtr[2,n-2]; mtr[2,n-2]:=tmp;

     tmp:=mtr[1,3]; mtr[1,3]:=mtr[n-4,1]; mtr[n-4,1]:=mtr[n-2,n-4]; mtr[n-2,n-4]:=mtr[3,n-2]; mtr[3,n-2]:=tmp;

     .........................................................................................................

     tmp:=mtr[1,n-3]; mtr[1,n-3]:=mtr[2,1]; mtr[2,1]:=mtr[n-2,2]; mtr[n-2,2]:=mtr[n-3,n-2]; mtr[n-3,n-2]:=tmp;

     или одним циклом

     for j:=1 to n-3 do

     begin

      tmp:=mtr[1,j]; mtr[1,j]:=mtr[n-1-j,1]; mtr[n-1-j,1]:=mtr[n-2,n-1-j]; mtr[n-2,n-1-j]:=mtr[j,n-2]; mtr[j,n-2]:=tmp;

     end;

     }

   //можно заметить закономерность и свести всё к двойному циклу

   for i:=0 to (n-1) div 2 do

      for j:=i to n-2-i do

         begin

         tmp:=mtr[i,j]; mtr[i,j]:=mtr[n-1-j,i]; mtr[n-1-j,i]:=mtr[n-1-i,n-1-j]; mtr[n-1-i,n-1-j]:=mtr[j,n-1-i]; mtr[j,n-1-i]:=tmp;

         end;    

   //вывод изменённой матрицы матрицы

   for i:=0 to n-1 do

      begin

      for j:=0 to n-1 do write(mtr[i,j],' ');

      writeln;

      end;

   close(fin);

end.

 

C++

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

    cout << "Hello world!" << endl;


    int **mtr;

    int n;

    int i,j;

    int tmp;

    ifstream fin;

    fin.open("input.txt");

    fin >> n;

    //динамическое выделение памяти под матрицу

    mtr = new int* [n];

    for (i=0; i<n; i++) mtr[i] = new int[n];

   //чтение матрицы из файла

   for (i=0; i<n; i++)

      for (j=0; j<n; j++) fin >>mtr[i][j];

    //вращаем по часовой стрелке верхнюю строку, правый столбец, нижнюю строку, левый столбец

   /*

   tmp=mtr[0][0]; mtr[0][0]=mtr[n-1][0]; mtr[n-1][0]=mtr[n-1][n-1]; mtr[n-1][n-1]=mtr[0][n-1]; mtr[0][n-1]=tmp;

   tmp=mtr[0][1]; mtr[0][1]=mtr[n-2][0]; mtr[n-2][0]=mtr[n-1][n-2]; mtr[n-1][n-2]=mtr[1][n-1]; mtr[1][n-1]=tmp;

   tmp=mtr[0][2]; mtr[0][2]=mtr[n-3][0]; mtr[n-3][0]=mtr[n-1][n-3]; mtr[n-1][n-3]=mtr[2][n-1]; mtr[2][n-1]=tmp;

   .........................................................................................................

   tmp=mtr[0][n-2]; mtr[0][n-2]=mtr[1][0]; mtr[1][0]=mtr[n-1][1]; mtr[n-1][1]=mtr[n-2][n-1]; mtr[n-2][n-1]=tmp;

     или одним циклом

     for (j=0; i<n-1; i++)

     {

      tmp=mtr[0][j]; mtr[0][j]=mtr[n-1-j][0]; mtr[n-1-j][0]=mtr[n-1][n-1-j]; mtr[n-1][n-1-j]=mtr[j][n-1]; mtr[j][n-1]=tmp;

     }

     вращаем следующий "слой" по кругу

     tmp=mtr[1][1]; mtr[1][1]=mtr[n-2][1]; mtr[n-2][1]=mtr[n-2][n-2]; mtr[n-2][n-2]=mtr[1][n-2]; mtr[1][n-2]=tmp;

     tmp=mtr[1][2]; mtr[1][2]=mtr[n-3][1]; mtr[n-3][1]=mtr[n-2][n-3]; mtr[n-2][n-3]=mtr[2][n-2]; mtr[2][n-2]=tmp;

     tmp=mtr[1][3]; mtr[1][3]=mtr[n-4][1]; mtr[n-4][1]=mtr[n-2][n-4]; mtr[n-2][n-4]=mtr[3][n-2]; mtr[3][n-2]=tmp;

     .........................................................................................................

     tmp=mtr[1,n-3]; mtr[1,n-3]=mtr[2,1]; mtr[2,1]=mtr[n-2,2]; mtr[n-2,2]=mtr[n-3,n-2]; mtr[n-3,n-2]=tmp;

     или одним циклом

     for (j=0; i<n-2; i++)

     {

      tmp=mtr[1][j]; mtr[1][j]=mtr[n-1-j][1]; mtr[n-1-j][1]=mtr[n-2][n-1-j]; mtr[n-2][n-1-j]=mtr[j][n-2]; mtr[j][n-2]=tmp;

     }

     */

   //можно заметить закономерность и свести всё к двойному циклу

   for (i=0; i<=(n-1)/2; i++)

      for (j=i; j<=n-2-i; j++)

         {

          tmp=mtr[i][j]; mtr[i][j]=mtr[n-1-j][i]; mtr[n-1-j][i]=mtr[n-1-i][n-1-j]; mtr[n-1-i][n-1-j]=mtr[j][n-1-i]; mtr[j][n-1-i]=tmp;

         }

   //вывод изменённой матрицы матрицы

   for (i=0; i<n; i++)

      {

      for (j=0; j<n; j++) cout << mtr[i][j] << " ";

      cout << endl;

      }

   fin.close();

   return 0;

 

}