kopilkaurokov.ru - сайт для учителей

Создайте Ваш сайт учителя Курсы ПК и ППК Видеоуроки Олимпиады Вебинары для учителей

Презентация по теме "Двумерные массивы"

Нажмите, чтобы узнать подробности

Презентация  посвящена теме "Двумерные массивы". В ней даётся определение этого понятия, а также рассмотрены 12 задач по данной теме

Просмотр содержимого документа
«Презентация по теме "Двумерные массивы"»

ДВУМЕРНЫЕ МАССИВЫ

ДВУМЕРНЫЕ МАССИВЫ

Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.   Их можно представить в виде прямоугольной таблицы или матрицы .
  • Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.
  • Их можно представить в виде прямоугольной таблицы или матрицы .
Рассмотрим матрицу А  размером 2х3,  то есть в ней будет две строки,  а в каждой строке по три элемента:

Рассмотрим матрицу А размером 2х3, то есть в ней будет две строки, а в каждой строке по три элемента:

Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух
  • Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца.
  • Таким образом, номер элемента определяется пересечением строки и столбца.
  • Например, а 12 – это элемент, стоящий в первой строке и во втором столбце.
Существует несколько способов объявления двумерного массива. Способ 1.  Двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведенной выше:  Const n=2; m=3;  type mas1=array[1..m] of ;  mas2=array[1..n] of mas1;    var v: mas1; a: mas2;  В данном случае переменная v объявлена как одномерный массив из 3-х элементов вещественного типа. Переменная а описана как двумерный массив из 2-х строк, в каждую из которых включено по три элемента.

Существует несколько способов объявления двумерного массива.

  • Способ 1. Двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведенной выше:

Const n=2; m=3;

type mas1=array[1..m] of ;

mas2=array[1..n] of mas1;

var v: mas1; a: mas2;

В данном случае переменная v объявлена как одномерный массив из 3-х элементов вещественного типа. Переменная а описана как двумерный массив из 2-х строк, в каждую из которых включено по три элемента.

Способ 2. Описание массива А можно сократить, исключив определение типа mas1 в определении типа mas2 :  const n=2; m=3;  type massiv=array[1..n] of [1..m] of ;  var a: massiv;

Способ 2.

  • Описание массива А можно сократить, исключив определение типа mas1 в определении типа mas2 :

const n=2; m=3;

type massiv=array[1..n] of [1..m] of ;

var a: massiv;

Способ 3 . Еще более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:  const n=2; m=3;  type massiv=array[1..n,1..m] of ;  var a: massiv;

Способ 3 .

  • Еще более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:

const n=2; m=3;

type massiv=array[1..n,1..m] of ;

var a: massiv;

Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
  • Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:

var a: array[1..n,1..m] of

    Формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть ввод с клавиатуры, через генератор случайных чисел или с помощью файла.
    • Формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть
    • ввод с клавиатуры,
    • через генератор случайных чисел или
    • с помощью файла.
    Предположим, нам нужно пробежать всю матрицу. Вот фрагмент программы, выводящий матрицу на экран:  for i:=1 to n do   begin    for j:=1 to m do    write (a[i,j]:4);    writeln   end;

    Предположим, нам нужно пробежать всю матрицу.

    • Вот фрагмент программы, выводящий матрицу на экран:

    for i:=1 to n do

    begin

    for j:=1 to m do

    write (a[i,j]:4);

    writeln

    end;

    Задача 1.  Найти сумму всех элементов двумерного массива.

    Задача 1.

    Найти сумму всех элементов двумерного массива.

    Program prim1; type mas=array[1..100,1..100] of integer; var a:mas;  i,j,n,m,s:integer; begin  randomize;  write (‘n=‘); readln (n); write (‘m=‘); readln (m);  for i:=1 to n do  begin  for j:=1 to m do  begin  { получаем случайные значения элементов матрицы }  a[i,j]:=random(45)-22; write (a[i,j]:4);  { находим сумму элементов }  s:=s+a[i,j];  end;  writeln;  end; { печатаем сумму всех эл-тов }  writeln (‘summa vsech elem. =‘, s);  readln; end.

    Program prim1;

    type mas=array[1..100,1..100] of integer;

    var a:mas;

    i,j,n,m,s:integer;

    begin

    randomize;

    write (‘n=‘); readln (n); write (‘m=‘); readln (m);

    for i:=1 to n do

    begin

    for j:=1 to m do

    begin

    { получаем случайные значения элементов матрицы }

    a[i,j]:=random(45)-22; write (a[i,j]:4);

    { находим сумму элементов }

    s:=s+a[i,j];

    end;

    writeln;

    end;

    { печатаем сумму всех эл-тов }

    writeln (‘summa vsech elem. =‘, s);

    readln;

    end.

    Задача 2 . В предыдущей задаче найти не только сумму всех элементов, но и сумму элементов каждой строки.

    Задача 2 .

    В предыдущей задаче найти не только сумму всех элементов, но и сумму элементов каждой строки.

    Program prim1; type mas=array[1..100,1..100] of integer; var a:mas;  i,j,n,m,s,s1:integer; begin  randomize;  write (‘n=‘); readln (n); write (‘m=‘); readln (m);  for i:=1 to n do begin  for j:=1 to m do begin  { получаем случайные значения элементов матрицы }  a[i,j]:=random(45)-22; write (a[i,j]:4);  { находим сумму элементов }  s:=s+a[i,j]; s1:=s1+a[i,j];  end;  { печатаем сумму всех эл-тов каждой строки и обнуляем значение суммы }  writeln(‘summa stroki =‘,s); s:=0;  writeln;  end;  writeln (‘summa vsech elem. s1=‘, s1);  readln; end.

    Program prim1;

    type mas=array[1..100,1..100] of integer;

    var a:mas;

    i,j,n,m,s,s1:integer;

    begin

    randomize;

    write (‘n=‘); readln (n); write (‘m=‘); readln (m);

    for i:=1 to n do begin

    for j:=1 to m do begin

    { получаем случайные значения элементов матрицы }

    a[i,j]:=random(45)-22; write (a[i,j]:4);

    { находим сумму элементов }

    s:=s+a[i,j]; s1:=s1+a[i,j];

    end;

    { печатаем сумму всех эл-тов каждой строки и обнуляем значение суммы }

    writeln(‘summa stroki =‘,s); s:=0;

    writeln;

    end;

    writeln (‘summa vsech elem. s1=‘, s1);

    readln;

    end.

    Задача 3:

    Задача 3:

    • Найти минимальный элемент матрицы и его порядковый номер.
    Задача 4:

    Задача 4:

    • Найти максимальный элемент каждой строки массива и его индексы.
    • Найти максимальный элемент всего массива и его индекс (самостоятельно)
    max then begin max:=a[i,j]; i1:=i; j1:=j; end; end; write (‘max=‘, max, ‘N stroki=‘, i1, ‘N stolbza=‘, j1); writeln; end; readln; End." width="640"

    Program prim4;

    type mas=array[1..100,1..100] of integer;

    var a: mas;

    i,j,n,max,i1,j1: integer;

    begin

    randomize;

    write (‘n=‘); readln (n);

    for i:=1 to n do begin

    { Так как тип массива integer , то за начальное значение max возьмем }

    max:=-32768;

    for j:=1 to do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    if a[i,j]max then

    begin

    max:=a[i,j]; i1:=i; j1:=j;

    end;

    end;

    write (‘max=‘, max, ‘N stroki=‘, i1, ‘N stolbza=‘, j1);

    writeln;

    end;

    readln;

    End.

    Задача 5:

    Задача 5:

    • Найти количество элементов, больших некоторого заданного числа Х в каждой строке массива (во всем массиве).
    x then k:=k+1; end; { Если находим для всего массива, то следующую строку надо убрать, а начальное значение k:=0 перенести выше на одну строку } writeln(‘k=‘,k); end; { Печатаем число элементов, удовлетворяющих условию задачи во всем массиве } write(‘k=‘,k); readln; End." width="640"

    Program prim5;

    var a:=array[1..100,1..100] of integer;

    i,j,n,k,x: integer;

    Begin

    randomize;

    write (‘n=‘); readln (n); write (‘x=‘); readln (x);

    for i:=1 to n do begin

    k:=0;

    for j:=1 to n do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    if a[i,j]x then k:=k+1;

    end;

    { Если находим для всего массива, то следующую строку надо убрать, а начальное значение k:=0 перенести выше на одну строку }

    writeln(‘k=‘,k);

    end;

    { Печатаем число элементов, удовлетворяющих условию задачи во всем массиве }

    write(‘k=‘,k);

    readln;

    End.

    Задача 6:

    Задача 6:

    Решение:

    Решение:

    • Если массив является симметричным, то для него выполняется равенство a[i,j]=a[j,i] для всех i =1,… n , j =1,…, n при условии, что ij . Но если встретится хотя бы одна такая пара, что соответствующие элементы не будут равны, то массив будет несимметричным.
    j) and (a[i,j]a[j,i]) then begin writeln (‘no’); exit; end; writeln (‘jes’); readln; End." width="640"

    Program prim6;

    var a: array[1..100,1..100] of integer;

    i,j,n: integer;

    begin

    randomize;

    write (‘n=’); readln (n);

    for i:=1 to n do begin

    for j:=1 to n do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    end;

    writeln;

    end;

    readln;

    for i:=1 to n do

    for j:=1 to n do

    if ( ij) and (a[i,j]a[j,i]) then

    begin

    writeln (‘no’);

    exit;

    end;

    writeln (‘jes’);

    readln;

    End.

    Задача 7:

    Задача 7:

    • Вставить строку из нулей на место строки с номером k .
    Решение:   Для решения этой задачи необходимо:

    Решение:

    Для решения этой задачи необходимо:

    • Первые k -1 строк оставить без изменения.
    • Все строки после k -й сдвинуть на одну назад, это лучше начать с последней строки и идти до k -й.
    • Элементам строки k присвоить заданное значение.
    • Кроме того, необходимо изменить размер массива. Так как мы вставляем строку, то число строк будет на одну больше.
    Program prim7; type mas=array [1..100,1..100] of integer; var a:mas; i,j,k,n: integer; begin  randomize;  write (‘n=‘); readln (n);  { Создаем и распечатываем двумерный массив }  for i:=1 to n do begin  for j:=1 to n do begin  a[i,j]:=random(45)-22;  write (a[i,j]:4);  end;  writeln;  end;  { Вводим номер вставляемой строки }  write (‘k=‘); readln (k);  { Сдвигаем строки назад до k -й строки, начиная с последней }  for i:=n downto k do  for j:=1 to n do a[i+1,j]:=a[i,j];  { Обнуляем элементы k -й строки }  for j:=1 to n do a[k,j]:=0;  { Распечатываем новый массив, который на одну строку больше исходного }  for i:=1 to n+1 do begin  for j:=1 to n do begin  write (a[i,j]:4);  end;  writeln;  end;  readln; end.

    Program prim7;

    type mas=array [1..100,1..100] of integer;

    var a:mas; i,j,k,n: integer;

    begin

    randomize;

    write (‘n=‘); readln (n);

    { Создаем и распечатываем двумерный массив }

    for i:=1 to n do begin

    for j:=1 to n do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    end;

    writeln;

    end;

    { Вводим номер вставляемой строки }

    write (‘k=‘); readln (k);

    { Сдвигаем строки назад до k -й строки, начиная с последней }

    for i:=n downto k do

    for j:=1 to n do a[i+1,j]:=a[i,j];

    { Обнуляем элементы k -й строки }

    for j:=1 to n do a[k,j]:=0;

    { Распечатываем новый массив, который на одну строку больше исходного }

    for i:=1 to n+1 do begin

    for j:=1 to n do begin

    write (a[i,j]:4);

    end;

    writeln;

    end;

    readln;

    end.

    Задача 8:

    Задача 8:

    • Удалить строку с номером k .
    Решение:   Для того, чтобы удалить строку с номером k , необходимо:

    Решение:

    Для того, чтобы удалить строку с номером k , необходимо:

    • Сдвинуть все строки, начиная с данной, на одну вверх.
    • Последнюю строку «обнулить», то есть всем элементам последней строки присвоить нулевое значение.
    • Необходимо выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше.
    Program prim8; type mas=array[1..100,1..100] of integer; var a:mas; i,j,k,n: integer; begin  randomize;  write (‘n=‘); readln (n);  { Создаем и распечатываем двумерный массив }  for i:=1 to n do begin  for j:=1 to n do begin  a[i,j]:=random(45)-22;  write (a[i,j]:4);  end;  writeln;  end;  { Вводим номер удаляемой строки }  write (‘k=‘); readln (k);  { Сдвигаем строки на одну вверх, начиная с данной }  for i:=k to n-1 do  for j:=1 to n do a[i,j]:=a[i+1;j];  { Обнуляем последнюю строку }  for j:=1 to n do a[n,j]:=0;  { Печатаем новый массив, в котором на одну строку меньше }  for i:=1 to n-1 do begin  for j:=1 to n do begin  write (a[i,j]:4);  end;  writeln;  end;  readln; End.

    Program prim8;

    type mas=array[1..100,1..100] of integer;

    var a:mas; i,j,k,n: integer;

    begin

    randomize;

    write (‘n=‘); readln (n);

    { Создаем и распечатываем двумерный массив }

    for i:=1 to n do begin

    for j:=1 to n do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    end;

    writeln;

    end;

    { Вводим номер удаляемой строки }

    write (‘k=‘); readln (k);

    { Сдвигаем строки на одну вверх, начиная с данной }

    for i:=k to n-1 do

    for j:=1 to n do a[i,j]:=a[i+1;j];

    { Обнуляем последнюю строку }

    for j:=1 to n do a[n,j]:=0;

    { Печатаем новый массив, в котором на одну строку меньше }

    for i:=1 to n-1 do begin

    for j:=1 to n do begin

    write (a[i,j]:4);

    end;

    writeln;

    end;

    readln;

    End.

    Задача 9:

    Задача 9:

    • Поменять местами строки с номерами k 1 и k 2.
    Program prim9; type mas=array[1..100,1..100] of integer; var a:mas; i,j,n,k1,k2,r: integer; begin  randomize;  write (‘n=‘); readln (n);  { Создаем и распечатываем двумерный массив }  for i:=1 to n do begin  for j:=1 to n do begin  a[i,j]:=random(45)-22;  write (a[i,j]:4);  end;  writeln;  end;  { Вводим номера строк ,которые будем менять местами }  write (‘k1=,k2=‘); readln (k1,k2);  { Меняем значения k 1 и k 2 строк между собой }  for j:=1 to n do begin  r:=a[k1,j]; a[k1,j]:=a[k2,j]; a[k2,j]:=r;  end;  { Распечатаем измененный массив }  for i:=1 to n do begin  for j:=1 to n do begin  write (a[i,j]:4);  end;  writeln;  end; readln; End.

    Program prim9;

    type mas=array[1..100,1..100] of integer;

    var a:mas; i,j,n,k1,k2,r: integer;

    begin

    randomize;

    write (‘n=‘); readln (n);

    { Создаем и распечатываем двумерный массив }

    for i:=1 to n do begin

    for j:=1 to n do begin

    a[i,j]:=random(45)-22;

    write (a[i,j]:4);

    end;

    writeln;

    end;

    { Вводим номера строк ,которые будем менять местами }

    write (‘k1=,k2=‘); readln (k1,k2);

    { Меняем значения k 1 и k 2 строк между собой }

    for j:=1 to n do begin

    r:=a[k1,j]; a[k1,j]:=a[k2,j]; a[k2,j]:=r;

    end;

    { Распечатаем измененный массив }

    for i:=1 to n do begin

    for j:=1 to n do begin

    write (a[i,j]:4);

    end;

    writeln;

    end; readln;

    End.

    Задача 10 (самостоятельно):

    Задача 10 (самостоятельно):

    • В массиве размером n*n к элементам четных столбцов прибавить элемент первого столбца соответствующей строки.
    Идея решения: В данной задаче необходимо проверять четность столбцов. Основная часть программы будет выглядеть так:    For i:=1 to n do begin     For j:=1 to n do

    Идея решения:

    • В данной задаче необходимо проверять четность столбцов.
    • Основная часть программы будет выглядеть так:

    For i:=1 to n do begin

    For j:=1 to n do

    Проверяем номер столбца на четность. В случае четности прибавляем к значениям проверяемого столбца соответствующие значения первого столбца.   if j mod 2=0 then a[i,j]:=a[i,j]+a[i,1];   end; Далее распечатываем измененный массив.
    • Проверяем номер столбца на четность. В случае четности прибавляем к значениям проверяемого столбца соответствующие значения первого столбца.

    if j mod 2=0 then a[i,j]:=a[i,j]+a[i,1];

    end;

    • Далее распечатываем измененный массив.
    Иногда массив необходимо заполнять не случайными числами, а по некоторому закону. Рассмотрим такой пример.

    Иногда массив необходимо заполнять не случайными числами, а по некоторому закону. Рассмотрим такой пример.

    Задача 11 : Заполнить массив А размером n*m следующим образом, например, n=5 m=5 : То есть заполняется в виде «змейки».  1 2 3 4 5

    Задача 11 :

    • Заполнить массив А размером n*m следующим образом, например, n=5 m=5 :
    • То есть заполняется в виде «змейки».

    1 2 3 4 5

    • 9 8 7 6
    • 12 13 14 15
    • 19 18 17 16
    • 22 23 24 25
    Решение: Для того, чтобы заполнить, надо вывести правило заполнения, а оно в данном случае будет таким: Если ряд нечетный (то есть номер строки – нечетное число), то   a[i,j]=(i-1)*m+j , Иначе (то есть когда строка четная)   a[i,j]=i*m-j+1.

    Решение:

    • Для того, чтобы заполнить, надо вывести правило заполнения, а оно в данном случае будет таким:
    • Если ряд нечетный (то есть номер строки – нечетное число), то

    a[i,j]=(i-1)*m+j ,

    • Иначе (то есть когда строка четная)

    a[i,j]=i*m-j+1.

    • По этому правилу и составляем процедуру заполнения. Тем более, что проверка на четность производилась в предыдущей задаче (только со столбцами).
    Program prim11;  uses crt;  type mas=array[1..100,1..100] of integer;  var a: mas;  i, j, n, m: integer;  begin  clrscr;  write (‘n=, m=‘); readln (n,m);  for i:=1 to n do begin  for j:=1 to m do begin { Заполняем массив по выведенному правилу заполнения и выводим его на экран }  if imod2=1 then a[i,j]:=(i-1)*m+j else a[i,j]:=i*m-j+1;  write (a[i,j]:4);  end;  writeln;  end;  readln;  end.

    Program prim11;

    uses crt;

    type mas=array[1..100,1..100] of integer;

    var a: mas;

    i, j, n, m: integer;

    begin

    clrscr;

    write (‘n=, m=‘); readln (n,m);

    for i:=1 to n do begin

    for j:=1 to m do begin

    { Заполняем массив по выведенному правилу заполнения

    и выводим его на экран }

    if imod2=1 then a[i,j]:=(i-1)*m+j else a[i,j]:=i*m-j+1;

    write (a[i,j]:4);

    end;

    writeln;

    end;

    readln;

    end.

    Задача 1 2: Латинским квадратом называется массив, в строках и столбцах которого нет одинаковых элементов. Вывести на экран латинский квадрат размером NxN . Пример латинского квадрата:  1 5 2 4 3 1 3 5 2 4 3 2 4 1 5 2 4 5 3 3 1 4 2 5 1

    Задача 1 2:

    • Латинским квадратом называется массив, в строках и столбцах которого нет одинаковых элементов. Вывести на экран латинский квадрат размером NxN .
    • Пример латинского квадрата:

    1

    5

    2

    4

    3

    1

    3

    5

    2

    4

    3

    2

    4

    1

    5

    2

    4

    5

    3

    3

    1

    4

    2

    5

    1

    Идея решения:

    Идея решения:

    • Заполнить 1-ю строку квадратного массива (NxN) числами от 1 до N .
    • Вторая строка массива получается путем циклического сдвига элементов первой строки, и т.д.
    • Циклический сдвиг можно реализовать, используя типовой алгоритм вставки-удаления (в зависимости от циклического сдвига).
    Program prim12;  var a: array[1..10,1..10] of integer;  n, i, j, x: integer;  begin  writeln (‘razmernost=‘);  readln (n);  for j:=1 to n do  a[1,j]:=j;  { сдвиг }  for i:=2 to n do  begin  for j:=1 to n do  a[i,j]:=a[i-1,j];  x:=a[i,n]; for j:=n downto 2 do  a[i,j]:=a[i,j-1]; a[i,1]:=x;  { вывод } for i:=1 to n do  begin  for j:=1 to n do  write (a[i,j]);  writeln;  end;  readln; End.

    Program prim12;

    var a: array[1..10,1..10] of integer;

    n, i, j, x: integer;

    begin

    writeln (‘razmernost=‘);

    readln (n);

    for j:=1 to n do

    a[1,j]:=j;

    { сдвиг }

    for i:=2 to n do

    begin

    for j:=1 to n do

    a[i,j]:=a[i-1,j];

    x:=a[i,n];

    for j:=n downto 2 do

    a[i,j]:=a[i,j-1];

    a[i,1]:=x;

    { вывод }

    for i:=1 to n do

    begin

    for j:=1 to n do

    write (a[i,j]);

    writeln;

    end;

    readln;

    End.


    Получите в подарок сайт учителя

    Предмет: Информатика

    Категория: Презентации

    Целевая аудитория: 9 класс.
    Урок соответствует ФГОС

    Скачать
    Презентация по теме "Двумерные массивы"

    Автор: Лавринова Оксана Владимировна

    Дата: 18.11.2019

    Номер свидетельства: 527615

    Похожие файлы

    object(ArrayObject)#882 (1) {
      ["storage":"ArrayObject":private] => array(6) {
        ["title"] => string(33) "Двумерные массивы"
        ["seo_title"] => string(19) "dvumiernyie_massivy"
        ["file_id"] => string(6) "377873"
        ["category_seo"] => string(11) "informatika"
        ["subcategory_seo"] => string(11) "presentacii"
        ["date"] => string(10) "1484118427"
      }
    }
    
    object(ArrayObject)#904 (1) {
      ["storage":"ArrayObject":private] => array(6) {
        ["title"] => string(33) "Двумерные массивы"
        ["seo_title"] => string(21) "dvumiernyie_massivy_1"
        ["file_id"] => string(6) "464959"
        ["category_seo"] => string(11) "informatika"
        ["subcategory_seo"] => string(11) "presentacii"
        ["date"] => string(10) "1522831726"
      }
    }
    
    object(ArrayObject)#882 (1) {
      ["storage":"ArrayObject":private] => array(6) {
        ["title"] => string(88) "Обучение решению задач программирование на pascal "
        ["seo_title"] => string(59) "obuchieniie-rieshieniiu-zadach-proghrammirovaniie-na-pascal"
        ["file_id"] => string(6) "103872"
        ["category_seo"] => string(11) "informatika"
        ["subcategory_seo"] => string(11) "presentacii"
        ["date"] => string(10) "1402643861"
      }
    }
    

    Получите в подарок сайт учителя

    Видеоуроки для учителей

    Курсы для учителей

    ПОЛУЧИТЕ СВИДЕТЕЛЬСТВО МГНОВЕННО

    Добавить свою работу

    * Свидетельство о публикации выдается БЕСПЛАТНО, СРАЗУ же после добавления Вами Вашей работы на сайт

    Удобный поиск материалов для учителей

    Ваш личный кабинет
    Проверка свидетельства