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