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

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

Категория:

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

Дисциплина:

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

Город:

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

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

БНТУ, ФИТР

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

бесплатный

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

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

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

Структура программы:
main.cc – файл, в котором содержится функция main;
f1.cc - файл, в котором содержится функция автоматического заполнения матрицы
f2.cc - файл, в котором содержится функция ввода матрицы с клавиатуры
Task8.cc, Task12.cc, Task24.cc, Task26.cc - файлы, в которых содержится исполняемый код заданий 8, 12, 24, 26

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

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

Make-файлы

Цель работы

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

 

Требования

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

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

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

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

 

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

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

 

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

  1. Составили алгоритм решения поставленной задачи.
  2. В текстовом редакторе написал исходный код на языке программирования С и сохранил файл.
  3. После запуска терминала с помощью команды cd перешел в каталог с исходными файлами. Написал Makefile и использовал его для компиляции.

 

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

  1. освоил создание Make-файла;
  2. научился использовать Makefile для компиляции программы.

 

ПРИЛОЖЕНИЕ A

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

Файл Tasks.h

#ifndef PROBLEM_H_
#define PROBLEM_H_
int f1(int**,int,int);
int f2(int**,int,int);
int Task8(int**,int,int);
int Task12(int**,int,int);
int Task24(int**,int,int);
int Task26(int**,int,int);
#endif /* PROBLEM_H_*/

 

Файл main.c

#include <stdio.h>
#include <ctype.h>
int main()
{
            char a[500]={0}, word[50][20]={0}, b;
            int n=0, wi=0, temp, i, j, k;
            printf("Input the words:\n");
            gets(a);
            for (i=0;i<500;i++)
            {
                        if (isalpha(a[i]))
                        {
                                   word[n][wi]=a[i];
                                   wi++;
                        }
                        else
                        {
                                   n++;
                                   wi=0;
                        }
                        if (n==50)
                        {
                                   break;
                        }
            }
            for (i=0;i<50;i++)
            {
                        for (j=0;j<20;j++)
                        {
                                   if (word[i][j]!=0)
                                   {
                                               b=word[i][j];
                                               for (k=0;k<20;k++)
                                               {
                                                           if (j!=k)
                                                           {
                                                                       if (b!=word[i][k])
                                                                       {
                                                                                  temp=i;
                                                                       }
                                                                       else
                                                                       {
                                                                                  temp=-1;
                                                                                  goto newword;
                                                                       }
                                                           }
                                               }
                                   }
                        }
                        newword: if (temp!=-1)
                        {
                                   printf("The first word with no similar letters:\n");
                                   puts(word[temp]);
                                   break;
                        }
            }
            if (temp==-1) printf("All the words have got similar letters.\n");
            return 0;
}

 

Файл f1.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int f1(int** m,int x,int y)
{
            for (int i=0; i<x; i++)
    {
                        for (int j=0; j<y; j++)
        {
                                   m[i][j] = rand() % 10;
        }
            }
return 0;
}

 

Файл f2.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int f2(int** m,int x,int y)
{
            for (int i=0; i<x; i++)
    {
                        for (int j=0; j<y; j++)
        {
                                   cout << "Input m[" << i+1 << "][" << j+1 << "]: ";
                                   cin >> m[i][j];
        }
            }
return 0;
}

 

Файл Task8.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int Task8(int** m,int x,int y)
{
            int row=0, n, nloc, ntemp=0;
            for (int i=0; i<x; i++)
    {
                        n=0;
                        nloc=0;
                        for (int j=0; j<y; j++)
        {
                                   if (m[i][j]==m[i][j+1])
                                   {
                                               n++;
                                               if (n>nloc) nloc=n;
                                   }
                                   else n=0;
        }
                        if (ntemp<nloc)
                        {
                                   ntemp=nloc;
                                   row=i+1;
                        }
            }
            cout << "The row with the longest similar letters combination is " << row << endl;
            return 0;
}

 

Файл Task12.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int Task12(int** m,int x,int y)
{
            int *mas_ch = new int[2*x*y];
            int p, z=0,max;
            for (int r=0; r<x; r++)
            {
            for (int e=0; e<y; e++)
            {
                        p=0;
                        for (int i=0; i<x; i++)
                        {
                                   for (int j=0; j<y; j++)
                                   {
                    if(m[r][e] == m[i][j])
                                                                       p++;
                    if(p==2)
                                                           {
                                                                       mas_ch[z] = m[r][e];
                                                                       z++;
                                                           }
                }
            }
        }
    }
    max=mas_ch[0];
    for(int i=0;i<z;i++)
            {
        if(mas_ch[i]>max)
                                   max=mas_ch[i];
            }
    cout << "Max = " << max << endl;
            return 0;
}

 

Файл Task24.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int Task24(int** m,int x,int y)
{
            int *mtemp = new int [y];
            for (int i=0; i<y; i++)
    {
                        for (int j=0; j<y; j++)
                        {
                                   if (m[0][i]<m[0][j])
                                   {
                                               for (int k=0; k<x; k++)
                                               {
                                                           mtemp[k]=m[k][i];
                                                           m[k][i]=m[k][j];
                                                           m[k][j]=mtemp[k];
                                               }
                                   }
                        }
            }
            cout << "Sorted matrix:" << endl;
            for (int i=0; i<x; i++)
    {
                        for (int j=0; j<y; j++)
        {
            cout << m[i][j] << " ";
        }
                        cout << endl;
            }
            return 0;
cout << endl;
}

 

Файл Task26.cc

#include <iostream>
#include <stdlib.h>
using namespace std;

int Task26(int** m,int x,int y)
{
            int *s = new int [x];
            int t;

            for (int i=0; i<x; i++)
                        s[i]=0;

            for (int i=0; i<x; i++)
            {
                        for (int j=0; j<x; j++)
                        {
                                   s[i] = s[i] + m[i][j];
                        }
                        cout << "Sum of "<< i+1 << " rows' elements is " << s[i] << endl;
            }
            for (int k=0; k<x; k++)
            {
                        for (int i=1; i<x; i++)
                        {
                                   if (s[i] < s[i-1])
                                   {
                                               for (int j=0; j<y; j++)
                                               {
                                                           t = m[i][j];
                                                           m[i][j] = m[i-1][j];
                                                           m[i-1][j] = t;
                                               }
                                               t = s[i];
                                               s[i] = s[i-1];
                                               s[i-1] = t;
                                   }
                        }
            }
            cout << "Sorted matrix " << endl;
            for (int i=0; i<x; i++)
    {
                        for (int j=0; j<y; j++)
        {
            cout << m[i][j] << " ";
        }
                        cout << endl;
            }
            return 0;
}
272