Переменные и функции программы

Пояснительная записка

 

курсовой работы

 

на тему «Разработка программы обработки структурированного набора данных»     

Вариант __

 

09.03.02 Информационные системы и технологии

 

По дисциплине «Основы программирования и алгоритмизации»

 

Студент группы _ ИС2-191-ОБ ___                                              (номер группы) Руководитель, _ к.т.н. ___________                               (ученая степень, ученое звание)     ___________ (подпись) __________ (подпись) И.И. Иванов (инициалы и фамилия) _ О.В. Оксюта __ (инициалы и фамилия)  

 

 

Воронеж 2020


Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего образования

 «Воронежский государственный лесотехнический университет

имени Г.Ф. Морозова»

 

Кафедра вычислительной техники и информационных систем

 

 


ЗАДАНИЕ

для курсовой работы

 

Студенту      Иванову Ивану Ивановичу                группы  ИС2-191-ОБ

                          (фамилия и полные инициалы)

 

Воронежского государственного лесотехнического университета

имени Г.Ф. Морозова

 

Направление 09.03.02 Информационные системы и технологии

Срок представления работы к защите «___» ___________ 2020 г.

 

Исходные данные для проектирования: ________________________

____________________________________________________________________________________________________________________________________________________________________________________

 

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

 

 

Руководитель, к.т.н                               _____________    О.В. Оксюта

  (ученая степень, ученое звание)                       (подпись)                   (инициалы и фамилия)

Задание принял студент ____________ ______________     И.И. Иванов

                                                               (подпись)         (число, месяц, год)        (инициалы и фамилия)


ОГЛАВЛЕНИЕ

 

ВВЕДЕНИЕ. 4

Теоретическая часть. 5

1. Объявление массива. 5

2. Инициализация массивов. 6

3. Работа с массивами. 7

3.1. Доступ к элементу массива. 7

3.2. Обработка массивов. 8

Описание данных. 9

Входные данные: 9

Переменные и функции программы. 10

Алгоритм решения задачи. 12

ЗАКЛЮЧЕНИЕ. 15

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ.. 16

ПРИЛОЖЕНИЕ. Листинг программы.. 17


ВВЕДЕНИЕ

С++ является расширением языка С. С представляет собой гибкий и мощный язык программирования, использовавшийся для разработки наиболее важных программных продуктов в течение прошедших лет. Однако, как только проект превышает определенные размеры, возможности применения языка С достигают своих границ. В зависимости от проекта, программы размером от 25000 до 100000 строк оказываются трудными для разработки и управления потому, что их трудно охватить целиком. Работая в Bell Laboratories в Murray Hill, штат Нью-Джерси, Бьярн Страуструп (Bjarne Stroustrup) добавил к языку С несколько расширений с целью решить эту проблему. Первоначально язык назывался «С с классами». Это название было заменено на С++ в 1983 году.

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

Хотя первоначально С++ был нацелен на работу с очень большими программами, это не ограничивает его применение. Фактически объектно-ориентированные атрибуты языка С++ могут быть эффективно применены фактически к любой задаче программирования. Этот язык часто используется для таких проектов, как создание редакторов, баз данных, персональных систем работы с файлами и коммуникационных программ. Благодаря тому, что С++ унаследовал эффективность языка С, с его помощью разрабатывается высокопроизводительное программное обеспечение.


1 Работа с массивами в С++

 

Массив – это совокупность данных, которая обладает следующими свойствами:

1) все элементы массива имеют один и тот же тип;

2) массив имеет одно имя для всех элементов;

3) доступ к конкретному элементу массива осуществляется по индексу;

1. Объявление массива

Объявление массива имеет следующий синтаксис:

<спецификация типа> <имя> [<константное выражение>];

<спецификация типа> <имя> [ ];

Здесь квадратные скобки являются элементом синтаксиса, а не признаком необязательности конструкции.

Объявление массива может иметь одну из двух синтаксических форм, указанных выше. Квадратные скобки, следующие за именем, – признак того, что переменная является массивом. Константное выражение, заключенное в квадратные скобки определяет число элементов в массиве. Индексация элементов массива в языке C++ начинается с нуля. Таким образом, последний элемент массива имеет индекс на единицу меньше, чем число элементов массива.

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

<спецификация типа> <имя> [<константное выражение>]

Каждое константное выражение определяет количество элементов в данном измерении массива, поэтому объявление двумерного массива содержит два константных выражение, трехмерного – три и т.д.

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

Примеры объявлений массивов

int x[10]; Одномерный массив из 10 целых чисел. Индексы меняются от 0 до 9.

double y[2][10]; Двумерный массив вещественных чисел из 2 строк и 10 столбцов.

2. Инициализация массивов

Как и простые переменные, массивы могут быть инициализированы при объявлении. Инициализатор для объектов составных типов (каким является массив) состоит из списка инициализаторов, разделенных запятыми и заключенных в фигурные скобки. Каждый инициализатор в списке представляет собой либо константу соответствующего типа, либо, в свою очередь, список инициализаторов. Эта конструкция используется для инициализации многомерных массивов.

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

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

Примеры инициализации массивов

int a[3] = {0, 1, 2}; Число инициализаторов равно числу элементов

double b[5] = {0.1, 0.2, 0.3};    Число инициализаторов меньше числа элементов

int c[ ] = {1, 2, 4, 8, 16}; Число элементов массива определяется по числу инициализаторов

int d[2][3] = {{0, 1, 2}, {3, 4, 5}}; Инициализация двумерного массива. Массив состоит из двух строк, в каждой из которых по 3 элемента. Элементы первой строки получают значения 0, 1 и 2, а второй – значения 3, 4 и 5.

int e[3] = {0, 1, 2, 3}; Ошибка – число инициализаторов больше числа элементов

3. Работа с массивами

3.1. Доступ к элементу массива

Для доступа к конкретному элементу массива используются так называемые индексные выражения:

<имя массива>[<целочисленное выражение>]

Здесь квадратные скобки являются требованием синтаксисам языка, а не признаком необязательности конструкции.

Индекс массива может быть не только константой, но и выражением, которое имеет целочисленный тип, например, a[i + 1] (здесь a должно быть именем ранее объявленного массива, а i – переменной целого типа).

Объявление массива и индексное выражение, используемое для доступа к элементу массива, имеют схожий синтаксис. Различаются они по месту в программе. Это особенно важно, когда мы определяем индекс последнего элемента массива. Как было сказано ранее, индексы элементов массива в языке C начинаются с 0, и номер последнего элемента на 1 меньше количества элементов массива. Поэтому если Вы объявили массив x из 10 элементов, Вы не можете написать индексное выражение x[10], т.к. в этом случае Вы пытаетесь обратиться к элементу с индексом 10, которого нет в Вашем массиве. Компилятор не выдаст сообщения об ошибке, но результаты работы такой программы будут непредсказуемы.

Имя массива является адресом его начала! Оно имеет тип константный указатель на <тип элементов массива>. Конструкция a[i] эквивалентна *(a + i)

Для многомерного массива надо указать соответствующее количество индексов в квадратных скобках.

3.2. Обработка массивов

Для обработки элементов массива обычно используется оператор пошагового цикла for.

Для обработки многомерного массива используется соответствующее количество циклов.

Массивы не самодостаточны в том смысле, что не гарантируется хранение информации о количестве элементов вместе с самим массивом. В большинстве реализаций С++ отсутствует проверка диапазона индексов для массивов. Таков традиционный низкоуровневый подход к массивам. Более совершенное понятие массива можно реализовать при помощи классов.

В С++ массивы тесно связаны с указателями. Имя массива можно использовать в качестве указателя на его первый элемент. Гарантируется осмысленность значения указателя на элемент, следующий за последним элементом массива. Это важно для многих алгоритмов. Но ввиду того, что такой указатель на самом деле не указывает ни на какой элемент массива, его нельзя использовать ни для чтения, ни для записи. Результат получения адреса элемента массива, предшествующего первому, не определён, и такой операции следует избегать.

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

 


2 Анализ задачи и описание структур данных

 

Для решения данной задачи необходимо подключить библиотеки: iostream, iomanip, stdlib.h, fstream, ctime, algorithm, math.h.

Согласно условию, нужно создать динамический массив, т.к. изначально неизвестно число строк и столбцов(N):

 int **mas;

После чего создаем список переменных:

int i,j,k=0,z=0,n; - Эти переменные используем в качестве счетчиков, поэтому присваиваем целочисленные значения.

float min=0,max=0,sum=0,mid=0; - А в эти будем записывать среднестатистические и уникальные числа, а также сумму и средне –арифметическое значения, т.к. это числа с точкой, используем тип float.

Для чтения данных из файла подключим библиотеку <fstream>, и используем функцию ifstream, программа ищет в корневой папке файл Array.txt, после чего записывает из него ‘N’ (число строк и столбцов) и сам массив. Если программе не удаётся найти данный файл, то массив создаётся автоматически, после ввода ‘N’ с клавиатуры, а сами элементы заполняются случайными положительными и отрицательными числами.

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





Описание данных.

Входные данные:

1) число участников турнира – размерность матрицы;

2) результаты игр – число забитых / пропущенных голов, представлены в виде двумерного массива.

Выходные данные: результативность для каждого участника турнира – разность между забитыми и пропущенными голами.

Переменные и функции программы.

В программе определён двумерный целочисленный массив размерностью 100´100 элементов TMatrix.

Функция ExitMatrix - завершение программы.

Функция TurnirResult - расчет разности забитых и пропущенных голов.

Локальные переменные.

n – число участников турнира;

i, j – счетчики циклов;

K – матрица результатов турнира.

Функция SumCol(A, n, j) – расчёт суммы элементов столбца матрицы.

Параметры:

A – матрица;

n – размерность матрицы;

j – номер столбца.

Локальные переменные:

i – счетчик цикла.

Функция SumRow(A, n, i) – расчёт суммы элементов строки матрицы.

Параметры:

A – матрица;

n – размерность матрицы;

j – номер строки.

Локальные переменные:

i – счетчик цикла.

Функция LoadMatrix – чтение матрицы из файла.

Локальные переменные.

n – число участников турнира;

i, j – счетчики циклов;

а – матрица результатов турнира;

f – файловая переменная.

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

…………….. и т.д.

 




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: