Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
25.02.2016
Размер:
113.34 Кб
Скачать

Министерство образования Республики Беларусь

Белорусский Национальный Технический Университет

Факультет информационных технологий и робототехники

Кафедра «Программное обеспечение вычислительной техники

и автоматизированных систем»

Отчёт

по лабораторной работе № 3

по дисциплине «Операционные системы»

тема: «Make-файлы»

Исполнитель:

студент группы 10702112

Сидоров А.О.

Преподаватель:

Радкевич А.С.

2013-2014 учебный год

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

Make-файлы

Цель работы

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

Требования

  1. Разработать модульное консольное приложение на С/С++ согласно варианту

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

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

  2. Предусмотреть два способа инициализации матрицы: с помощью генератора

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

основной функции программы.

  1. Для каждой бригады необходимо выполнить по два задания на человека (к

примеру, если в бригаде 2 человека, то необходимо выполнить 4 задания,

если в бригаде 3 человека – 6 заданий и т.д.). Каждое задание оформить в виде

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

файле или разнести по отдельным файлам.

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

17) Элемент матрицы называется локальным минимумом, если он строго меньше

всех имеющихся у него соседей. Соседями элемента ajj в матрице назовем

элементы aki с i-1ki+1, j-1lj+1,(k,l)(i,j). Подсчитать количество локальных

минимумов заданной матрицы.

18) Найти максимум среди всех локальных минимумов заданной матрицы. Эле-мент матрицы называется локальным минимумом, если он строго меньше

всех имеющихся у него соседей. Соседями элемента ajj в матрице назовем

элементы aki с i-1≤k≤i+1, j-1≤l≤j+1,(k,l)≠ (i,j).

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

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

    • function.h файл заголовка, в котором описаны прототипы функций.

    • function.cc файл реализации функций;

    • test.cc файл, в котором описана главная функция программы main;

  1. В папке с программой создал make-файл.

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

  3. Для компиляции программы использовал утилиту make и созданный make-файл.

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

Рисунок 1 — Использование утилиты make

Рисунок 2 — Выполнение программы

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

  1. Научился использоваться утилиту make для компиляции и компоновки, для чего создал make-файл.

.

Выводы:

  1. Утилита 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

Соседние файлы в папке Сидоров А.О