Программирование математических задач
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине: Программирование и
алгоритмизация
на тему: Программирование
математических задач
НОРМАТИВНЫЕ
ССЫЛКИ
В настоящей пояснительной записке используются ссылки на следующие
нормативные документы:
ГОСТ 7.32-2001 «Отчет о научно-исследовательской работе. Структура и
правила оформления».
ГОСТ 2.105-95 «Общие требования к текстовым документам»
ГОСТ Р 7.0.5-2008 «Библиографическая ссылка. Общие требования и правила
составления»
ГОСТ 7.1-2003 «Библиографическая запись. Библиографическое описание.
Общие требования и правила составления»
ГОСТ 7.80-2000. «Библиографическая запись. Заголовок. Общие требования и
правила составления»
ГОСТ 19.701-80 - ЕСПД. Схемы алгоритмов, программ, данных и систем.
ВВЕДЕНИЕ
Класс является основой языка С#, так как все действия в любой программе
на этом языке происходят внутри класса. Реализация механизма подпрограмм в C#
возложена на функциональный член класса, который именуется методом и реализует
вычисления или другие действия, выполняемые классом или экземпляром. Методы
определяют поведение класса.
Данная курсовая работа направлена на подробное изучение классов и методов
языка C#. С этой целью будет реализовано программирование математических задач.
Также данная курсовая работа способствует закреплению полученных на занятиях
навыков алгоритмизации и программирования задач на языке высокого уровня C#.
1. ЗАДАНИЕ №1
1.1 Формулировка задачи
Получить все четырехзначные натуральные числа, в записи которых нет
одинаковых цифр. Вывести последнее число в виде гистограммы.
1.2 Спецификации задачи
Входные данные:
четырехзначные натуральные числа.
Выходные данные:
- Получить все четырехзначные натуральные числа, в записи которых нет
одинаковых цифр;
- Вывести последнее число в виде гистограммы.
1.3 Математическая постановка задачи
Таблица 1
Характеристика переменных
|
Имя переменной
|
Смысл переменной
|
Назначение переменной
|
Ограничения
|
T
|
Переменная, в которой останется последнее число
|
Исходная
|
|
А1
|
первая цифра числа
|
Результат
|
|
А2
|
вторая цифра числа
|
Результат
|
|
А3
|
третья цифра числа
|
Результат
|
|
А4
|
четвертая цифра числа
|
Результат
|
|
p
|
Вспомогательная
|
Промежуточная
|
1000
|
w
|
Переменная, в которой останется последняя цифра
|
Результат
|
|
В таблице 1 приведен ряд переменных, представляющих исходные данные и
результаты работы программы. Этот ряд может быть дополнен на стадии разработки
алгоритма.
После запуска программы она ищет первую цифру А1, вторую А2, третью А3 и
четвертую А4 . Затем программа сравнивает все эти цифры, нет ли там повторений
и записывает все полученные цифры в одно число, в переменную T.
1.4 Схема алгоритма. Описание
Схема алгоритма содержит следующие типовые структурные элементы:
внутренний цикл, ветвление, внешний цикл. При выполнении внешнего цикла, мы
последовательно, начиная с 1000 элемента, сравниваем их с 10000 элементом. В
этом же цикле находим первую цифру и записываем её в а1, затем ищем вторую
цифру и записываем в а2, третью в а3 и четвертую в а4. Затем проверяем на
сходство цифры если первая цифра не равна второй и если первая цифра не равна
третьей и если первая цифра не равна четвертой и если вторая цифра не равна
третьей и если вторая цифра не равна четвертой и если третья цифра не равна
четвёртой, то записываем её в переменную T.
язык
программирование массив матрица
1.5 Текст программы и схема алгоритма
using
System;System.Collections.Generic;System.Linq;System.Text;
namespace ConsoleApplication1
{Program
{void Main(string[] args)
{
Console.BufferHeight = 5000;.WriteLine("Натуральные числа:");t = 0;//переменная в которой останется
последнее число
for (int i = 1000; i < 10000; i++)
{ a1 = i / 1000;//первая цифра числаa2 = (i % 1000) / 100;//вторая
цифра числаa3 = (i % 100) / 10;//третья цифра числаa4 = i % 10;//четвертая
цифра числа
//проверяем на сходство цифры(!= a2 &&//если первая цифра не
равна второй И!= a3 &&//если первая цифра не равна третьей И!= a4
&&//если первая цифра не равна четвертой И!= a3 &&//если вторая
цифра не равна третьей И!= a4 &&//если вторая цифра не равна четвертой
И!= a4//если третья цифра не равна четвёртой
)
{.WriteLine();.Write(i);//выводим
число на экран= i;
}
}.WriteLine();
//строим гистограмму.WriteLine("Вывод последнего числа в виде
гистограммы");
int p = 1000, w;(int j = 0; j < 4; j++)
{= t / p;(int jj = 0; jj < w; jj++).Write("*");=
t % p;= p / 10;.WriteLine(+w);
}
}
}
}
1.6 Результат машинного тестирования программы
Вывод всех четырехзначных натуральных чисел, в записи которых нет
одинаковых цифр. Вывод последнего числа в виде гистограмы
Рисунок 1
2. ЗАДАНИЕ №2
2.1 Формулировка задачи
Даны четыре матрицы размера m*n. Если элементы, стоящие на
одинаковых позициях в этих матрицах, равны - поместить их в новую матрицу на
соответствующие позиции. Остальные элементы новой матрицы приравнять к нулю.
Нормализовать новой матрицы.
2.2 Спецификация задачи
Входные данные:
- число m;
- число n;
Выходные данные:
новая матрицы mnew[i, j];
- наибольший элемент в матрице max;
нормализованная матрица mnew1[i, j];
2.3 Математическая постановка задачи
В таблице 2 приведен ряд переменных, представляющих исходные данные и
результаты работы программы. Этот ряд будет дополнен на стадии разработки
алгоритма. Переменная M -
двумерный массив (матрица), элементы которого будут менять индексы по ходу
работы программы, т.е. положение элементов в матрице будет меняться.
Общее описание алгоритма. Пользователь вводит с клавиатуры 4 матрицы
размерностью строк n и столбцов m. Затем массив M1, M2, M1, M4 (матрицы) размером mxn заполняется случайным образом. Если
элементы, стоящие на одинаковых позициях в этих матрицах, равны - поместить их
в новую матрицу (Mnew) на
соответствующие позиции. Остальные элементы новой матрицы приравнять к нулю.
Для нормализации матрицы необходимо найти наибольший элемент (max) в новой матрице (Mnew) и разделить его на каждый элемент в
новой матрице.
Таблица 2 - Характеристика переменных
Имя
|
Смысл переменной
|
Назначение
|
Ограничения
|
n
|
Размер матрицы
|
Исходная
|
Целый тип данных
|
m
|
Размер матрицы
|
Исходная
|
Целый тип данных
|
m1
|
Исходный массив
|
Результат
|
|
m2
|
Исходный массив
|
Результат
|
|
m3
|
Исходный массив
|
Результат
|
|
m4
|
Исходный массив
|
Результат
|
|
Mnew
|
Новая матрица
|
Результат
|
|
max
|
Наибольший элемент в новой матрице
|
Результат
|
|
Mnew1
|
Нормализованная матрица
|
Результат
|
|
i
|
Счётчик цикла
|
Промежуточная
|
|
j
|
Счётчик цикла
|
Промежуточная
|
|
r
|
Счётчик цикла
|
Промежуточная
|
|
2.4 Схема алгоритма. Описание
Схема алгоритма содержит следующие типовые структурные элементы: внешний
цикл и вложенные друг в друга структуры ветвления.
В первую очередь пользователь вводит с клавиатуры четыре матрицы с m столбцов и n строк. Затем при помощи метода Next объекта r - экземпляра класса Random
массив M1, M2, M1, M4 заполняется случайным образом во
вложенном цикле.
Далее над матрицами производится следующие действие:
Если элементы, стоящие на одинаковых позициях в этих матрицах, равны -
поместить их в новую матрицу (Mnew)
на соответствующие позиции. Остальные элементы новой матрицы приравнять к нулю.
Для того чтобы нормализовать матрицу Нам необходимо найти наибольший
элемент в новой матрице. Для этого мы создаем еще один цикл, где выполняется
условие: если элемент массива больше max, то записываем это значение в max.
Затем мы каждый элемент новой матрицы (Mnew) делим на наибольший элемент в матрице (max).
Результат выводим на экран.
2.5 Текст программы и схема алгоритма
System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication2
{Program
{.WriteLine("Ввод матрица 1");//вывод строки
Random r = new Random();//объявление переменной для генерации значений
элементов массивовm = 10, n = 10;//максимальное количество строк и столбцов в
масииве[,] m1 = new int[m, n];//объявление первого
массива.WriteLine("Введите значение m1 (строк) < 10:");//выводим
запрос на ввод размерности строк первого массива= Convert.ToInt32(Console.ReadLine());//считываем
количество строк в первом массиве.WriteLine("Введите значение n1
(столбцов) < 10:");//выводим запрос на ввод размерности столбцов
первого массива= Convert.ToInt32(Console.ReadLine());//считываем количество
столбцов в первом массиве.WriteLine("матрица 1");//выводим
соответствующую надпись
for (int i = 0; i < m; ++i)// проходим по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам
{[i, j] = r.Next(1, 3);//заполняем первый массив случайными
числами.Write(" " + m1[i, j]);//выводим элемент массива на экран
}.WriteLine();//перейти на строчку ниже
}.WriteLine();//перейти на строчку ниже.WriteLine("Ввод матрица
2");//вывод строки[,] m2 = new int[m, n];//объявление второго
массива.WriteLine("Введите значение m2 (строк) < 10:");//выводим
запрос на ввод размерности строк второго массива=
Convert.ToInt32(Console.ReadLine());//считываем количество строк во втором
массиве.WriteLine("Введите значение n2 (столбцов) <
10:");//выводим запрос на ввод размерности столбцов второго массива=
Convert.ToInt32(Console.ReadLine());//считываем количество столбцов во втором
массиве.WriteLine("матрица 2");(int i = 0; i < m; ++i)// проходим
по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам
{[i, j] = r.Next(1, 3);//заполняем второй массив случайными
числами.Write(" " + m2[i, j]);//выводим элемент массива на экран
}.WriteLine();//перейти на строчку ниже
}.WriteLine();//перейти на строчку ниже.WriteLine("Ввод матрица
3");//вывод строки[,] m3 = new int[m, n];//объявление третьего
массива.WriteLine("Введите значение m3 (строк) < 10:");//выводим
запрос на ввод размерности строк третьего массива=
Convert.ToInt32(Console.ReadLine());//считываем количество строк в третьем
массиве.WriteLine("Введите значение n3 (столбцов) < 10:");//выводим
запрос на ввод размерности столбцов третьего массива=
Convert.ToInt32(Console.ReadLine());//считываем количество столбцов в третьем
массиве.WriteLine("матрица 3");//вывод строки(int i = 0; i < m;
++i)// проходим по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам
{[i, j] = r.Next(1, 3);//заполняем третий массив случайными
числами.Write(" " + m3[i, j]);//выводим элемент массива на экран
}.WriteLine();//перейти на строчку ниже
}.WriteLine();//перейти на строчку ниже.WriteLine("Ввод матрица
4");//вывод строки[,] m4 = new int[m, n];//объявление четвертого
массива.WriteLine("Введите значение m4 (строк) < 10:");//выводим
запрос на ввод размерности строк четвертого массива=
Convert.ToInt32(Console.ReadLine());//считываем количество строк в четвертом
массиве.WriteLine("Введите значение n4 (столбцов) <
10:");//выводим запрос на ввод размерности столбцов четвертого массива=
Convert.ToInt32(Console.ReadLine());//считываем количество столбцов в четвертом
массиве.WriteLine("матрица 4");//вывод строки(int i = 0; i < m; ++i)//
проходим по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам
{[i, j] = r.Next(1, 3);//заполняем четвертый массив случайными
числами.Write(" " + m4[i, j]);//выводим элемент массива на экран
}.WriteLine();//перейти на строчку ниже
}.WriteLine();//перейти на строчку ниже[,] mnew = new int[m,
n];//объявление вспомогательного массива(int i = 0; i < m; i++)// проходим
по всем строкам
{(int j = 0; j < n; j++)//проходим по всем столбцам
{((m1[i, j] == m2[i, j]) && (m2[i,j] == m3[i, j]) && (m3[i,j]==
m4[i, j]))//если элементы стоящие на одном и том же месте в четырех массивах
равны
{//то этот элемент заносим в вспомогательный массив
mnew[i, j] = m1[i, j];
}
{//иначе в вспомогательный массив вносим 0[i, j] = 0;
}
}
}.WriteLine("Новая матрица");//вывод строки(int i = 0; i <
m; i++)// проходим по всем строкам
{(int j = 0; j < n; j++)//проходим по всем столбцам.Write("
" + mnew[i, j]);//выводим элемент вспомогательного
массива.WriteLine();//перейти на строчку ниже
}.WriteLine();//перейти на строчку нижеmax = mnew[0, 0];//объявлям
переменную max(int i = 0; i < m; ++i)// проходим по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам(mnew[i, j] >
max) max = mnew[i, j];//если текущий элемент массива больше max, то записываем
это значение в max
}.WriteLine("Наибольший элемент в матрице " + max);//выводим
Наибольший элемент в матрице.Read();//ждем от пользователя нажатия на Enter[,]
mnew1 = new int[m, n];//объявляем массив в которм будет находиься нормированный
вспомогательный массив(int i = 0; i < m; ++i)// проходим по всем строкам
{(int j = 0; j < n; ++j)//проходим по всем столбцам
{[i, j] = mnew[i, j] / max;//нормируем вспомогательный массив и заносим в
массив значение.Write(" " + mnew1[i,j]);//выводим на элемент
нормированного массива на экран
}.WriteLine();//перейти на строчку ниже
} Console.WriteLine();//перейти на строчку ниже.ReadLine();
}
}
}
2.6 Результат машинного тестирования программы
Вводит с клавиатуры 4 матрицы размерностью строк n и столбцов m.
Затем массив M1, M2, M1, M4 (матрицы) заполняется случайным
образом. Если элементы, стоящие на одинаковых позициях в этих матрицах, равны -
поместить их в новую матрицу (Mnew)
на соответствующие позиции. Остальные элементы новой матрицы приравнять к нулю.
Вывод наибольшего элемента матрицы. Затем вывод нормализованной матрицы.
Рисунок 2
Заключение
В ходе выполнения курсовой работы были реализованы алгоритмы решения
поставленных задач и написаны соответствующие коды программ. Программы были написаны
с использованием методов, что позволило значительно сократить и оптимизировать
коды.
В результате были созданы две работоспособные программы по решению
математических задач. Первая получить все четырехзначные натуральные числа, в
записи которых нет одинаковых цифр. Выводит последнее число в виде гистограммы.
Вторая создает четыре матрицы размера m*n. Если элементы, стоящие на
одинаковых позициях в этих матрицах, равны - поместить их в новую матрицу на
соответствующие позиции. Остальные элементы новой матрицы приравнивает к нулю.
Нормализует новую матрицу.
Список рекомендуемой литературы
1. Павловская Т.А. C#. Программирование на языке высокого
уровня: учебник для вузов. - СПб.: Питер, 2010. - 432 с.
2. Шилдт Г. C# 2.0. Серия «Полное руководство». Пер. с англ. - М.: ЭКОМ
Паблишерз, 2012. - 976 с.
3. Фаронов В.В. Создание приложений с
помощью C#. Руководство программиста. - М.:
Эксмо, 2008. - 576 с.
4. Малыхина М.П. Программирование на
языке высокого уровня: учеб. пособие. - СПб.: БХВ-Петербург, 2007.
5. Малыхина М.П., Частикова В.А.,
Миклашевская Л.Н. Программирование на языке высокого уровня. Методические
указания к курсовой работе по дисциплине «Программирование на языке высокого
уровня» для студентов всех форм обучения специальности 220400. -Краснодар: Изд.
КубГТУ, 2004.