Автоматизация решения задачи на находжение матрицы в составе другой матрицы
Пояснительная
записка
к
курсовой работе
Программирование
на алгоритмических языках
Рудный
2008г.
ВВЕДЕНИЕ
Алгоритмизация - это процесс составления
алгоритмов решения задачи, а в свою очередь алгоритм - это точно определённая
последовательность действий для некоторого исполнителя, выполняемых по строго
определённым правилам и приводящих через некоторое количество шагов к решению
задачи.
Суть автоматизации задачи заключается в простоте
и удобстве получения результата путём ввода необходимых условий и формул.
Необходимо автоматизировать процесс
для упрощения работы. Автоматизация позволит уменьшит время потраченное на
решение поставленной задачи, а так же выполнит решение без ошибок (при
правильно заданой задаче и правильных путях выполнения решения). Так же
происходит глобальная экономия человеческих ресурсов. Можно создать алгоритм
решением которого были бы заняты множество людей из разных сфер деятельности, а
воспользововшись алгоритмическими путями можно решить поставленную задачу всего
с помощью одной или нескольких ЭВМ.
С массовой компьютеризацией
общества, стала остро стоять проблема компьютерной грамотности. Составление
алгоритмов является одной из основ всех информационных систем, знать основы
алгоритмизации обязан каждый человек тесно работающий с информационными
технологиями.
Решая задачу с помощью алгоритмов
можно: экономить время и человеческие ресурсы, выполнять поставленную задачу
совершая меньше ошибочных действий (ошибок в расчетах), создавать более сложные
системы и решать более сложные задачи.
1. МАТЕМАТИЧЕСКАЯ ЧАСТЬ (ПОСТАНОВКА ЗАДАЧИ)
Задача о замочной скважине, подойдет ли ключ к
замку. Даны мозаичные изображения замочной скважины и ключ. Нужно узнать,
пройдёт ли ключ в скважину? То есть даны матрицы K(m1,n1) и L(m2,n2), m1>m2,
n1>n2, состоящие из нулей и единиц. Проверить, можно ли наложить матрицу L
на матрицу K (без поворота, разрешается только сдвиг) так, что каждой единице
матрицы L соответствовал нуль матрицы K, и если можно, то как?
. ОПИСАНИЕ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ
Для решения задачи составлена блок-схема,
которая позволяет наглядно увидеть ход выполнения поставленной задачи.
Блок-схема тем и хороша, потому, что любой человек, зная всего лишь основы
построения алгоритмов, сможет прочесть данную схему
-
в ней не применяются операторы языков программирования.
3. ОПИСАНИЕ ПЕРЕМЕННЫХ
При описании блок-схемы решения задачи
использованы следующие обозначения переменных:
str - номер
строки необходимый для запоминания,
m1 - количество
строк скважины,
m2
- количество строк ключа,
n1 -
количество столбцов скважины,
n2 - количество
столбцов ключа,
n, m,
z - промежуточные
переменные.
. АНАЛИЗ РЕЗУЛЬТАТОВ ВЫЧИСЛЕНИЙ
Запуская программу, открывается окно, в котором
сразу же необходимо ввести количество строк и столбцов для обоих массивов,
ключа и замка.
Рис.1 Ввод количества строк и столбцов для
матриц
Затем программа просит ввести элементы для обеих
матриц. Сначала вводится замок, а затем после появившегося сообщения ключ
Рис. 2 Заполнения матриц элементами(согласно
условию элементы могут быть только 1 и 0)
Далее программа производит поиск ключа в составе
замка только с обратными значениями элементов, т.е. на месте 0 ищет 1 и
наоборот.
Сначала программа ищет обратное значение первого
элемента ключа в замке. Найдя, его она начинает сравнивать первую строку ключа
с найденной строкой замка. Если сходства полностью нет, т.е. на месте каждой 1
стоит 0 и наоборот, то программа переходит на следующую строку и ключа и замка
и продолжает сравнения. Если получилось что каждому нулю матрицы ключа
соответствует единица матрицы замка и наоборот, то программа выдаст сообщение «VSE
SOVPALO». Если же будет
расхождение, то программа вернет весь цикл к сравнению первого элемента и весь
алгоритм повторится заново.
автоматизация
матрица задача
ЗАКЛЮЧЕНИЕ
Данная курсовая работа демонстрирует решение
задачи, путём её автоматизации на алгоритмическом языке С++. При помощи ЭВМ
возможно быстрое вычисление результатов задачи, учитывая некоторые условия,
вводимые пользователем. Данная программа показывает как с помощью языка С можно
найти матрицу в составе другой матрицы. Программа особенно действенна, в случае
если необходимо найти небольшую матрицу в другой матрице больших размеров.
Составленная программа позволяет избежать ошибки, которую может допустить
человек при визуальном нахождении этих матриц.
Составление этой программы дало мне большую
практику в составлении массивных алгоритмов и связи мини программ в состав
большой программы - и придании этим программам единой целостности.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Конспект
лекций
. Методические
указания к выполнению курсовой работы по дисциплине «Программирование на
алгоритмических языках». Составитель: Барышникова Т.А. Рудный, 2008
. Бьярн
Страустрап «Справочное руководство по C++»
Москва, 1998.
. Андрей
Александреску «Программирование на С++» ВИЛЬЯМС, Киев, 2002.
ПРИЛОЖЕНИЕ
1
#include<conio.h>
#include<stdio.h>()
{K[100][100];L[100][100];j,i,m1,m2,n1,n2,st,str,a,b,k,m,n,z;("vvedite
kolli4estvo strok zamka");("%d",&m1);("vvedite
kolli4estvo stolbcov zamka");("%d",&n1);("vvedite
kolli4estvo strok klu4a");("%d",&m2);("vvedite kolli4estvo
stolbcov klu4a");("%d",&n2 );("vvedite
zamok");(i=1;i<=m1;i++)(j=1;j<=n1;j++)("%d",&K[i][j]);("vvedite
Klu4");(i=1;i<=m2;i++)(j=1;j<=n2;j++)("%d",&L[i][j]);=1;=1;
//poisk pervogo elementa klu4a:
for(i=str;i<=m1-m2+1;i++)(j=st;j<=n1-n2+1;j++)(L[1][1]=!K[i][j])
{=i;=j;;
}=2 ;
//sravnenie pervoi
stroki(j=st+1;j<=st+n2-1;j++)
{(L[1][k]=!K[str][j])
{=k+1;
}
{q;
}
}
= 2 ; //sravnenie klu4a na4inaya so
vtoroi stroki i do konca=1;=str+1;: for(j=st;j<=st+n2;j++)
{(L[n][m]=!K[z][j])
{=m+1 ;(m>n2)
{ //i vse sovpalo, to perehodim k
koncuv;
}=1;=str+1;l; //esli stro4ka
sovpala,perehod na sledushuu
}
}
{q;
}
}: printf("vse sovpalo\n v
stroke %d \n %d v stolbce %d",str,st);();
}