Лабораторная работа

Make-файлы. Найти строку заданной матрицы, в которой длина максимальной серии минимальна. Найти максимальное из чисел, встречающихся в заданной матрице более одного раза. Найти минимальное из чисел, встречающихся в заданной матрице ровно один раз. Найти максимальное из чисел, встречающихся в заданной матрице ровно два раза. C и C++

Категория:

Лабораторная работа

Дисциплина:

Системное программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Тег:

#ОперационныеCистемы

Стоимость работы:

6 руб.

Оценка: 10
Объем страниц: 17
Год сдачи: 2020
Дата публикации: 21.10.2020

* Кроме файла с работой, также есть архив с дополнительными файлами.

Описание дополнительных файлов:

Архив состоит из следующих файлов:
• main.cc – файл, в котором описана главная функция main и происходит выделение блока памяти, и после выполнения ряда действий освобождение места в памя-ти;
• menu.h – файл заголовка, в котором описан прототип функции, которая предла-гает пользователю выбрать способ инициализации матрицы, также вывести массива на экран или перейти к выполнению поставленным задачам;
• menu.cc – файл реализации функции, оторая предлагает пользователю выбрать способ инициализации матрицы, также вывести массива на экран или перейти к выполнению поставленным задачам;
• DisplArray.h – файл заголовка, в котором описан прототип функции, которая вы-водит на экран содержимое матрицы;
• DisplArray.cc – файл реализации функции, которая выводит на экран содержимое матрицы;
• InitUserArray.h – файл заголовка, в котором описан прототип функции, которая инициализирует матрицу с помощью пользовательского ввода;
• InitUserArray.cc – файл реализации функции, которая инициализирует матрицу с помощью пользовательского ввода;
• InitRandArray.h – файл заголовка, в котором описан прототип функции, которая инициализирует матрицу с помощью генератора случайных чисел;
• InitRandArray.cc – файл реализации функции, которая инициализирует матрицу с помощью генератора случайных чисел;
• Funct_selection_menu.h – файл заголовка, в котором описан прототип функции, которая выводит меню, чтобы пользователь выбрал какую функцию будет ис-пользовать в заданной матрице;
• Funct_selection_menu.cc – файл реализации функции, которая выводит меню, чтобы пользователь выбрал какую функцию будет использовать в заданной матрице. Функции вызываемые в меню: Series_minimal, MaximumNumber, Mini-mumNumber, Maximum_number_two;
• Series_minimal.h – файл заголовка, в котором описан прототип функции по нахождению строки заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна;
• Series_minimal.cc – файл реализации функции по нахождению строки заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна;
• MaximumNumber.h – файл заголовка, в котором описан прототип функции по нахождению максимального из чисел, встречающихся в заданной матрице более одного раза;
• MaximumNumber.cc – файл реализации функции по нахождению максимального из чисел, встречающихся в заданной матрице более одного раза;
• MinimumNumber.h – файл заголовка, в котором описан прототип функции функ-ции по нахождению минимального из чисел, встречающихся в заданной матрице ровно один раз;
• MinimumNumber.cc – файл реализации функции по нахождению минимального из чисел, встречающихся в заданной матрице ровно один раз;
• Maximum_number_two.h – файл заголовка, в котором описан прототип функции по нахождению максимального из чисел, встречающихся в заданной матрице ровно два раза;
• Maximum_number_two.cc – файл реализации функции по нахождению макси-мального из чисел, встречающихся в заданной матрице ровно два раза;

Фрагменты для ознакомления

ЛАБОРАТОРНАЯ РАБОТА № 3

Make-файлы

Цель работы:

Научиться компилировать модульные программы с помощью make-файлов.

 

Требования:

1) Разработать модульное консольное приложение на С/С++ согласно варианту задания. Для компиляции, компоновки и выполнения программы использовать утилиту make, для чего необходимо дополнительно создать make-файл.

2) Размерность матрицы задаётся пользователем на стадии выполнения программы. Для повышения производительности программы использовать динамическое выделение памяти.

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

4) Для каждой бригады необходимо выполнить по два задания на человека (к примеру, если в бригаде 2 человека, то необходимо выполнить 4 задания, если в бригаде 3 человека – 6 заданий и т.д.). Каждое задание оформить в виде отдельной функции. Все бизнес-функции можно сгруппировать в одном файле или разнести по отдельным файлам.

 

Индивидуальное задание:

1) Найти строку заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна.

2) Найти максимальное из чисел, встречающихся в заданной матрице более одного раза.

3) Найти минимальное из чисел, встречающихся в заданной матрице ровно один раз.

4) Найти максимальное из чисел, встречающихся в заданной матрице ровно два раза.

 

Ход выполнения лабораторной работы:

1. Выбрал метод решения индивидуальных заданий и разработал алгоритм.

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

3. Для удобства навигации по файлам установил дополнительно свободный файловый менеджер GNOME Comander (gnome-commender).

4. Изучил теорию для инициализации  матрицы с помощью генератора случайных чисел.

5. Изучил функцию sleep, которая приостанавливает выполнение программы на время, задаваемое параметром time. Время задается в секундах.

6. В текстовом редакторе gedit набрал исходный код решения задания на языке программирования С++ и сохранил исходник с именем. Программа состоит из следующих файлов (см. рис. 1):

  • main.cc – файл, в котором описана главная функция main и происходит выделение блока памяти, и после  выполнения ряда действий  освобождение места в памяти;
  • menu.h  файл заголовка, в котором описан прототип функции, которая предлагает пользователю выбрать способ инициализации матрицы, также вывести массива на экран или перейти к выполнению поставленным задачам;
  • menu.cc – файл реализации функции, оторая предлагает пользователю выбрать способ инициализации матрицы, также вывести массива на экран или перейти к выполнению поставленным задачам;
  • DisplArray.h  файл заголовка, в котором описан прототип функции, которая выводит на экран содержимое матрицы;
  • DisplArray.cc – файл реализации функции, которая выводит на экран содержимое матрицы;
  • InitUserArray.h  файл заголовка, в котором описан прототип функции, которая инициализирует матрицу с помощью пользовательского ввода;
  • InitUserArray.cc – файл реализации функции, которая инициализирует матрицу с помощью пользовательского ввода;
  • InitRandArray.h  файл заголовка, в котором описан прототип функции, которая инициализирует матрицу с помощью генератора случайных чисел;
  • InitRandArray.cc – файл реализации функции, которая инициализирует матрицу с помощью генератора случайных чисел;
  • Funct_selection_menu.h  файл заголовка, в котором описан прототип функции, которая выводит меню, чтобы пользователь выбрал какую функцию будет использовать в заданной  матрице;
  • Funct_selection_menu.cc  файл реализации функции, которая выводит меню, чтобы пользователь выбрал какую функцию будет использовать в заданной  матрице. Функции вызываемые в меню: Series_minimal, MaximumNumber, MinimumNumber,  Maximum_number_two;
  • Series_minimal.h – файл заголовка, в котором описан прототип функции по нахождению строки заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна;
  • Series_minimal.cc –  файл реализации функции по нахождению  строки заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна;
  • MaximumNumber.h  файл заголовка, в котором описан прототип функции по нахождению максимального из чисел, встречающихся в заданной матрице более одного раза;
  • MaximumNumber.cc –  файл реализации функции по нахождению максимального из чисел, встречающихся в заданной матрице более одного раза;
  • MinimumNumber.h  файл заголовка, в котором описан прототип функции функции по нахождению минимального из чисел, встречающихся в заданной матрице ровно один раз;
  • MinimumNumber.cc –  файл реализации функции по нахождению минимального из чисел, встречающихся в заданной матрице ровно один раз;
  • Maximum_number_two.h  файл заголовка, в котором описан прототип функции по нахождению максимального из чисел, встречающихся в заданной матрице ровно два раза;
  • Maximum_number_two.cc –  файл реализации функции по нахождению максимального из чисел, встречающихся в заданной матрице ровно два раза;

7. Создал Makefile.

8. Запустил терминал Linux и с помощью команды cd перешёл в папку местонахождения Мейкфайла.

9. Для компиляции программы использовал автосборку проекта с помощью Makefile(см. рис. 2);

10. Для тестирования работоспособности запустил программу  и ввёл определённые данные (см. рис. 3).

 

Результаты выполнения лабораторной работы:

Рисунок 1 – Содержимое папки программы лабораторной работы № 3

 

Рисунок 2— Организация автосборки проекта с помощью Makefile
Рисунок 3.1— Тестирование программы. Ввод строк и столбцов

 

Рисунок 3.2— Инициализация матрицы с помощью пользовательского ввода

 

Рисунок 3.3 —Вывод матрицы на экран

 

Рисунок 3.4 — Поиски строки в заданной матрицы, в которой длина максимальной серии (последовательности одинаковых элементов) минимальна.

 

Рисунок 3.5 — Поиски максимального из чисел, встречающихся в заданной матрице более одного раза

 

Рисунок 3.6 — Поиск минимального из чисел, встречающихся в заданной матрице ровно один раз

 

Рисунок 3.7 — Поиск максимального из чисел, встречающихся в заданной матрице ровно два раза

 

Что я освоил в процессе выполнения лабораторной работы:

  1. Динамическое выделение памяти и её освобождение.
  2. Процесс создания исполняемой программы с использованием модульного принципа.
  3. Инициализации матрицы с помощью генератора случайных чисел.
  4. Работу с утилитой make, которая позволяет отслеживать изменения в исходном коде программы.
  5. Освоил процесс сборки в Linux(Makefile):  компилятор берёт файлы с исходным кодом, а получает из них объектный файл линковки, берёт объектный и получает исполняемый файл(СБОРКА=КОМПИЛЯЦИЯ+ЛИНКОВКА).
  6.  Команды ls, clear,  mv, cd, rm, cat для работы в Linux-терминале.
  7. Практические навыки по компиляции и запуску модульной C++ программы с использованием  g++ компилятора.
  8. Создание и редактирование Makefile.
  9. Макрос  используемые для возвращения ОС кода (библиотека cstdlib — с++):
  • Макрос EXIT_SUCCESS используется для возвращения ОС кода успешного завершения программы. Этот макрос заменяется на системно-зависимое выражение, которые используется в качестве аргумента для функции exit. Оно должно означать, что работа программы была завершена успешно. 
  • Макрос EXIT_FAILURE используется для возвращения ОС кода о неудачном завершении программы. Этот макрос заменяется на системно-зависимое выражение, которые используется в качестве аргумента для функции exit. Оно должно означать, что работа программы была прекращена преждевременно.

 

Выводы:

1. Функции из библиотеки cstdlib (с++), которые можно использовать для динамического выделения памяти(a и b – применил на практике):

  • calloc – функция выделяет блок памяти, размером num элементов, каждый из которых занимает size байт, и инициализурует все байты нулями.
  • malloc – функция выделяет блок памяти, размером sizemem байт, и возвращает указатель на начало блока. Содержание выделенного блока памяти не инициализируется, оно остается с неопределенными значениями.
  • realloc – функция изменяет размер блока памяти, на который ссылается параметр ptrmem  на size байтов. Блок памяти может уменьшаться или увеличиваться в размере.
  • free – функция освобождает место в памяти. Блок памяти, ранее выделенный с помощью вызова malloc, calloc или realloc освобождается.

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

  • rand – команда из библиотеки <cstdlib>для вызова случайно генерированных значений, после и указал диапазон случайных значений;
  • srand   выполняет инициализацию генератора случайных чисел;
  • time– возвращает текущее календарное время системы. Эту функцию будем использовать для того, чтобы srand инициализировать некоторыми различными значения. Которые будут изменяться каждую секунду,  что дает возможность получать  совершенно случайные последовательности чисел, при каждом новом вызове функции rand  (time  объявлена в заголовке <ctime>).

3. Для улучшения отображение матриц и действий над ними использовал  sleep  и system :

  • system – функция (библ. cstdlib) вызывает командный процессор для выполнения команд. После выполнения команды, командный процессор возвращает управление программе, возвращая целочисленное значение, интерпретация которого зависит от системы.
  • sleep – функция (библ. Unistd.h) приостанавливает выполнение программы на время, задаваемое параметром time. Время задается в секундах.

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

5.Использование (запуск) makefile:

  • make – программа попытается найти файл с именем Makefile в текущем каталоге и  выполнить команды из него;
  • make -f MyMakefile – если  несколько Makefile или имеет другое имя, то надо вызывать утилиту make с ключом -f;
  • ls Makefile- получение списка файлов.

6. Makefile состоит из набора правил. Они же состоят из трех частей:

  • Имя цели. Если целью является файл, то указывается его имя. После имени цели следует двоеточие.
  • Список зависимостей. Здесь просто перечисляются через пробел имена файлов или имена промежуточных целей. Если цель ни от чего не зависит, то этот список будет пустым.
  • Инструкции. Это команды, которые должны выполняться для достижения цели. Каждая инструкция пишется на новой строке и начинается с символа табуляции.

 Общий синтаксис правил таков:

Цель: зависимость_1 зависимость_2 зависимость_N

[tab]Команда_1

[tab]Команда_N     

174