Файл: камчатский государственный технический университет.docx
Добавлен: 28.03.2024
Просмотров: 43
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Рис 1. – изображение массива размера 6.
5.2 Стек
Стек характерен тем, что получить доступ к его элементом можно лишь с одного конца, называемого вершиной стека, иначе говоря: стек – структура данных, функционирующая по принципу LIFO (last in — first out, «последним пришёл — первым вышел»). Источник «www.intuit.ru»
Изобразить эту структуру данных лучше в виде вертикального списка, например, стопки каких-либо вещей, где чтобы воспользоваться одной из них нужно поднять все те вещи, что лежат выше нее, а положить предмет можно лишь на вверх стопки. Источник «https://yandex.ru/images/search?text=стек»
Рис 2. Пример работы структуры данных «Стек»
5.3 Очередь
Структура данных «Очередь» использует принцип организации FIFO (First In, First Out — «первым пришёл — первым вышел»). В некотором смысле такой метод более справедлив, чем тот, по которому функционирует стек, ведь простое правило, лежащее в основе привычных очередей в различные магазины, больницы считается вполне справедливым, а именно оно является базисом этой структуры.
Рис 3. Пример работы структуры данных «Очередь»
В данной курсовой работе используется структура данных двумерный массив. Двумерный массив – это одномерный массив, ячейка которого хранит одномерный массив. Так как эта позволяет хранить в себе поля значений, т.е. использование некого аналога объектов с требуемы полями. Данный тип структуры данных подходит для поставленной задачи.
6 Архитектура программы
После составления математической модели и выбор подходящей для задачи структуры данных, была проведена работа с построением архитектуры программы. Ниже предоставлена схема, разбитая на отдельные блоки, выполняющие определённо заданные функции.
Рис 4. Архитектура программы «Расчёта суммы кредита»
-
Функция (Sort) – сортировка кредитов (полей матрицы) по заданному столбцу.
1.1) Функция (BubbleSort) – реализация базовой сортировки массива.
-
Функция (countCredit) – подсчёт и вывод на консоль ежемесячного платежа и суммы кредита.
2.1) Функция (calculate) – реализует подсчёт кредитной ставки.
-
Функция (Init) – заполнение двумерного массива специализированными данными. -
Функция (countAveragePrice) – подсчёт средней стоимости кредитного товара. -
Функция (countProductsQuantity) – подсчёт количества товара, стоимость которого выше 20 000 рублей. -
Функция (countTotalCreditPrice) – общая сумма товаров, взятых в кредит. -
Функция (printCredit) – вывод на консоль информацию о кредите. -
Функция (totalInitialFee) – сумма первоначального взноса всех кредитов.
Все блок-схемы подпрограмм можно найти в приложении.
7 Алгоритм решения задачи
Опираясь на математическую модель и архитектуру, предполагается написание программного обеспечения в которой: при запуске по происходит инициализация структуры данных, заполнение констант, обозначающих маркер столбца матрицы. После этого программа запускает все подпрограммы, вызванные в главном методе. Основными подпрограммами ПО являются:
-
Заполнение матрицы специализированными в определенном диапазоне данными. -
Расчёт суммы кредита и ежемесячного платежа. -
Средняя стоимость товаров, проданных в кредит. -
Количество товаров, стоимость которых превышает 20 000 рублей. -
Сумму первоначальных взносов по всем кредитам. -
Сортировка кредитов по заданному значению.
8 Заключение
В ходе выполнения курсовой работы были выполнены следующие задачи:
-
Был проведён анализ и выбор языка программирования для реализации поставленной задачи. -
Была составлена математическая модель для реализации поставленной задачи. -
Был проведен анализ базовых структур данных с учётом языка программирования и поставленной задачи и выбран наиболее подходящий вариант структуры данных. -
Была разработана архитектура программного обеспечения. -
Был разработан алгоритм и его реализация на выбранном языке для реализации поставленной задачи. -
Был разработан код программного обеспечения, который оптимизирован для решения поставленной задачи. Проведено тестирование на случайных данных. -
В ходе тестирования были выявлены незначительные отклонения, исправленные успешно.
В итоге была написана программа полностью соответствующая поставленной задаче. В дальнейшей разработке программа легко подвластная масштабированию и пере использованию реализованных подпрограмм в будущем функционале или в иных проектах.
Анализ и реализация данной задачи выполнена.
9 Список использованных источников
-
Информатика и программирование : учебное пособие / И. А. Рычка. – Петропавловск-Камчатский : КамчатГТУ, 2014. – 230 с. Учебное пособие Информатика и программирование -
Основные структуры данных. [Электронный ресурс]. – 2018. – Режим доступа к ресурсу: https://kvodo.ru/data-structures-introduction.html. -
Популярные языки программирования [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/. -
Основные структуры данных. Матчасть. Азы [Электронный ресурс]. – 2017. – Режим доступа к ресурсу: https://habr.com/ru/post/422259/. -
Блок-схема [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0. -
Кредит. Основы [Электронный ресурс] – Режим доступа к ресурсу: https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B5%D0%B4%D0%B8%D1%82. -
Роберт С. Алгоритмы на Java / Седжвик Роберт. – Москва, издательство « Диасофт», 2013.- 688 с.
9 Приложения
Рис 5. Блок-схема функции countCredit.
Рис 6. Блок-схема функции calculate.
Рис 7. Блок-схема функции countTotalCreditPrice.
Рис 8. Блок-схема функции countproductsQuantity.
Рис 9. Блок-схема функции countAveragePrice.
Рис 10. Блок-схема метода bubbleSort
Рис 11. Блок-схема main.
12. Блок-схема функции sort.
Рис 13. Блок-схема функции init.
Рис 5. Блок-схема функции init
Рис 6. Блок-схема функции countAveragePrice
Рис 7. Блок-схема countCredit
Рис 8. Блок-схема функции sort
Код программы «Расчет суммы кредита»
package study;
import java.util.Random;
public class Main {
/**
* Предусмотреть заполнение входных данных датчиком случайных чисел,
* вывод исходной информации на экран, наглядный вид результатов. Для
* каждой задачи выполнить сортировку любого столбца матрицы, нахождения
* максимального и минимального значения в ней.
*
* 1. Создать программу для расчета суммы кредита и ежемесячных платежей 20
* клиентов, если известна стоимость товара, годовая процентная ставка,
* первоначальный взнос и срок кредита. Рассчитать среднюю стоимость товаров,
* проданных в кредит, количество товаров, стоимость которых превышает 20000
* рублей, сумму первоначального взноса всех клиентов.
*
* @param args
*/
private static final int[][] clientCredits = new int[20][5];
private static final int price = 0;
private static final int annualInterestRate = 1;
private static final int anInitialFee = 2;
private static final int creditTerm = 3;
private static final int productsQuantity = 4;
public static void main(String[] args) {
init();
countCredit();
countProductsQuantity();
countTotalCreditPrice();
// price or annualInterestRate or anInitialFee or creditTerm or productsQuantity
sort("price");
totalInitialFee();
countAveragePrice();
}
private static void printMatrix() {
for (int i = 0; i < clientCredits.length; i++) {
printCredit(clientCredits[i]);
}
}
private static void totalInitialFee() {
int res = 0;
for (int i = 0; i < clientCredits.length; i++) {
res += clientCredits[i][anInitialFee];
}
System.out.println("Total iinitial fee: " + res);
}
private static void sort(String column) {
switch (column) {
case "price":
bubbleSort(price);
break;
case "annualInterestRate":
bubbleSort(annualInterestRate);
break;
case "anInitialFee":
bubbleSort(anInitialFee);
break;
case "creditTerm":
bubbleSort(creditTerm);
break;
case "productsQuantity":
bubbleSort(productsQuantity);
break;
}
}
private static void bubbleSort(int column) {
int n = clientCredits.length;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
if (clientCredits[j][column] > clientCredits[j + 1][column]) {
int[] temp = clientCredits[j];
clientCredits[j] = clientCredits[j + 1];
clientCredits[j + 1] = temp;
}
}
private static void countAveragePrice() {
int sumProductPrice = 0;
int sumProductQuantity = 0;
for (int i = 0; i < clientCredits.length; i++) {
sumProductPrice += clientCredits[i][productsQuantity] * clientCredits[i][price];
sumProductQuantity += clientCredits[i][productsQuantity];
}
System.out.println("Average price: " + sumProductPrice / sumProductQuantity);
}
private static void countProductsQuantity() {
int res = 0;
for (int i = 0; i < clientCredits.length; i++) {
if (clientCredits[i][price] >= 20000)
res += clientCredits[i][productsQuantity];
}
System.out.println("Total products quantity where price >=20 000: " + res);
}
private static void countTotalCreditPrice() {
int res = 0;
for (int i = 0; i < clientCredits.length; i++) {
res += clientCredits[i][price];
}
System.out.println("Total products price: " + res);
}
private static void countCredit() {
for (int clientNum = 0; clientNum < clientCredits.length; clientNum++) {
int calculate = calculate(clientCredits[clientNum][price] - clientCredits[clientNum][anInitialFee],
clientCredits[clientNum][creditTerm], clientCredits[clientNum][annualInterestRate]);
System.out.println("+============CLIENT " + clientNum + "==============+");
printCredit(clientCredits[clientNum]);
System.out.print("Month pay: " + calculate);
System.out.println("\tFull credit total: " + calculate * clientCredits[clientNum][creditTerm]);
}
}
public static int calculate(int loan, double month, double interestRate) {
double pow = Math.pow((1 + interestRate / 100 / 12), (month));
return (int) (loan * ((interestRate / 100 / 12) * pow) / (pow - 1));
}
private static void init() {
Random random = new Random();
for (int i = 0; i < clientCredits.length; i++) {
for (int i1 = 0; i1 < clientCredits[i].length; i1++) {
if (i1 == price) {
clientCredits[i][i1] = random.nextInt(100000) + 1000;
} else if (i1 == annualInterestRate) {
clientCredits[i][i1] = random.nextInt(50) + 1;
} else if (i1 == anInitialFee) {
clientCredits[i][i1] = random.nextInt(clientCredits[i][price] - clientCredits[i][price] / 2);
} else if (i1 == creditTerm) {
clientCredits[i][i1] = random.nextInt(24) + 2;
} else if (i1 == productsQuantity) {
clientCredits[i][i1] = random.nextInt(6) + 1;
}
System.out.print(clientCredits[i][i1] + " ");
}
System.out.println();
}
}
private static void printCredit(int[] arr) {
System.out.println("price : " + arr[price] + ", annualInterestRate: " + arr[annualInterestRate]
+ ", anInitialFee: " + arr[anInitialFee] + ", creditTerm: " + arr[creditTerm]);
}
}