Сидоров А.О / ос3
.docx
Министерство образования Республики Беларусь
Белорусский Национальный Технический Университет
Факультет информационных технологий и робототехники
Кафедра «Программное обеспечение вычислительной техники
и автоматизированных систем»
Отчёт
по лабораторной работе № 3
по дисциплине «Операционные системы»
тема: «Make-файлы»
Исполнитель: |
|
студент группы 10702112 Сидоров А.О. |
Преподаватель: |
|
Радкевич А.С. |
2013-2014 учебный год
ЛАБОРАТОРНАЯ РАБОТА № 3
Make-файлы
Цель работы
Научиться компилировать модульные программы с помощью make-файлов.
Требования
-
Разработать модульное консольное приложение на С/С++ согласно варианту
задания. Для компиляции, компоновки и выполнения программы использовать утилиту make, для чего необходимо дополнительно создать make-файл.
-
Размерность матрицы задаётся пользователем на стадии выполнения программы. Для повышения производительности программы использовать динамическое выделение памяти.
-
Предусмотреть два способа инициализации матрицы: с помощью генератора
случайных чисел и пользовательского ввода. Оформить способы инициализации матрицы в виде отдельных функций, которые на вход принимают матрицу для инициализации, и сгруппировать эти функции в отдельный файл от
основной функции программы.
-
Для каждой бригады необходимо выполнить по два задания на человека (к
примеру, если в бригаде 2 человека, то необходимо выполнить 4 задания,
если в бригаде 3 человека – 6 заданий и т.д.). Каждое задание оформить в виде
отдельной функции. Все бизнес-функции можно сгруппировать в одном
файле или разнести по отдельным файлам.
Индивидуальное задание:
17) Элемент матрицы называется локальным минимумом, если он строго меньше
всех имеющихся у него соседей. Соседями элемента ajj в матрице назовем
элементы aki с i-1ki+1, j-1lj+1,(k,l)(i,j). Подсчитать количество локальных
минимумов заданной матрицы.
18) Найти максимум среди всех локальных минимумов заданной матрицы. Эле-мент матрицы называется локальным минимумом, если он строго меньше
всех имеющихся у него соседей. Соседями элемента ajj в матрице назовем
элементы aki с i-1≤k≤i+1, j-1≤l≤j+1,(k,l)≠ (i,j).
Ход выполнения лабораторной работы:
-
В текстовом редакторе gedit набрал исходный код решения задания на языке программирования С++ и сохранил исходник. Программа состоит из следующих файлов:
-
function.h – файл заголовка, в котором описаны прототипы функций.
-
function.cc – файл реализации функций;
-
test.cc – файл, в котором описана главная функция программы main;
-
В папке с программой создал make-файл.
-
Запустил терминал Linux и с помощью команды cd перешёл в папку местонахождения исходных кодов программы.
-
Для компиляции программы использовал утилиту make и созданный make-файл.
Результаты выполнения лабораторной работы:
Рисунок 1 — Использование утилиты make
Рисунок 2 — Выполнение программы
Что я освоил в процессе выполнения лабораторной работы:
-
Научился использоваться утилиту make для компиляции и компоновки, для чего создал make-файл.
.
Выводы:
-
Утилита make служит для компиляции, компоновки и выполнения программы. Для этого необходимо в папке с программой создать make-файл.
ПРИЛОЖЕНИЕ A
Листинг исходного кода программы
Файл functions.h
#ifndef function_H
#define function_H
int polz(int **a,int N,int M);
void print(int **a, int n, int m);
int generator(int **a,int N,int M);
bool LocalMinimum(int **a, int x, int y, int maxX, int maxY);
void find(int **a, int maxX, int maxY);
#endif
Файл functions.cc
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include "function.h"
using namespace std;
int polz(int **a,int N,int M)
{
int i,j;
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{
cin>>a[i][j];
}
return 0;
}
void print(int **a, int n, int m)
{
int i, j;
cout << "Матрица:" << endl;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
cout << a[i][j] << " ";
cout << endl;
}
}
int generator(int **a,int N,int M)
{
int i,j,m;
srand(time(NULL));
for (i=0; i<N; i++)
for (j=0; j<M; j++){
m = 0 + rand() % 100;
a[i][j]=m;
}
return 0;
}
bool LocalMinimum(int **a, int x, int y, int maxX, int maxY)
{
int i,j,l=0,value=a[x][y];
if (x==0||y==0||x==maxX-1||y==maxY-1) {return false;}
for (i=x-1; i<x+2; i++)
for (j=y-1; j<y+2; j++)
if (value>=a[i][j]){l++;}
l--;
if (l>0) {return false;} else return true;
}
void find(int **a, int maxX, int maxY)
{
int count=0,o[maxX*maxY],i=0,max=0;
for(int x=0;x<maxX;x++)
for(int y=0;y<maxY;y++)
if(LocalMinimum(a, x, y, maxX, maxY))
{
o[i]=a[x][y];
i++;
cout<<"Локальный минимум "<<a[x][y]<<" -> ("<<x+1<<","<<y+1<<")"<<endl;
count++;
}
cout<<"Количество локальных минимумов "<<count<<endl;
count++;
if (i>1){
if (max<o[0]){max=o[0];}
for (int j=0;j<i-1;j++)
if (max<o[j+1])
max=o[j+1];
cout<<"Максимум из локальных минимумов "<<max<<endl<<endl;}
else if (i==1){
cout<<"Максимум из локальных минимумов "<<o[0]<<endl;}
else cout<<"Максимум из локальных минимумов 0"<<endl<<endl;
}
Файл test.cc
#include <stdio.h>
#include <iostream>
#include "function.h"
using namespace std;
int main()
{
int i,M,N,**g,**p;;
char ch;
cout<<"1-Инициализировать матрицу с помощью генератора случайных чисел"<<"\n";
cout<<"2-Инициализировать матрицу с помощью пользовательского ввода"<<"\n";
cout<<"0-Выход"<<"\n";
cout<<"Ваш выбор: "<<"\n";
do {
ch = getchar();
switch(ch)
{
case '1' :
cout<<"Введите размер матрицы"<<"\n";
cout<<"Количество строк:";
cin>>N;
cout<<"Количество столбцов:";
cin>>M;
cout<<endl;
g=new int *[N];
for (i=0; i<N; i++)
g[i]=new int [M];
generator(g,N,M);
print(g,N,M);
find(g, N, M) ;
break;
case '2' :
cout<<"Введите размер матрицы"<<"\n";
cout<<"Количество строк:";
cin>>N;
cout<<"Количество столбцов:";
cin>>M;
cout<<endl;
p=new int *[N];
for (i=0; i<N; i++)
p[i]=new int [M];
polz(p,N,M);
print(p,N,M);
find(p, N, M) ;
break;
}
}
while(ch!='0');
return 0;
}
Файл Makefile
test: test.o function.o
g++ test.o function.o -o test
test.o: test.cc function.h
g++ -c test.cc
function.o: function.cc function.h
g++ -c function.cc