Разработка программы для анализа прямоугольной матрицы

Анализ технического задания. Разработка интерфейса программы и ее алгоритмов. Кодирование и тестирование разработанного программного обеспечения, оценка его практической эффективности и функциональности. Формирование, содержание руководства пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 31.07.2012
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

Изыскание средств и методов механизации и автоматизации работ - одна из основных задач технических дисциплин. Автоматизация работ с данными имеет свои особенности и отличия от автоматизации других типов работ. Для этого класса задач используют особые виды устройств, большинство из которых являются электронными приборами Совокупность устройств, предназначенных для автоматической, или автоматизированной обработки данных, называют вычислительной машиной. Конкретный набор взаимодействующих между собой устройств и программ, предназначенный для обслуживания одного рабочего участка, называют вычислительной системой. Центральным устройством большинства вычислительных систем является компьютер.

Компьютер - это электронный прибор, предназначенный для автоматизации создания, хранения, обработки и транспортировки данных [6].

В настоящее время, различные процессы хранения и обработки данных уже немыслим без использования персонального компьютера. Применение этого средства позволяет ускорить данные процессы значительно. Одним из примеров использования персонального компьютера при решении математических задач является материал настоящей курсовой работы.

Целью настоящей курсовой работы является разработка программы для анализа прямоугольной матрицы и поиска в ней всех подматриц, у которых общая сумма элементов главной и побочной диагонали равна нулю.

1. Анализ технического задания

Согласно техническому заданию необходимо разработать программу для поиска в прямоугольной матрице всех квадратных подматриц, у которых общая сумма элементов главной и побочной диагонали равна нулю. Для достижения данной цели программа должна отвечать следующим требованиям:

- язык:

a) использование языка C\C++;

b) использование динамических структур;

- организация меню с расширенными функциями:

a) возможность загружать данные одним из тремя способов (случайныйввод, в ручную или ввод из текстового файла);

b) возможность вывода результата в текстовый файл или на дисплей;

c) обработка исключающих ситуаций (ошибка при чтении файла, ошибка при выделении динамической памяти под матрицу);

d) визуализация процесса;

- параметры ввода:

a) матрица должна быть прямоугольной.

программа тестирование кодирование алгоритм

2. Обоснование и проектирование структур данных

Для операции с прямоугольной матрицей используют динамический двумерный массив. При создании динамического двумерного массива в операции newуказывается его размерность. Следует отметить тот факт, что размерность матрицы вводится с клавиатуры. Организация матрицы представлена на рисунке 2.1.

Рисунок 2.1 - Структура матрицы

В операторе 1 объявляется переменная типа «указатель на указатель на int» и выделяется память под массив указателей на строки массива. В операторе 2 организуется цикл выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка память, выделенную под строку двумерного массива [3, c. 62].

Для работы с файлами использовались два класса:

a) ifstream - класс входных файловых потоков;

b) ofstream - класс выходных файловых потоков.

Для организации циклов, некоторых подсчетов и констант используются переменные типа int. Int - целый тип, размер которого не определяется стандартом, а зависит от компьютера и компилятора.

3. Разработка алгоритма

Алгоритм - это точное предписание, определяющее вычислительный процесс, ведущий от исходных данных к искомому испытанию. Из определения следует, что каждый разработанный алгоритм должен обладать следующими свойствами:

a) Детерминированность - каждая команда понятна исполнителю (в данном случае компьютеру) и исключает неоднозначность исполнения;

b) результативность - реализация вычислительного процесса, предусмотренного алгоритмом, должна через определенное число шагов привести к результату или сообщению о невозможности его получения;

c) массовость - если алгоритм разработан для решения определенной задачи, он должен быть применим для решения задач этого типа при всех допустимых значениях исходных данных;

d) дискретность - пошаговый характер процесса получения результата, состоящий в последовательном выполнении конечного числа заданных алгоритмом действий.

Способы описания алгоритма: словесный, структурно-стилизованный, язык графических символов, операторный язык. В настоящей работе мы представим алгоритмы с помощью языка графических символов.

Алгоритм функции «random» представлен на рисунке 3.1.

Рисунок 3.1 - Блок-схема функции «random»

Алгоритм функции «vvod1» представлен на рисунке 3.2.

Рисунок 3.2 - блок-схема функции «vvod1»

Алгоритм функции «vvod2» представлен на рисунке 3.3.

Рисунок 3.3 - блок-схема функции «vvod2»

Алгоритм функции «main» представлен на рисунке 3.4.

Рисунок 3.4 - Блок-схема функции «main»

4. Кодирование программы

Кодирование - это процесс написания программного кода, с целью реализации алгоритма на языке С/С++.

В настоящей курсовой работе для упрощения структуры программы использовались функции, которые позволили избежать избыточности кода.

Рассмотрим следующие функции:

- int random (int N) - функция, которая выдает случайные числа с равномерным распределением в интервале [0, N-1]. Переменная N является целой константой;

- voidvvod1 (int **a, constintnstr, constintnstb) - функция, котораяпозволяет заполнить массив с клавиатуры. Константы nstrиnstb - размеры матрицы, которые вводятся с клавиатуры; int **a - указатель на указатель на int;

- voidvvod2 (int **a, constintnstr, constintnstb) - функция, котораяпозволяет заполнить массив случайными числами. Константы nstrиnstb - размеры матрицы, которые вводятся с клавиатуры; int **a - указатель на указатель на int;

- voidvvod3 (int **a, constintnstr, constintnstb) - функция, котораяпозволяет заполнить массив из файла. Константы nstrиnstb - размеры матрицы, которые вводятся с клавиатуры; int **a - указатель на указатель на int;

- int main() - обязательная функция, которая обеспечивает создание точки входа в откомпилированную программу.

5. Контрольный пример

При написании программы важную роль отводится её тестированию. Целью тестирования является определение работоспособности программы на всем требуемом диапазоне исходных данных.

Рассмотрим работоспособность программы при разных вариантах ввода и вывода.

1) Ввод с клавиатуры:

На рисунке 5.1 представлен ввод матрицы с клавиатуры.

Рисунок 5.1 - Ввод с клавиатуры

На рисунке 5.2.1 представлен вывод результата на дисплей.

Рисунок 5.2.1 - Вывод на дисплей

На рисунке 5.2.2 представлен вывод результата на дисплей.

Рисунок 5.2.2 - Вывод на дисплей

На рисунке 5.3 представлен ввод матрицы с клавиатуры.

Рисунок 5.3 - Ввод с клавиатуры

На рисунке 5.4 представлен вывод результата в файл.

Рисунок 5.4 - Вывод в файл

2) Ввод случайными числами:

На рисунке 5.5 представлен ввод матрицы случайными числами

Рисунок 5.5 - Ввод случайными числами

На рисунке 5.6 представлен вывод результата на дисплей.

Рисунок 5.6 - Вывод на дисплей

На рисунке 5.7 представлен ввод случайными числами.

Рисунок 5.7 - Ввод случайными числами

На рисунке 5.8 представлен ввод матрицы случайными числами.

Рисунок 5.8 - Вывод в файл

3) Ввод из файла:

На рисунке 5.9 представлен ввод матрицы из файла.

Рисунок 5.9 - Ввод из файла

На рисунке 5.10.1 представлен вывод результата на дисплей

Рисунок 5.10.1 - Вывод результата на дисплей

На рисунке 5.10.2 представлен вывод результата на дисплей.

Рисунок 5.10.2 - Вывод результата на дисплей

На рисунке 5.11 представлен вывод результата в файл.

Рисунок 5.11 - Вывод в файл

При неправильном выборе варианта ввода или вывода, а также при отсутствии файлов, прилагавшихся к программе, программа автоматически завершит свою работу.

6. Руководство пользователя

Данная программа была разработана в среде Dev-C++ 4.9.9.2. Для запуска Dev-C++ необходимо запустить проргамный файл devcpp.exe в папке с программой (папка была выбрана пользователем в процессе установки).

Также Dev-C++ можно запустить через ярлык на «Рабочем столе» компьютера, запуск программы осуществляется с помощью двойного щелчка на ярлык. После этого откроется окно программы. На рисунке 6.1 представлена среда Dev-C++.

Рисунок 6.1 - Среда Dev-C++

Для открытия файла с курсовым проектом необходимо перейти в меню «Файл» и выбрать «Открыть проект или файл», в появившемся диалоговом окне на диске «Курсовой проект» открыть папку «Курсовой проект» и выбрать файл «Myunit.cpp».На рисунке 6.2 представлено диалоговое окно с открытием файла.

Рисунок 6.2 - Диалоговое окно

Для того, чтобы скомпилировать программу нажмите Ctrl+F9. После того как проект успешно скомпилирован, диалоговое окно будет иметь статус «Done». Это значит, что программа готова к работе. На рисунке 6.3 представлен процесс компиляции.

Рисунок 6.3 - Процесс компиляции

При нажатии клавиши F9 программа запустится. В появившемся окне пользователю необходимо ввести количество строк и столбцов в матрице, следует отметить тот факт, что количество строк и столбцов не должносовпадать, и выбрать вариант ввода с помощью трех клавиш: 1 - ввод с клавиатуры, 2 - ввод случайными числами, 3 - ввод из файла. На рисунке 6.4 представлен процесс ввода.

Рисунок 6.4 - Процесс ввода

После ввода матрицы программа начнет поиск подматриц, которые удовлетворяют условию задачи. При нахождении подматриц в диалоговом окне появится вырианты вывода результат: 1 - вывод на дисплей, 2 - вывод в файл. В зависимости от выбора пользователь увидит результат работы программы либо на дисплее, либо при открытии файла «output.txt» в папке «Курсовой проект».

При неправильном вводе информации программа автоматически завершает свою работу.

Заключение

В курсовой работе была разработана программа для анализа прямоугольной матрицы и поиска в ней подматриц, у которых общая сумма элементов главной и побочной диагонали равна нулю.

Разработанная программа удовлетворяет следующим требованиям:

a) использование языке C/C++;

b) использование динамических структур;

c) Возможность ввода и вывода матрицы различными способами;

d) Обработка исключающих ситуаций.

Результаты, полученные в ходе тестирования, совпадают с ожидаемыми результатами.

Список используемых источников

1. Шилдт Г. С++ / Г. Шилдт.: Пер. с англ. - M.: Издательский дом «Вильямс», 2008. - 624 с.

2. Лафоре Р. Объектно-ориентированное программирование в С++ / Р. Лафоре. - СПб.: Питер, 2007.-928 с.

3. Павловская Т.А. С/С++. Программирование на языке высокого уровня / Т.А. Павловская. - СПб.: Питер, 2005. - 464 с.

4. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум / Т.А. Павловская, Ю.А. Щупак. - СПб.: Питер, 2005. - 240 с.: ил.

5. Шаров В.Г. Введение в программирование. Учебное пособие / В.Г. Шаров. - Рыбинск: РГАТА, 2004. - 64 с.

6. История развития средств вычислительной техники [Электронный ресурс]: URL: http://orags.narod.ru/manuals/inf_zo/texts/s_2.htm (дата обращения: 01.06.2012).

7. Информатика: Разработка алгоритма [Электронный ресурс]: URL: http://www.klgtu.ru/students/literature/inf_asu/650.html (дата обращения: 02.06.2012).

Приложение

Листинг программы

#include<iostream>

#include<malloc.h>

#include<stdlib.h>

#include <fstream>

using namespace std;

const int N=20;

const int b=10;

const int c=-5;

intrandom(intN) {returnrand()% N;} // функциявводаслучайнымичислами

void vvod1 (int **a, const int nstr, const int nstb) { // вводсклавиатуры

int i, j;

cout << «Matriza A («<< nstr << «*» << nstb <<»):» << endl;

for (i = 0; i < nstr; i++)

for (j = 0; j < nstb; j++)

cin>>a[i] [j];

}

void vvod2 (int **a, const int nstr, const int nstb) { // вводслучайнымичислами

int i, j;

cout << «Matriza A («<< nstr << «*» << nstb <<»):» << endl;

for (i = 0; i < nstr; i++)

for (j = 0; j < nstb; j++)

a[i] [j] = random (b-c+1) + c;

}

void vvod3 (int **a, const int nstr, const int nstb) { // вводизфайла

ifstream input;

input.open («input.txt»);

int i=0, j=0;

if (! input) {

cout<<»\n Nevozmozhno otkrit file»;

exit (1);

}

for (i=0; i<nstr; i++) // чтениеизфайла

for (j=0; j<nstb; j++)

input>>a[i] [j]; {

input.close();

}

}

int main() {

int nstr, nstb, y, mini, s2, l, t, p;

int st, str;

int **a; int i, j;

ofstream output;

output.open («output.txt»); // открытиефайладлязаписи

if (! output) {

cout<<»\n Nevozmozhno otkrit file»;

exit (1);

}

cout<<»\n Vvedite kolichestvo strok v matrize А:»;

cin>>nstr;

cout<<»\n Vvedite kolichestvo stolbzov v matrize А:»;

cin>>nstb;

a = new int* [nstr];

if (! a) {

cout<< «Nedostatochno pamati pod massiv ykazatelei\n»;

exit (1);}

for (i = 0; i < nstr; i++)

a[i] = new int[nstb];

if (! a[i]) {

cout<< «Nedostatochno pamati\n»;

exit (1);

}

cout<< «vvedite chislo 1-vvod c klaviaturi, 2-vvod slychainimi chislami, 3-vvod iz faila»;

cin>>y;

switch(y) { // выборввода

case 1: vvod1 (a, nstr, nstb); break; // вводсклавиатуры

case 2: vvod2 (a, nstr, nstb); break; // вводслучайнымичислами

case 3: vvod3 (a, nstr, nstb); break; // вводизфайла

default: {cout<< «Oshibka»;

exit (1);

}

}

for (i = 0; i<nstr; i++) { // прямоугольнаяматрицавнормальномвиде

cout<<»\n»<<»»;

for (j = 0; j < nstb; j++) {

cout.width(6);

cout.precision(1);

cout<<a[i] [j];

}

}

программа тестирование кодирование алгоритм

mini=nstr;

if (mini>nstb) mini=nstb; // поискподматрицвматрице

for (l=1; l<mini; l++)

for (i=0; i<nstr-l; i++)

for (j=0; j<nstb-l; j++) {

for (t=i; t<=i+l; t++) {

for (p=j; p<=j+l; p++);

}

cout<<»\n»;

int sum2=0, sum1=0;

st=j+l;

str=j;

for (t=i; t<=i+l; t++) {

sum1+=a[t] [str++]; // суммы главных и побочных диагоналей

sum2+=a[t] [st-];

s2=sum2+sum1;

}

if (s2==0) {

cout<< «vvedite chislo 1-vivod na display, 2-vivod v file»;

cin>>y;

switch(y) { // выбор вывода

case 1: {

for (t=i; t<=i+l; t++) {cout<<»\n»;

for (p=j; p<=j+l; p++) {

cout.width(6);

cout.precision(1);

cout<<a[t] [p];}} break;

case 2: {

for (t=i; t<=i+l; t++) {output<<»\n»;

for (p=j; p<=j+l; p++) {

output.width(6);

output.precision(1);

output<<a[t] [p];}

output<<»\n»;}

output<<»\n»;} break;

default: {cout<< «Oshibka»;

exit (1);

}

}

}

}

}

output.close(); // закрытиефайла

system («PAUSE»);

return EXIT_SUCCESS;

for (i = 0; i < nstr; i++) // Освобождениепамяти

delete [] a[i];

delete [] a;

return 0;

}

Размещено на Allbest.ru


Подобные документы

  • Разработка структурной диаграммы программного модуля. Представление схемы для основных расчетов выбранного приложения для создания прямоугольной матрицы. Особенности создания пользовательского интерфейса. Тестирование и отладка спроектированного модуля.

    курсовая работа [648,4 K], добавлен 27.05.2015

  • Подбор игрового движка и описание его основных характеристик. Разработка структуры, алгоритма и интерфейса программы. Проектирование иерархии классов. Выделение типового приема визуализации. Тестирование правильности работы программного обеспечения.

    курсовая работа [3,1 M], добавлен 19.01.2017

  • Разработка программного обеспечения заданной информационной системы. Описание алгоритма и математического метода решения задачи. Этапы формирования и реализации программы, ее листинг и оценка функциональности. Разработка инструкции пользователя.

    курсовая работа [223,9 K], добавлен 23.06.2015

  • Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.

    курсовая работа [2,7 M], добавлен 21.02.2011

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Разработка алгоритма и программы "Расчет стыкового паяного соединения" в среде Microsoft Visual Studio для облегчения расчётов сварных швов. Создание главной формы приложения и его кодирование для расчёта углового шва. Тестирование программы на ошибки.

    курсовая работа [1,5 M], добавлен 06.02.2013

  • Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.

    лабораторная работа [43,1 K], добавлен 21.07.2012

  • Общие сведения об исследуемой организации, направления ее хозяйственной деятельности, характеристика используемой вычислительной техники и программного обеспечения. Разработка пользовательского интерфейса, шаблонов, отладка и тестирование программы.

    отчет по практике [159,3 K], добавлен 11.04.2016

  • Разработка программы для выполнения арифметических операций с комплексными числами. Разработка эскизного проекта. Диаграмма последовательностей и классов. Разработка и описание программы. Разработка программного кода и руководства пользователя.

    курсовая работа [1,2 M], добавлен 25.11.2011

  • Стадии разработки программного продукта "BaseSurvey ECC" с помощью Delphi 2010 и SQLite. Проектирование интерфейса пользователя и разработка алгоритмов работы электронного журнала учёта осмотра мест происшествий. Разработка руководства пользователя.

    курсовая работа [1,9 M], добавлен 12.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.