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

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

Рисунок 2 — Компиляция и выполнение программы SortRows
Что я освоил в процессе выполнения лабораторной работы:
- Процесс создания исполняемой программы.
- Базовые основы разработки программ на языке программирования С/С++.
- Изучил некоторые команды (ls, cd, clear, man, info, help, ...) для работы в Linux-терминале.
- Научился компилировать и запускать C/C++ программы с использованием gcc и g++ компиляторов.
- Научился подключать модульные файлы.
- Разобрался в процессе создания компилятором выполняемой программы (что именно происходит за «кулисами»), а также как воедино собрать проект, который написан с использованием модульного принципа.
- Научился отлаживать работу программы с использованием встроенного отладчика 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;
}