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

Упорядочить и вывести строки в порядке возрастания (убывания) значений их длины. C и C++

Категория:

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

Дисциплина:

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

Город:

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

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

БНТУ, ФИТР

Тег:

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

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

бесплатный

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

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

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

КОМПИЛЯЦИЯ И ОТЛАДКА ПРИЛОЖЕНИЙ В LINUX

Цель работы

Изучить инструментарий разработки приложений для Linux и фундаментальные основы системного программирования с использованием утилит gcc (g++) и gdb для создания, компиляции и отладки приложений на языке программирования С/C++.

 

Требования

Разработать приложение согласно варианту бригады. Во всех программах необходимо ввести N-строк, используя два способа ввода: через аргументы командной строки и стандартного ввода данных во время работы программы. Запустить программу в режиме отладки и продемонстрировать знания основных команд gdb.

При разработки программы использовать модульный принцип.

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

При выполнении задания запрещается использовать интегрированные средства разработки (Integrated Development Environment, IDE). Рекомендуется задействовать любой текстовый редактор (к примеру, gedit) и набор компиляторов GNU Compiler Collection (GCC), в частности, компилятор языка программирования С/C++ gcc/g++.

 

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

Упорядочить и вывести строки в порядке возрастания (убывания) значений их длины.

 

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

  1. Установил соответствующий инструментарий для выполнения лабораторной работы (gcc, g++ и gdb).
  2. Для удобства навигации по файлам установил дополнительно файловый менеджер GNOME Comander (gnome-commender).
  3. Разработал алгоритм и блок-схему решения индивидуального задания.
  4. В текстовом редакторе gedit набрал исходный код решения задания на языке программирования С++ и сохранил исходник с именем. Программа состоит из следующих файлов (см. рис. 1):
  • sort.ccp  файл реализующий сортировку строк;
  • SortRows.ccp  файл, в котором описана главная функция программы main;
  1. Запустил терминал Linux и с помощью команды cd перешёл в папку местонахождения исходных кодов программы.
  2. Для компиляции программы использовал компилятор g++ с вводом соответствующих параметров (см. рис. 2);
  3. Для тестирования работоспособности запустил программу с соответствующими аргументами командной строки (см. рис. 2).
  4. Отладил программу.

 

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

 

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

 

Рисунок 2 — Компиляция и выполнение программы SortRows

 

 

 

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

  1. Процесс создания исполняемой программы.
  2. Базовые основы разработки программ на языке программирования С/С++.
  3. Изучил некоторые команды (ls, cd, clearman, info, help, ...) для работы в Linux-терминале.
  4. Научился компилировать и запускать C/C++ программы с использованием gcc и g++ компиляторов.
  5. Научился подключать модульные файлы.
  6. Разобрался в процессе создания компилятором выполняемой программы (что именно происходит за «кулисами»), а также как воедино собрать проект, который написан с использованием модульного принципа.
  7. Научился отлаживать работу программы с использованием встроенного отладчика gdb.

 

Выводы:

1. При создании исходной программы мы выделяем четыре стадии:

  • написание исходного кода прогарммы (получаем файлы *.h, *.с / *.ссp);
  • обработка исходного кода программы препроцессором;
  • компиляция преобразованного исходного файла препроцессором в набор машинных команд (результат сохраняется в объектных файлах с расширением *.o);
  • отладка программы

2. GCC(GNU Compiler Collection) – набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC используется как стандартный компилятор для свободных UNIX-подобных операционных систем.

3. GNU Debugger — отладчик проекта GNU, который поддерживает такие языки как: Си, C++ и др. В ходе выполнения лабораторной работы мы познакомились с командами GNU GDB.

4. g++ традиционное обозначение GNU C++, свободно распространяемого компилятора языка C++. Является частью GCC – коллекции компиляторов GNU.

5. Использование динамических массивов позволяют эффективно распределять память. 

 

ПРИЛОЖЕНИЕ A

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

Файл functions.h

#ifndef FUNCTIONS_H
#define FUNCTIONS_H
            void inputUser(int n, int* len, char** arr);
            void inputConsole(int n, int* len, char** arr, char** argv);
            void sort(int n, int* len, char** arr);
            void output(int n, char** arr);
#endif 

 

Файл SortRows.cpp

#include <iostream>
#include <stdio.h>
#include <string.h>
#include "functions.h"

using namespace std;

int main(int argc, char *argv[])
{
            int n,i;
            if (argc == 1) {
                        cout << "Enter n? = ";
                        cin >> n;
                        int *len = new int[n];
                        for (i=0; i<n; i++) {
                                    len[i] = 0;
                        }
                        char **s = new char*[n];
                        for (i=0; i<n; i++) {
                                    s[i] = new char[100];
                        }
                        inputUser(n,len,&s[0]);
                        sort(n,len,&s[0]);
                        output(n,&s[0]);
                        delete[]s;
            } else {
                        n = argc-1;
                        int *len = new int[n];
                        for (i=0; i<n; i++) {
                                    len[i] = 0;
                        }
                        char **s = new char*[n];
                        for (i=0; i<n; i++) {
                                    s[i] = new char[100];
                        }
                        inputConsole(n,len,&s[0],&argv[0]);
                        sort(n,len,&s[0]);
                        output(n,&s[0]);
                        delete[]s;
            }
            return 0;
} 

 

Файл functions.cpp

#include <iostream>
#include <stdio.h>
#include <string.h>

void inputUser(int n, int* len, char** arr) {
            getchar();
            int i;
            char* ps;
            for (i=0; i<n; i++) {
                        gets(arr[i]);
                        ps = arr[i];
                        int l = strlen(arr[i]); j = 0;
                        while (j < l) {
                                    if (*(arr[i]+j) < 0) {
                                                if (j%2 != 0) len[i]++;
                                    } else {
                                                len[i]++;
                                    }
                                    j++;
                        }
            }
            return;
}

void inputConsole(int n, int* len, char** arr, char** argv) {
            int i;
            char* ps;
            for (i=0; i<n; i++) {
                        strcpy(arr[i],argv[i+1]);
                        ps = arr[i];
                        int l = strlen(arr[i]), j = 0;
                        while (j < l) {
                                    if (*(arr[i]+j) < 0) {
                                                if (j%2 != 0) len[i]++;
                                    } else {
                                                len[i]++;
                                    }
                                    j++;
                        }
            }
            return;
}

void sort(int n, int* len, char** arr) {
            char temp[100];
            int i,j,t;
            for (i=1; i<n; i++){
                        for (j=0; j<n-i; j++)
                                    if (len[j]>len[j+1]) {
                                                t=len[j];
                                                len[j]=len[j+1];
                                                len[j+1]=t;
                                                strcpy(temp,arr[j]);
                                                strcpy(arr[j],arr[j+1]);
                                                strcpy(arr[j+1],temp);
                                    }
            }
            return;
}

void output(int n, char** arr) {
                        int i;     
                        printf("Sort Ascending:\n");
                        for (i=0; i<n; i++) {
                                    puts(arr[i]);
                        }           
            return;
}

 

357