Описание рабочего окна Lazarus
Один из наиболее важных методических вопросов – вопрос мотивации изучения конкретного математического содержания. Учащиеся часто склоны считать, что математический материал, предлагаемый им для изучения, никогда не пригодится им в жизни. Часто это касается изучения матриц в линейной алгебре. Однако матрицы имеют весьма широкое применение как в математике, компьютерной графике, а так же методах криптографии и шифровании. Особо отмечается роль матриц в программировании, 3д графике и физике. Практически повсеместно матрицы используются в программных кодах, с их помощью можно значительно упростить запись различных данных и расчеты. Практически любая программа, работающая с 3д графикой, рассчитывает трехмерное пространство в виде матричных массивов. В физике же с их помощью описывается огромное количество различных физических свойств.
В первую очередь актуальность работы имеет место в образовательных целях. Автоматизированный процесс расчета матриц поможет затрачивать намного меньше времени на решение задач, в особенности линейной алгебры. Самое главное то, что учащиеся смогут самостоятельно контролировать правильность выполнения заданий.
Объект исследования – среда разработки Lazarus.
Предмет исследования – Программа расчета обратных матриц.
Цель работы – написать программу нахождения обратных матриц в среде Lazarus.
Для достижения указанной цели потребуется решить ряд задач:
• Изучить матрицы, их свойства и операции над ними.
• Рассмотреть графический интерфейс, особенности и инструменты разработки Lazarus.
• Разработать программу нахождения обратных матриц, используя изученный инструментарий.
Матрицы. Их виды и операции над ними.
Матрица — математический объект, записываемый в виде прямоугольной таблицы элементов (например, целых, действительных или комплексных чисел), которая представляет собой совокупность строк и столбцов, на пересечении которых находятся её элементы.[2]
В математике существует достаточно большое множество различных матриц. Хотя раньше рассматривались матрицы, например треугольной формы, в настоящее время используются только прямоугольные. Впервые матрицы упоминаются в древнем Китае. Их называли волшебными квадратами и в основном использовали для решений линейных уравнений. Позже они встречались у арабских математиков. Первые же современные наработки теории появились в XVIII веке, в работах Габриэля Крамера. В его же честь и было названо правило Крамера, с помощью которого решались системы уравнений.[1]
Общий вид прямоугольной матрицы:
Где n – количество столбцов, m – количество строк. i и j – номер столбца и строки соответственно.
Рассмотрим основные виды матриц.
Один из часто встречающихся видов – квадратная матрица. Ее отличительная особенность – это равное количество строк и столбцов. Так же она обладает некоторыми особенностями: только квадратные матрицы имеют обратную матрицу, диагонали, единичные, симметричные, диагональные и треугольные матрицы подвид только квадратных матриц. Некоторые операции и элементарные преобразования производятся только над этими матрицами. Так же существуют матрицы только с одним столбцом или только с одной строкой. Их называют вектор-столбец и вектор-строка соответственно.[1] Если же матрица содержит лишь один элемент, она называется единичной. Чаще всего приходится работать с прямоугольными и квадратными матрицами. Так как над квадратными матрицами проводится больше различных операций и преобразований, а так же более емкие вычисления, то мы решили остановиться на них, и более подробно изучить связанный с ними материал.
Квадратная матрица состоит из равного количества столбцов и строк., их количество является порядком матрицы. Любые квадратные матрицы одного порядка можно умножать и складывать между собой.
Частный случай – диагональные и треугольные матрицы. Если все элементы матрицы, кроме тех, что расположены в диагонали, равны нулю, то она диагональная.
Если в диагональной матрице все элементы диагонали равны единице, то это единичная матрица.
Так же есть треугольные матрицы. В треугольных матрицах все элементы с одной из сторон диагонали равны нулю.[2]
Рассмотрим основные операции, проводимые над матрицами. Часть таких операций нам знакома с начальной школы. Это сложение, умножение и т.д. Но в случае матриц данные операции имеют свои особенности. Для того чтобы сложить между собой две матрицы, они должны быть одного размера. Суммой матриц будет такая матрица, где каждый элемент является попарной суммой всех соответственных элементов исходных матриц. Как и в случае сложения обычных чисел, сложение матриц имеет те же свойства: коммутативность, ассоциативность, сложение с нулевой матрицей равно исходной, существует противоположная по знаку матрица.[1]
Рассмотрим умножение матриц и умножение матрицы на число. В случае, когда матрица умножается на число, результирующая матрица будет содержать в себе все элементы исходной, умноженные на это число. Но умножение матрицы на другую матрицу делается несколько сложнее и имеет ограничение: количество столбцов первой матрицы должно совпадать с количеством строк второй матрицы. Результирующие элементы итоговой матрицы есть попарная сумма произведений соответствующих столбцов первой и строк второй матриц. Как и сумма, произведение имеет свои свойства: ассоциативность, некоммутативность (как исключение, одна из матриц единичная), дистрибутивность. Если матрица умножается на число, то коммутативность так же справедлива для операции, как и ассоциативность.[1]
Любая квадратная матрица имеет свой определитель, или по-другому детерминант. Определитель обозначается как det(A), |A| или Δ|A|. В случае если матрица имеет только один элемент, ее определитель равен этому элементу. Если матрица второго порядка, то ее определитель равен разности произведения элементов главной диагонали и произведения элементов второй. Определитель матрицы большего порядка можно рассчитать по общей формуле:
, где М – дополнительный минор к соответствующему элементу матрицы.[1]
Так же существуют транспонированные матрицы. Если поменять все строки и столбцы исходной матрицы, то получится транспонированная. Соответственно матрица размеров mxn в транспонированном виде будет иметь противоположные размеры: nxm. Для получения транспонированной матрицы следует записать все строки исходной в виде столбцов в том же порядке. Обозначение транспонированной матрицы: A T .
У многих матриц есть обратная матрица. Если исходную матрицу умножить на обратную, то результирующая матрица будет единичной. Если определитель исходной матрицы равен нулю, то обратной не существует. Обозначение обратной матрицы: A -1 . Формула нахождения обратной матрицы:
, где |A| — определитель матрицы,
— транспонированная матрица алгебраических дополнений.[2]
Итак, в данном параграфе мы рассмотрели основные виды матриц и операции над ними. В математике существует большое количество различных матриц и операций с ними. Рассматривать их можно бесконечно, поэтому мы решили остановиться на самой распространённой операции, так как она имеет наибольшую актуальность. Для большей функциональности программы будут рассмотрены матрицы разного порядка.
Среда разработки Lazarus
Lazarus – это весьма удобная, стабильная, простая и богатая возможностями интегрированная среда разработки для создания самостоятельных графических и консольных приложений. Полностью поддерживает синтаксис Pascal.
Lazarus создавался по образу и подобию Delphi. Но, тем не менее, Lazarus– это самостоятельное программное обеспечение и имеет свои принципиальные отличия[6].
В первую очередь стоит отметить что два этих продукта позиционируют абсолютно разную идеологию. В отличии от Borland Delphi, среда разработки Lazarus имеет лицензионное соглашение которое не требует каких-либо выплат правообладателю. Для использования этого продукта не требуются никакие финансовые затраты, в то время как для использования Borland Delphi потребуется сумма около 30 тысяч рублей для приобретения лицензии.
Благодаря свободному распространению Lazarus можно использовать в любых целях, для обучения или разработки своих коммерческих продуктов.
Еще один из немаловажных факторов – это кроссплатформенность. Программы, созданные с помощью Lazarus, можно компилировать для большого спектра операционных систем и архитектур процессоров. При создании своего проекта вы не столкнетесь с проблемой реализации как в среде Windows NT, Linux, Mac OS, так и любых популярных мобильных платформах, таких как Android, Symbian или IOS. Без проблем поддерживаются процессоры x86, x64, ARM.[4].
Описание рабочего окна Lazarus
Перед началом работы разберемся в интерфейсе программы. При запуске мы можем увидеть 5 окон: основная навигационная панель, редактор исходного кода, инспектор объектов, окно форма разрабатываемой программы, окно сообщений.

Рисунок 1. Окна рабочей среды Lazarus.
Основная навигационная панель предназначена для управления самой средой разработки, управления разрабатываемым проектом, интерфейсом программы, а так же содержит панель элементов которые можно использовать в разрабатываемой программе.
Не менее важное окно – это инспектор объектов. С его помощью можно контролировать все объекты и события, программы и их настройки.
В верхней части окна показывается иерархия объектов, а снизу, расположены три вкладки: «Свойства», «События», «Избранное».
Окно редактора исходного кода предназначено непосредственно для написания самого кода программы. В этом окне пишутся строки программы. Данное окно очень похоже на окно обычного блокнота Windows и имеет тот же набор стандартных функций: копирование, вырезание, вставка и т.п. Помимо набора этих операций редактор имеет инструменты применимые для более комфортной разработки программ. Весь функционал редактора присутствует в меню «Правка» и «Поиск» главного меню Lazarus.[9]
Окно формы не имеет интерфейса как такового, в данном окне отображается интерфейс создаваемой программы.
Мы рассмотрели основные положение среды программирования и ее интерфейс. На основе изученных данных можно приступить к следующему этапу. Пример создания простого приложения.
Написание программы можно разделить на два основных этапа:
• Создание в форме требуемых компонентов для ее функционала.
• Написание строк кода, который связан с компонентами и управляет ими.
Разберем эти два этапа по порядку.
Начнем с первого этапа – создадим форму будущего приложения. Для простоты используем классический пример: приложение по нажатию кнопки напишет в окне «Hello world!». Для этого понадобятся несколько инструментов:
• Кнопка, по нажатию которой будет высвечиваться нужная надпись.
• Строковый блок, в нем высветится заданная надпись.
Для создания кнопки в панели инструментов нужно нажать на объект «кнопка». Он расположен во вкладке «Standart», на иконке объекта изображена кнопка с надписью «ок». После нажатия на объект, нужно разместить его в окне формы, в требуемом месте.
Далее разместим объект строки. Он так же расположен во вкладке стандартных инструментов и имеет вид трех первых букв латинского алфавита: «Abc».
Реализовать задачу можно двумя способами:
• При нажатии кнопки в строку будет записана нужная нам надпись.
• Изначально строка будет невидима, нужная надпись будет заведена в строку изначально, а при нажатии кнопки, строка становится видимой и можно наблюдать результат задачи.
Решение будет более правильным, если использовать первый способ. Для начала нужно нажать на объект строки, в инспекторе объектов он называется «label1». В свойствах строки, в параметре «caption» стираем содержимое и оставляем его пустым.
Далее приступим ко второму этапу: написания кода программы. Для того чтобы при нажатии на кнопку произошло какое то действие, требуется связать ее с исходным кодом. Для этого достаточно нажать на нее двойным щелчком мыши. После этого откроется окно редактора с автоматически прописанными строками для кнопки. Курсор встает между тех строк, в которых содержатся операции выполняемые по нажатию кнопки.
Для вывода нужной фразы в строку требуется обратиться к объекту «label1», далее обратиться к его свойству «Caption». Оператор будет иметь следующий вид: « Label1.Caption:= ». Для вывода надписи ее нужно прописать после знака равно, заключить в кавычки и обязательно не забыть поставить в конце точку с запятой: « Label1.Caption:=’Hello world!’; ». Lazarus автоматически окрасит знаки препинания красным цветом, а комментарий вводимой фразы синим.
Программа готова, для ее запуска потребуется нажать кнопку на панели инструментов имеющую символ зеленого треугольника. Lazarus произведет компиляцию и запуск нашего приложения. Если ошибок нет, программа успешно запустится.


Рисунок 2. Пример работы простой программы.
Мы создали простую программу. Теперь изучена работа в среде Lazarus и можно приступать к непосредственному написанию программы.
Итак, в данном параграфе нами были рассмотрены основные принципы работы в среде программирования Lazarus. Были изучены все основные компоненты среды программирования, инструментарий, управление программой. Основные принципы взаимодействия всех этих компонентов. Была написана и протестирована простая программа для практического понимания изученного материала.
Дата добавления: 2018-05-12 ; просмотров: 933 ; Мы поможем в написании вашей работы!
6.2 Алгоритмы и программы работы с матрицами
Рассмотри несколько примеров решения задач обработки матриц.
ЗАДАЧА 6.3. Найти сумму элементов матрицы, лежащих выше главной диагонали (см. рис. 6.13).
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рассмотрим два алгоритма решения данной
задачи. Первый алгоритм (см. рис. 6.14) по-
строен следующим образом: вначале перемен-
ная S для накапливания суммы обнуляется
( S:=0 ). Затем с помощью двух циклов (первый
по строкам, второй по столбцам) перебираются
все элементы матрицы, но накапливание суммы
происходит только в том случае, если этот эле-
мент находится выше главной диагонали (если
выполняется свойство i<j ).
Текст консольного приложения
Рисунок 6.14: Блок-схема
задачи 6.3 (алгоритм 1)
for i:=1 to n do for j:=1 to m do
for i:=1 to n do for j:=1 to m do
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
writeln(‘матрица А’); for i:=1 to n do begin
особенно общая ширина поля!> write(a[i,j]:8:3,’ ‘);
writeln(‘сумма элементов матрицы’, s:8:3); end.
Результаты работы программы представлены на рис. 6.15.
Рисунок 6.15: Результаты работы программы решения задачи 6.3
Второй алгоритм решения этой задачи представлен на рис. 6.16. В нем проверка условия i<j не выполняется, но, тем не менее, в
нем так же суммируются элементы матрицы, находящиеся выше главной диагонали. Для пояснения функционирования алгоритма обратимся к рисунку 6.13.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.16: Блок-схема задачи 6.3 (алгоритм 2)
В первой строке заданной матрицы необходимо сложить все элементы, начиная со второго. Во второй – все, начиная с третьего, в i –й строке процесс суммирова-
ния начнется с ( i+1 )–го элемента
и так далее. Таким образом, первый цикл работает от 1 до N , а
второй от i+1 до M .
Предлагаем читателю самостоятельно составить программу, соответствующую описанному алгоритму.
ЗАДАЧА 6.4. Вычислить количество положительных элементов квадратной матрицы A, расположенных по ее периметру и на диагоналях.
В квадратной матрице число строк равно числу столбцов. Прежде чем приступить к решению задачи, рассмотрим рисунок 6.17, на котором изображена схема диагоналей квадратных матриц различной размерности.
Из рисунка видно, что нет необходимости рассматривать все элементы матрицы. Достаточно рассмотреть элементы, расположенные в первой и последней строках, в первом и последнем столбцах, а также на диагоналях квадратной матрицы. Все эти элементы отмечены на рис. 6.17, причем черным цветом выделены элементы, которые принадлежат строкам, столбцам и диагоналям. Например, элемент принадлежит первой строке, первому столбцу и главной диагонали матрицы, элемент находится в последней строке, последнем столбце и принадлежит главной диагонали. Кроме того, если N – чис-
ло нечетное (на рисунке 6.17 эта матрица расположена слева), то существует элемент с индексом ( N div 2 +1 , N div 2 +1 ), который
находится на пересечении главной и побочной диагоналей. При четном значении N (матрица справа на рис. 6.17) диагонали не пересе-
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.17: Рисунок к условию задачи 6.4
Рассмотрим алгоритм решения задачи. Для обращения к элементам главной диагонали вспомним, что номера строк этих элементов всегда равны номерам столбцов. Поэтому, если параметр i изменяется циклически от 1 до N , то A i , i — элементы расположенные на глав-
ной диагонали. Воспользовавшись свойством, характерным для эле-
ментов побочной диагонали, получим: i+j-1=N → j=N-i+1,
следовательно, для строк i=1,2,…,N элемент A i , N − i 1 — элемент побочной диагонали. Элементы, находящиеся по периметру матрицы,
записываются следующим образом:
ные в первой строке ( i=1,2,…,N ),
ные в последней строке ( i=1,2,…,N ) и соответственно
менты, расположенные в первом столбце ( i=1,2,…,N ),
последнем столбце ( i=1,2,…,N ).
Алгоритм обработки построим следующим образом, сначала обработаем элементы, расположенные на диагоналях квадратной матрицы. Для этого необходимо в каждой строке ( i=1,2,…,N ) проверять
знак элементов A i , i и A i , N − i 1 .
Так как при проверке диагональных элементов матрицы угловые элементы были учтены, то при обработке элементов, расположенных по периметру матрицы, угловые элементы учитывать не нужно.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Поэтому надо перебрать элементы со второго до предпоследнего в
первой и последней строках, в первом и последнем столбцах. for i:=2 to N-1 do
Затем надо проверить, не был ли элемент, находящийся на пересечении диагоналей, подсчитан дважды. Это могло произойти только в том случае, если N – нечетно и элемент, расположенный на пересече-
нии диагоналей 70 , положителен.
if (N mod 2 <>0) and (a[n div 2+1,n div 2+1]>0) then k:=k-1;
Ниже приведен полный текст консольного приложения решения задачи 6.4 с комментариями. На рис. 6.18 представлены результаты
работы программы решения задачи 6.4. var
a:array [1..10,1..10] of integer; i,j,N,k:integer;
begin write(‘N=’); readln(N);
//Ввод исходной матрицы. writeln(‘Введите матрицу A’); for i:=1 to N do
for j:=1 to N do read(a[i,j]);
//Вывод исходной матрицы. writeln(‘Была введена матрица A:’);
70 На пересечении диагоналей находится элемент с индексами ( N div 2 +1 , N div 2 +1 )
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.18: Результаты решения задачи 6.4 for i:=1 to N do
for j:=1 to N do write(a[i,j],’ ‘);
//Обработка элементов, расположенных //на диагоналях матрицы.
for i:=1 to N do begin
if (a[i,i]>0) then k:=k+1; if a[i,N-i+1]>0 then k:=k+1;
//Обработка элементов, расположенных //по периметру матрицы.
for i:=2 to N-1 do begin
if (a[1,i]>0) then k:=k+1; if (a[N,i]>0) then k:=k+1; if (a[i,1]>0) then k:=k+1;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
if (n mod 2<>0) and (a[N div 2+1,N div 2+1]>0) then
k:=k-1; writeln(‘k=’,k); end.
ЗАДАЧА 6.5. Проверить, является ли заданная квадратная матрица единичной.
Единичной называют матрицу, у которой элементы главной диагонали – единицы, а все остальные – нули. Например,
Решать задачу будем так. Предположим, что матрица единичная, ( pr:=true ) и попытаемся доказать обратное. В двойном цикле по
строкам ( i:=1,2. N ) и по столбцам ( j:=1,2. N ) переби-
раем все элементы матрицы. Если диагональный элемент ( i = j ) не равен единице или элемент, расположенный вне диагонали ( i ≠ j ), не равен нулю 71 , то в логическую переменную pr записываем значе-
ние false и прекращаем проверку (аварийно покидаем цикл). После цикла проверяем значение pr , если переменная pr попрежнему равна
true , то матрица единична, иначе она такой не является. var a:array[1..10,1..10] of real; i,j,n:integer;
writeln(‘Введите размер матрицы’); readln(n);
writeln(‘Введите матрицу’); for i:=1 to n do
71 Воспользовавшись логическими операциями and и or, это сложное условие можно записать так if ((i=j) and (a[i,j]<>1)) or ((i<>j) and (a[i,j]<>0)) then
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 308
for j:=1 to n do read(a[i,j]);
истина. Если значение этой переменной при выходе из цикла не изменится, это будет означать, что матрица единичная.> pr:=true;
for i:=1 to n do for j:=1 to n do
writeln(‘Матрица не является единичной’);
ЗАДАЧА 6.6. Преобразовать исходную матрицу так, чтобы последний элемент каждого столбца был заменен разностью минимального и максимального элемента в этом же столбце.
Для решения данной задачи необходимо в каждом столбце найти максимальный и минимальный элементы, после чего в последний элемент столбца записать их разность. Блок-схема алгоритма решения приведена на рис. 6.19.
Ниже приведен текст консольного приложения с комментариями.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.19: Блок-схема алгоритма решения задачи 6.6
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 310
var a:array[1..25,1..25] of real; i,j,n,m:integer;
<Ввод размеров матрицы.>writeln(‘Введите размеры матрицы’); readln(n,m);
<Ввод исходной матрицы.>writeln(‘Введите матрицу’); for i:=1 to n do
for j:=1 to m do read(a[i,j]);
for j:=1 to m do begin
for i:=2 to n do begin
if a[i,j]>max then max:=a[i,j];
if a[i,j]<min then min:=a[i,j]; end;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
for i:=1 to n do begin
for j:=1 to m do write(a[i,j]:7:3,’ ‘);
Теперь давайте создадим визуальное приложение, реализующее рассмотренный алгоритм. За основу возьмем форму (рис. 6.9) и проект транспонирования матрицы A(N,M) , разработанные для зада-
чи 6.2. Окно формы несколько изменим. Кнопку Транспонирование переименуем в Преобразование матрицы , а свойство Caption метки label5 установим Преобразованная матрица A . Кроме того изменим свойство Caption формы. Окно измененной формы представлено на рис. 6.20.
Рисунок 6.20: Окно формы решения задачи 6.6
Обработчики кнопок Ввод , Очистить , Выход из программы
изменятся мало. Рассмотрим алгоритм работы обработчика кнопки Преобразование матрицы . В этом обработчике будет считывание
матрицы из компонента StringGrid1 , преобразование матрицы A
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
по алгоритму, представленному на рис. 6.19, вывод преобразованной матрицы в компонент StringGrid2 .
Текст модуля визуального приложения решения задачи 6.6 с комментариями приведен ниже.
Controls, Graphics, Dialogs, StdCtrls,Grids; //Описание формы
TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Edit1: TEdit;
Label5: TLabel; StringGrid1: TStringGrid; StringGrid2: TStringGrid;
procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private
A:array[1..25,1..25] of real;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
N,M:integer; Form1: TForm1; implementation
//Обработчик кнопки «Выход из программы». procedure TForm1.Button4Click(Sender: TObject); begin
//Обработчик первой кнопки — кнопки //ввода размерности матрицы.
procedure TForm1.Button1Click(Sender: TObject); var i:byte;kod_n,kod_m,kod:integer;
//Ввод размерности матрицы.
//Символьная информация преобразовывается
//в числовую и записывается в переменные N и M. Val(Edit1.Text,N,kod_m); Val(Edit2.Text,M,kod_n);
//Если преобразование прошло успешно //и введенные размеры удовлетворяют //писанию матриц A и B,
if (kod_n=0) and (kod_m=0) and (N>0) and (N<26) and (M>0) and (M< 26) then
//визуализируется первая матрица, StringGrid1.Visible:=true;
//соответствующая ей надпись, Label4.Visible:=true;
//кнопки Очистить Button2.Visible:=true;
//и преобразование матрицы. Button3.Visible:=true; with StringGrid1 do begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
//и нумеруются строки и
for i:=1 to RowCount-1 do
//столбцы первой таблицы.
for i:=1 to ColCount-1 do
//При некорректном вводе выдается
//Устанавливаются стартовые параметры
//Обработчик кнопки «Преобразование матрицы».
procedure TForm1.Button2Click(Sender: TObject);
//Цикл по номерам строк.
//Цикл по номерам столбцов.
//Считывание элементов матрицы A
//из компонента StringGrid1.
with StringGrid2 do
for i:=1 to RowCount-1 do //Нумеруются
//столбцы 2-й матрицы.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
for i:=1 to ColCount-1 do Cells[i,0]:=IntToStr(i);
//Решение задачи 6.6. for j:=1 to m do begin
for i:=2 to n do begin
if a[i,j]>max then max:=a[i,j];
if a[i,j]<min then min:=a[i,j]; end;
//Элементы преобразованной матрицы A выводятся
//таблицы на форме.
//Цикл по номерам строк.
//Цикл по номерам столбцов.
//Запись элемента преобразованной матрицы A в ячейку StringGrid2.
StringGrid2.Cells[j,i]:=FloatToStr(A[i,j]); //Делаем первую кнопку невидимой. Button1.Visible:=False;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
//Обработчик кнопки «Очистить».
procedure TForm1.Button3Click(Sender: TObject); var i,j:integer;
//Очистка компонента StringGrid1. with StringGrid1 do
for i:=1 to RowCount-1 do for j:=1 to ColCount-1 do
Cells[j,i]:=»; //Очистка компонента StringGrid2. with StringGrid2 do
for i:=1 to RowCount-1 do for j:=1 to ColCount-1 do
Cells[j,i]:=»; //Делаем невидимыми компоненты
//StringGrid1, StringGrid2,labe4, label5. StringGrid1.Visible:=False; StringGrid2.Visible:=False; label4.Visible:=False; label5.Visible:=False;
//Делаем невидимыми кнопки //«Преобразование матрицы» и «Очистить». Button2.Visible:=False; Button3.Visible:=False;
//Делаем видимой кнопку «Ввод». Button1.Visible:=True;
//Запись начальных значений размеров //матрицы (N=4, M=3). Edit1.Text:=’4′;
end; initialization <$I unit1.lrs>end.
На рис. 6.21 представлено окно с результатами решения задачи.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.21: Результаты решения задачи 6.6
ЗАДАЧА 6.7. Поменять местами n-й и r-й столбцы матрицы A(K,M).
Задача сводится к обмену n-го и r-го элементов во всех строках матрицы. Блоксхема приведена на рис. 6.22.
Ниже приведен листинг консольного приложения с комментариями.
Результаты работы программы приведе-
ны на рис. 6.23. type matrica=
array [1..15,1..15] of real; var
a:matrica; b:real; i,j,k,m,n,r:byte;
//Ввод размеров матрицы. write (‘k=’);readln(k); write (‘m=’);readln(m); //Ввод матрицы A.
Рисунок 6.22: Блок-схема алгоритма
решения задачи 6.7
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 318
writeln(‘Матрица A’); for i:=1 to k do
for j:=1 to m do read(a[i,j]); //Ввод номеров столбцов матрицы, //подлежащих обмену.
repeat write(‘n=’);readln(n); write(‘r=’);readln(r);
Рисунок 6.23: Результаты решения задачи 6.7
for i:=1 to k do begin
writeln(‘Преобразованная матрица A’); for i:=1 to k do
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
ЗАДАЧА 6.8. Преобразовать матрицу A(m,n) так, чтобы строки с нечетными индексами были упорядочены по убыванию, c четными – по возрастанию.
Каждая строка матрицы является одномерным массивом. Поэтому для упорядочивания строки или столбца можно использовать обычные алгоритмы сортировки массивов. При решении задачи необходимо последовательно просматривать все строки матрицы, если номер строки нечетен, то сортируем строку методом пузырька по убыванию, иначе — по возрастанию.
Блок-схема этого алгоритма представлена на рис. 6.24. Ниже представлено консольное приложение решения этой задачи с комментариями.
На рис. 6.25 приведены результаты работы программы. var
a:array [1..15,1..15] of real; j,i,k,m,n:byte;
//Ввод размеров матрицы. writeln(‘введите m и n’); readln(m,n);
//Ввод матрицы. writeln(‘Матрица А’); for i:=1 to m do
for j:=1 to n do read(a[i,j]);
//Преобразование матрицы. for i:=1 to m do
if (i mod 2)=0 then
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.24: Блок-схема алгоритма решения задачи 6.8
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
for k:=1 to n-1 do for j:=1 to n-k do
if a[i,j] > a[i,j+1] then begin
то упорядочить ее элементы по убыванию.>
Рисунок 6.25: Результаты решения задачи 6.8
for k:=1 to n-1 do for j:=1 to n-k do
if a[i,j] < a[i,j+1] then begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 322
//Вывод преобразованной матрицы. writeln(‘преобразованная матрица A’); for i:=1 to m do
write (a[i,j]:7:3,’ ‘); writeln
ЗАДАЧА 6.9. Задана матрица целых положительных чисел A(n,m). Сформировать вектор P(n), в который записать сумму простых чисел каждой строки матрицы в четверичной системе счисления, если в строке нет простых чисел, в соответствующий элемент массива записать число 0.
Для решения этой задачи нам понадобятся функции: проверки, является ли число простым, и перевода целого числа в четверичную систему счисления. Функция проверки, является ли число простым, подробно рассматривалась в пятой главе при решении задачи 5.7.
Поэтому здесь просто приведем ее текст.
function prostoe(N:integer):boolean; var i:integer; pr:boolean;
if N<1 then pr:=false else
for i:=2 to N div 2 do if (N mod i = 0) then begin
Кроме того в пятой главе мы рассматривали алгоритм (рис. 5.45) и функцию перевода
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
вещественного числа в p -чную систему счисления (задача 5.10). Нужная нам функция перевода целого числа в четверичную систему счисления является частным случаем рассмотренной ранее функции perevod . Ниже приведен текст функции perevod4 , которая пере-
водит целое положительное число в четверичную систему счисления.
function perevod4(N:word):word; var
s1,i ,q, ost: word; begin
while (N<>0) do begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
В каждой строке надо найти сумму простых чисел, а затем полученное число перевести в четверичную систему счисления. Поэтому необходимо для каждой строки ( i:=1,2. n ) выполнить следую-
щее: обнулить сумму S ( S:=0 ), организовать цикл по элементам строки ( j:=1,2. m ), внутри которого проверять, является ли текущий элемент A i , j простым и, если является, добавлять его к сумме S . После выхода из цикла по j необходимо проверить, были ли в строке с номером i простые числа ( S>0 ), и, если были, перевести S в
четверичную систему счисления и сформировать соответствующий элемент массива P ( P[i]:=perevod4(S) ).
Блок-схема алгоритма приведена на рис. 6.26.
Рисунок 6.26: Блок-схема алгоритма решения задачи 6.9
Полный текст консольного приложения: function prostoe(N:integer):boolean;
var i:integer; pr:boolean; begin
if N<1 then pr:=false
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 325
else begin pr:=true;
for i:=2 to N div 2 do if (N mod i = 0) then begin
pr:=false; break; end;
function perevod4(N:word):word; var s1,q, ost: word;
Пока число не станет равным 0.> while (N<>0) do
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
var S,i,j,n,m: word; a:array[1..25,1..25] of word; p:array[1..25] of word;
//Ввод размеров матрицы. writeln(‘Введите размеры матрицы’); readln(n,m);
writeln(‘Введите матрицу A’); <Ввод матрицы.>for i:=1 to n do
для формирования суммы простых чисел каждой строки.>
for i:=1 to n do begin
if prostoe(A[i,j]) then s:=s+A[i,j];
if s>0 then p[i]:=perevod4(s)
//Вывод сформированного массива P. writeln(‘Массив P’);
for i:=1 to n do write(P[i],’ ‘); writeln; end.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Результаты работы программы представлены на рис. 6.27.
Рисунок 6.27: Результаты работы программы решения задачи 6.9
ЗАДАЧА 6.10. Написать программу умножения двух матриц A(N,M) и B(M,L).
Напомним некоторые сведения из курса математики.
Умножать можно только матрицы, у которых количество столбцов в первой матрице совпадает с количеством строк во второй матрице.
Матрица-произведение имеет столько строк, сколько было в первой матрице и столько столбцов, сколько было во второй. Таким образом, при умножении матрицы A(N,M) на матрицу B(M,L ) получа-
ется матрица C(N,L) . Каждый элемент матрицы C i , j является скалярным произведением i -й строки матрицы A и j -го столбца матрицы B . В общем виде формула для нахождения элемента C i , j матрицы имеет вид:
C i , j = ∑ A ik B kj , где i = 1,N и j = 1,L . (6.1)
Рассмотрим более подробно формирование матрицы C(3,2) как произведение матриц A(3,3) и B(3,2) .
a 11 b 11 a 12 b 21 a 13 b 31
= a 21 b 11 a 22 b 21 a 23 b 31
a 31 b 11 a 32 b 21 a 33 b 31
a 11 b 12 a 12 b 22 a 13 b 32 a 21 b 12 a 22 b 22 a 23 b 32 . a 31 b 12 a 32 b 22 a 33 b 32
Следует помнить, что A B ≠ B A .
Блок-схема, реализующая расчет каждого элемента матрицы C по
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
формуле (6.1), приведена на рис. 6.28. Далее приведен текст программы умножения двух матриц с комментариями. Результат работы представлен на рис. 6.29.
Рисунок 6.28: Блок-схема
Рисунок 6.29: Результаты работы
программы умножения матриц
умножения двух матриц
//Умножение двух матриц.
type matrica=array [1..15,1..15] of real; var a,b,c:matrica; i,j,M,N,L,k:byte; begin
//Ввод размеров матриц.
writeln(‘введите n,m и l’); readln(N, M, L); writeln(‘Матрица A’);//Ввод матрицы A.
for j:=1 to M do read(a[i,j]); writeln(‘Матрица B’);//Ввод матрицы B. for i:=1 to M do
for j:=1 to L do read(b[i,j]);
for i:=1 to N do //Формирование матрицы C. for j:=1 to L do
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
for k:=1 to M do c[i,j]:=c[i,j]+a[i,k]*b[k,j];
writeln(‘матрица C=A*B’);//Вывод матрицы C=AB. for i:=1 to N do
for j:=1 to L do write(c[i,j]:7:3,’ ‘);
ЗАДАЧА 6.11 В матрице натуральных чисел A(N,M) найти строки, где находится максимальное из простых чисел. Элементы в них упорядочить по возрастанию. Если в матрице нет простых чисел, то оставить ее без изменений.
Перед решением задачи отметим некоторые ее особенности 72 . В матрице может не быть простых чисел, максимальных значений может быть несколько, и при этом некоторые из них будут находиться в одной строке.
При решении задачи нам понадобятся следующие подпрограммы: 1. Функция Prostoe , которая проверяет, является ли число P
типа word простым. Она возвращает значение true , если число P –
простое и false – в противном случае. Заголовок функции имеет вид
Function Prostoe (P:word):Boolean;
2. Процедура Udal , которая из массива чисел X удаляет значения,
встречающиеся более одного раза. У процедуры два параметра: массив X и его размер N , оба – параметры переменные. Заголовок проце-
Procedure Udal(var X:massiv; var N:word);
Перед описанием процедуры следует описать тип данных massiv (например, massiv = array [1..200] of word ). Блок-схема
процедуры Udal представлена на рис. 6.30.
72 Авторы рекомендуют читателям внимательно изучить этот пример, в нем сконцентрированы практически все основные моменты, рассмотренные нами до сих пор.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.30: Блок-схема процедуры Udal
Удаление повторяющихся элементов происходит следующим образом. Просматриваются все элементы, начиная с первого, i -й эле-
мент сравнивается со всеми последующими . Если x i = x j , то встретился повторяющийся элемент, и мы удаляем из массива элемент с но-
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
мером j . Алгоритм удаления был подробно рассмотрен в пятой главе. 3. Функция Nalichie возвращает true , если число a присутствует в массиве b , и false – в противном случае. Заголовок проце-
Function Nalichie(a:word; b:massiv; N:word);
Блок-схема функции представлена на рис. 6.31. 4. Процедура Vozr упорядочения масси-
ва х по возрастанию.
Алгоритмы упорядочения рассматривались в пятой главе. Здесь авторами использовался алгоритм сортировки методом пузырька.
У процедуры Vozr два параметра: массив х (параметр-переменная) и его размер N
(параметр-значение). Заголовок процедуры
Procedure Vozr(var x:massiv; N:word);
Рассмотрим более подробно алгоритм решения задачи 6.11, который приведен на рис. 6.32-6.33. После ввода матрицы (блоки 1-4) предполагаем, что простых чисел нет.
В логическую переменную Pr записываем false , как только встретится простое число, в переменную Pr запишем true.
Количество максимальных значений среди простых чисел равно 0 ( k:=0) (блок 5).
Рисунок 6.31: Блок-схема функции
Для проверки, является ли простым числом каждый элемент матрицы, обращаемся к функции Prostoe . Если число простое (блок 8),
проверяем, первое ли это простое число в матрице (блок 9).
Если это первое простое число, то переписываем его в переменную max, в переменную k записываем число 1 (количество максиму-
мов равно 1 ), номер строки, в которой находится максимум, записы-
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
ваем в массив mas под номером k 73 . В связи с тем что в матрице есть простые числа, в переменную Pr записываем true (блок 10).
Если это не первое простое число, сравниваем A ij с переменной max . Если A ij max (блок 11), то в переменную max запишем A ij , в переменную k запишем 1 (есть один максимум), в mas[k] записываем i – номер строки, где находится максимальный элемент (блок
12). Если A ij = max (блок 13), то встретилось число, равное переменной max. В этом случае значение k увеличиваем на 1 и в mas[k] записываем номер строки, где находится элемент, равный max .
В результате двойного цикла обработки всех элементов матрицы (блоки 6-14) в переменной max будет храниться максимальное из про-
стых чисел, в переменной k – количество максимумов, в массиве mas из k элементов будут храниться номера строк, где находятся максимальные значения среди простых чисел матрицы. В переменной Pr хранится true , если в матрице есть простые числа, false – в про-
Если в матрице нет простых чисел (блок 15), выводим соответствующее сообщение (блок 16), в противном случае – с помощью процедуры Udal (блок 17) удаляем из массива mas элементы, встре-
чающиеся более одного раза 74 . Затем просматриваем все строки матрицы (цикл начинается блоком 18), если номер этой строки присутствует в массиве mas (блок 19), то переписываем текущую строку
матрицы в массив b (блоки 20-21) и обращаемся к процедуре упорядочивания массива по возрастанию Vozr (блок 22).
Упорядоченный массив b переписываем в i -ю строку матрицы А (блоки 23-24). На последнем этапе выводим на экран матрицу А после
преобразования (блоки 25-27).
Ниже приведен листинг всей программы с подробными комментариями.
73 В массиве mas будут храниться номера строк, где находится максимум.
74 Если некоторые максимальные элементы находятся в одной строке, то в массиве mas есть повторяющиеся элементы.
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
(начало) 11.6 задачи решение схема-Блок 32:.6 Рисунок
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Рисунок 6.33: Блок-схема решения задачи 6.11 (продолжение)
type massiv=array[1..200] of word;
var pr:boolean;i:word; begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus 335
if N>0 then begin
for i:=2 to n div 2 do
if N mod i =0 then begin
procedure udal(var x:massiv; var n:word); var i,j,m:word;
while(i<=n) do begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
if x[i]=x[j] then begin
for m:=j to N-1 do x[m]:=x[m+1];
var pr:boolean; i:word; begin
if b[i]=a then begin
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
pr. > nalichie:=pr end;
procedure vozr(var x:massiv; n:word);
var i, j, b :word; begin
for i:=1 to N-1 do for j:=1 to N-i do
if x[j]>x[j+1] then begin
//Начинается основная программа var
N, M, i, j, k, max :word; A:array[1..20,1..20] of word; pr, L: boolean;
mas, b:massiv; begin
writeln(‘ Matrica A’); for i:=1 to N do
for j:=1 to M do read(A[i,j]);
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus
Практическая работа «Работа с матрицей в Lazarus»
Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.
Лабораторно-практическое занятие «Матрицы»
Цель: освоить применение компонент при программировании циклических алгоритмов (двумерные массивы)
Задача: Создать приложение для вычисления наименьшего из элементов матрицы А( m x n ). Элементы матрицы генерируются с помощью датчика случайных чисел. Выводится наименьший элемент, его строка и столбец.

1) Label 1- «Размерность», Label 2- « m =», Label 3 « n =», Label 4«Наименьший элемент=», Label 5, Label 7, Label 9- пустые, Label 6 «столбец», Label 8 «строка».
3) StringGrid1 таблица со вкладки Additional
4) CSpinEdit 1, CSpinEdit 2 со вкладки Samples , который позволяет отображать и редактировать целое число посредством двойной кнопки. Установите их свойства MinValue =1, MaxValue =10.
Фрагмент программы :
int m,n, k,s,min, mas[100][100];
__fastcall TForm1::TForm1(TComponent* Owner)
void __fastcall TForm1::FormCreate(TObject *Sender)
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
void __fastcall TForm1::CSpinEdit2Change(TObject *Sender)
void __fastcall TForm1::Button1Click(TObject *Sender)
1) Создать программу нахождения максимального элемента и его индексов в матрице, где элементы вводятся с клавиатуры.
2) Выполнить индивидуальную задачу на двумерный массив.

Курс повышения квалификации
Профессиональные компетенции педагога в рамках Федерального закона «Об образовании в Российской Федерации» №273-ФЗ от 29.12.2012

Курс повышения квалификации
Актуальные вопросы теории и практики современного образования

Курс профессиональной переподготовки
Информатика: теория и методика преподавания в образовательной организации
- Сейчас обучается 286 человек из 67 регионов

«Домашнее обучение. Лайфхаки для родителей»
Краткое описание документа:
Лабораторно-практическое занятие «Матрицы»
Цель: освоить применение компонент при программировании циклических алгоритмов (двумерные массивы)
Задача: Создать приложение для вычисления наименьшего из элементов матрицы А(m x n). Элементы матрицы генерируются с помощью датчика случайных чисел. Выводится наименьший элемент, его строка и столбец.
- подготовка к ЕГЭ/ОГЭ и ВПР
- по всем предметам 1-11 классов
«Такие разные дети: преимущества тьюторской позиции учителя»
Свидетельство и скидка на обучение каждому участнику
Дистанционные курсы для педагогов
Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:
5 910 560 материалов в базе
«Интеграция современного искусства в детское творчество»
Свидетельство и скидка на обучение
каждому участнику
Ищем педагогов в команду «Инфоурок»
- ЗП до 91 000 руб.
- Гибкий график
- Удаленная работа
Другие материалы
- Информатика
- 10 класс
- Другие методич. материалы
- 09.02.2019
- 1133
- 4
- Информатика
- 9 класс
- Другие методич. материалы
- 09.02.2019
- 823
- 49
- Информатика
- 5 класс
- Рабочие программы
- 09.02.2019
- 159
- 0
- Информатика
- Рабочие программы
- 09.02.2019
- 928
- 55
- Информатика
- Конспекты
- 09.02.2019
- 2269
- 9
- Информатика
- Конспекты
- 09.02.2019
- 1678
- 23
- Информатика
- Презентации
- 09.02.2019
- 497
- 2
- Информатика
- Конспекты
- 09.02.2019
- 1385
- 3
«Практический подход в работе с утратой смысла жизни: логотерапия»
Свидетельство и скидка на обучение каждому участнику
Вам будут интересны эти курсы:
- Курс повышения квалификации «Информационные технологии в деятельности учителя физики»
- Курс повышения квалификации «Внедрение системы компьютерной математики в процесс обучения математике в старших классах в рамках реализации ФГОС»
- Курс повышения квалификации «Организация работы по формированию медиаграмотности и повышению уровня информационных компетенций всех участников образовательного процесса»
- Курс профессиональной переподготовки «Информационные технологии в профессиональной деятельности: теория и методика преподавания в образовательной организации»
- Курс повышения квалификации «Использование компьютерных технологий в процессе обучения в условиях реализации ФГОС»
- Курс повышения квалификации «Специфика преподавания информатики в начальных классах с учетом ФГОС НОО»
- Курс повышения квалификации «Применение MS Word, Excel в финансовых расчетах»
- Курс повышения квалификации «Введение в программирование на языке С (СИ)»
- Курс профессиональной переподготовки «Математика и информатика: теория и методика преподавания в образовательной организации»
- Курс повышения квалификации «Современные тенденции цифровизации образования»
- Курс повышения квалификации «Специфика преподавания дисциплины «Информационные технологии» в условиях реализации ФГОС СПО по ТОП-50»
- Курс повышения квалификации «Применение интерактивных образовательных платформ на примере платформы Moodle»
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.
- 09.02.2019 1326
- DOCX 108 кбайт
- Оцените материал:
Настоящий материал опубликован пользователем Авгаева Оксана Вячеславна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Автор материала
- На сайте: 7 лет и 4 месяца
- Подписчики: 0
- Всего просмотров: 13620
- Всего материалов: 8
40%
Московский институт профессиональной
переподготовки и повышения
квалификации педагогов
Дистанционные курсы
для педагогов
663 курса от 690 рублей
Выбрать курс со скидкой
Выдаём документы
установленного образца!
85 минут
«Нравственно-половое воспитание — основа сохранения и укрепления репродуктивного здоровья нации»
82 минуты
«Развитие интеллектуальных способностей школьников путем мнемотехник»
131 минута
«Технология дифференцированного обучения в условиях реализации ФГОС»
Подарочные сертификаты
- Курсы «Инфоурок»
- Онлайн-занятия с репетиторами на IU.RU
Ответственность за разрешение любых спорных моментов, касающихся самих материалов и их содержания, берут на себя пользователи, разместившие материал на сайте. Однако администрация сайта готова оказать всяческую поддержку в решении любых вопросов, связанных с работой и содержанием сайта. Если Вы заметили, что на данном сайте незаконно используются материалы, сообщите об этом администрации сайта через форму обратной связи.
Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.


