Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Основы системного программирования↑ Стр 1 из 14Следующая ⇒ Содержание книги
Поиск на нашем сайте
Практика Учебное пособие для студентов дневной формы обучения по направлению подготовки 09.03.01 "Информатика и вычислительная техника"
Профиль подготовки “Вычислительные машины, комплексы, системы и сети”
Квалификация (степень) - бакалавр
Нижний Новгород 2019 год Составитель Мартынов Д.С. УДК 004.432.2 Рецензент – доцент, кандидат технических наук Д.В. Жевнерчук Программирование на С++: Практика. учеб.пособие / Д.С. Мартынов; Нижегородский государственный технический университет им. Р.Е. Алексеева, 2019. – 00 с.
Данное пособие содержит учебный материал по основам алгоритмизации и программирования, задания для лабораторных работ, контрольные вопросы по дисциплине "Программирование" в соответствии с учебным планом для направления подготовки 09.03.01 "Информатика и вычислительная техника" во втором учебном семестре. В качестве языка программирования выбран язык С ++ в его спецификации C ++ 11. В приложении приведены примеры программ, использующие средства управления консольного форматного вывода в спецификации ISO C ++11.
Редактор _______________
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ
Настоящее учебное пособие содержит учебно-методический материал, предназначенный для изучения курса "Программирование" студентами дневного отделения по направлению подготовки 09.03.01 "Информатика и вычислительная техника". Пособие включает в себя несколько тематических блоков, затрагивающих разделы объектно-ориентированного программирования на языке С++ и использования средств его стандартной библиотеки. Приведены задания для лабораторных работ. По каждой лабораторной работе оформляется отчет в установленной форме и производится защита теоретических знаний по изучаемому разделу курса. Отчет к лабораторной работе должен включать в себя текст задания, описание метода решения задачи в виде блок-схемы и псевдокода, исходный текст программы, включая комментарии к исходному тексту программы, распечатку вывода результатов работы программы. Для оформления результатов самостоятельной работы студент должен завести отдельную рабочую тетрадь. Отчет по каждому заданию оформляется в письменной форме, допускается вклеивание листингов исходных текстов программ на изучаемом языке программирования. Результат выполнения каждого задания должен быть представлен скриншотом.
Внедрение пароля в исходный код программы
Рассмотрим обобщенный алгоритм работы защиты программы при помощи пароля, читаемого через аргументы запуска и хранимого в исходном тексте программы в незашифрованном виде.
Алгоритм «Проверка пароля» (Аргументы: char* S1, Результат: bool Res) Дано Строка S2 # Исходная запись пароля, сохраняемая в исходном тексте программы Начало Целое i:=0, int Res:= 1 | Если argc > 1: # Программа запущена с аргументами | | То Res:= strcmp(S1, S2) | | | Если Res == 0 # Строки введенного и внедренного | | | | # паролей совпали | | | | То <Пароль введен успешно> {...} | | | | Иначе # <завершение работы программы> | | | Все_Если | Все_Если Конец Напишите программу, реализующую представленный алгоритм.
ЛАБОРАТОРНАЯ РАБОТА №1 Задания для самостоятельной работы
Задания к лабораторной работе Согласно заданию составить алгоритм и написать программу на языке С ++. Программа компилируется и запускается под управлением ОС Linux. Разработанная программа должна содержать встроенную справочную информации, описывающую правила использования, цель назначения и информацию о разработчике. Аргументы запуска программа должна обрабатывать согласно рекомендациям POSIX.
Варианты заданий 1. Написать программу, работающую в текстовом режиме, которая должна выводить на экран содержимое текстового файла, имя которого передается в программу с помощью аргументов командной. Все строки в файле длиннее 80 символов обрезать до 80 символов. Цвет символов - белый. Вверху экрана выводить имя файла. Цвет фона - черный. При нажатии клавиш Up & Down прокручивать экран по вертикали. При нажатии клавиш Left & Right прокручивать экран по горизонтали, т.е. выводить ранее обрезанные строки.
2. Написать программу, работающую в текстовом режиме (ширина экрана равна 80 столбцов), которая должна выводить на экран содержимое бинарного файла, имя которого передается в программу с помощью аргументов командной строки. Содержимое бинарного файла выводить в шестнадцатеричном виде по 16 байт в строке, между каждыми четырьмя байтами вставляя пробел. Вверху экрана выводить имя файла. В левой части экрана выводить смещение (в шестнадцатеричной форме) 16-байтной строки относительно начала файла. Цвет символов - белый. Цвет фона - черный. При нажатии клавиш Up & Down прокручивать экран по вертикали. Пример выполнения: test 00000000 455D103D 56431DFC 66CA41AA 123309BB 00000010 D54D1000 06434D8C 66CA41AA 123309BB ...
3. Написать программу, работающую в текстовом режиме (ширина экрана равна 80 столбцов), которая должна выводить на экран содержимое текстового файла, имя которого передается в программу с помощью аргументов командной. Все строки в файле длиннее 80 символов необходимо переносить по словам на следующую строку экрана. Вверху экрана выводить имя файла. Цвет символов - белый. Цвет фона - черный. При нажатии клавиш Up & Down прокручивать экран по вертикали.
4. Написать программу, принимающую в качестве аргумента командной строки имя текстового файла и выводящую содержимое файла в стандартный поток вывода. Если содержимое файла не умещается на одном машинном экране, файл выводится постранично: сначала первая страница, потом вторая и так далее. Каждая последующая страница выводится на экран после нажатия пользователем клавиши Enter.
5. Подготовить несколько исполнимых файлов, выводящих на экран различные сообщения. Подготовить текстовый файл, в котором заданы пути к этим исполнимым файлам. Написать программу, читающую из текстового файла имена исполнимых программ и запускающую их в порядке, противоположном тому, в котором они указаны в файле. Имя текстового файла жестко задано в исходном тексте программы.
6. Написать программу, принимающую в качестве аргументов командной строки два имени текстового файла и параметр, определяющий режим записи. Программа считывает содержимое первого файла и записывает его во второй файл. Режим записи определяет, будет ли второй файл перезаписан или данные первого файла будут добавляться в конец второго файла.
7. Написать программу, читающую информацию со стандартного потока ввода и записывающую ее в файл. Имя файла программа принимает в качестве аргумента командной строки. Чтение со стандартного потока продолжается до тех пор, пока пользователь не нажмет ' Ctrl + Z ' (EOF).
8. Написать программу, работающую в текстовом режиме (ширина экрана равна 80 столбцов), которая должна выводить на экран текстовый файл (имя передается через аргументы командной строки). Строки длиннее 80 символов обрезаются. Цвет символов - серый. Цвет фона - черный. Слова, список который определен в массиве: char *keyWords[] = { "int", "float", ... }; должны выводиться белым цветом. При нажатии клавиш Up, Down прокручивать экран.
9. Подготовить несколько исполнимых файлов, выводящих на экран различные сообщения. Подготовить два текстовых файла, содержащих пути к этим исполнимым файлам, порядок следования исполняемых файлов для каждого текстового файла произвольный. Написать программу, принимающую в качестве аргумента командной строки путь к текстовому файлу, читающую из файла имена исполнимых программ и запускающую их в том порядке, в котором они указаны в файле.
10. Написать программу, принимающую в качестве аргумента командной строки имя текстового файла и выводящую содержимое файла в стандартный поток ошибок (STDERR) в обратном порядке.
11. Написать программу, принимающую в качестве аргумента командной строки имя текстового файла и выводящую содержимое файла построчно в стандартный поток вывода: сначала первая строка, потом вторая и так далее. Каждая последующая строка выводится на экран после нажатия пользователем клавиши Enter.
12. Написать программу, принимающую в качестве первого аргумента командной строки имя текстового файла, в качестве второго и третьего аргумента - любые слова. Программа должна выводить содержимое файла в стандартный поток вывода, заменяя все вхождения в файле слова, заданного вторым аргументом, словом, заданным третьим аргументом.
13. Написать программу, принимающую в качестве аргумента командной строки имя файла. Если этот файл имеет расширение. txt, программа должна вывести его содержимое в стандартный поток вывода. Если это исполняемый файл, программа должна запустить его на выполнение (Необходимо подготовить исполнимый файл, выводящих на экран какое-нибудь сообщение). Если этот файл имеет какое-то другое расширение, программа должна вывести соответствующее сообщение и завершиться.
14. Написать программу, работающую в текстовом режиме (ширина экрана равна 80 столбцов), которая должна выводить на экран содержимое двух бинарных файлов, имена которых передаются в программу с помощью аргументов командной строки. Содержимое бинарных файлов выводить в шестнадцатеричном виде по 16 байт в строке, между каждыми четырьмя байтами вставляя пробел. В левой части экрана выводить смещение (в шестнадцатеричной форме) 16-байтной строки относительно начала файла. Файлы отделять вертикальной чертой. Вверху экрана выводить имена файлов. Различающиеся байты файлов отображать красным цветом. Цвет остальных символов - белый. Цвет фона - черный. При нажатии клавиш Up & Down прокручивать экран по вертикали. Пример выполнения: test.exe bc.exe 00000000 455D103D 56431DFC 66CA41AA 123309BB | 4D000000 00101000 60CA1111 1131111B 00000010 D54D1000 06434D8C 66CA41AA 123309BB | D54D1000 06434D8C 66CA41AA 123309BB ...
15. Написать программу, работающую в текстовом режиме (ширина экрана равна 80 столбцов), которая должна выводить на экран список файлов и каталогов в текущей директории (в которой запущена программа). Если весь список не умещается на одном экране, то при нажатии клавиш Up, Down прокручивать список.
16. Написать программу, принимающую в качестве аргументов командной строки четыре имени текстовых файлов. Программа считывает содержимое первого файла и записывает: во второй файл - гласные латинские символы, встречающиеся в первом файле, в третий файл - согласные латинские символы, встречающиеся в первом файле, в четвертый файл - остальные символы, встречающиеся в первом файле.
17. Написать программу, принимающую в качестве аргумента командной строки имя текстового файла. Программа считывает содержимое переменных окружения системы и записывает их в файл, имя которого принимает в качестве параметра.
18. Написать программу, выполняющую перемещение файла, начальное и конечное имена файлов передаются в программу через аргументы командной строки.
19. Написать программу, принимающую в качестве аргументов командной строки два имени текстовых файлов. Программа считывает содержимое первого файла, преобразует символы латиницы нижнего регистра в символы латиницы верхнего регистра, а символы латиницы верхнего регистра в символы латиницы нижнего регистра, и записывает его во второй файл.
20 Для текстового файла, имя которого передается через командную строку, подсчитать количество: 1) символов; 2) символов без пробелов; 3) букв; 4) слов; 5) предложений, и вывести сформированную статистику на экран.
21 Считать текстовый файл, имя которого передано через командную строку, произвести преобразование текста, написанного латиницей, к верхнему регистру. Результат работы сохраняется в обрабатываемом файле. Например: begin -> BEGIN.
22 Подготовить исполнимый файл (1), принимающий из командной строки один параметр (имя файла) и выводящий содержимое файла на экран. Подготовить исполнимый файл (2), принимающий из командной строки два параметра: имя исполнимого файла, который он запускает, и строковый параметр, который он передает запускаемому файлу через командную строку. Осуществить запуск исполнимого файла (2) в связке с исполнимым файлом (1).
23 Программа принимает через командную строку: 1) имя текстового файла; 2) произвольную строку символов (ключ). Программа должна вывести на экран только те строки файла, в которых содержится строка символов (ключ), переданная через командную строку вторым аргументом. При выводе на экран строки файла, выделять вхождение ключа другим цветом.
24 Написать программу, которая разбивает большой файл на ряд файлов меньшего размера и собирает ряд файлов в один. При разбивке имя разбиваемого файла и размер конечного файла передавать через командную строку. При сборке имя первого собираемого файла передавать через командную строку, остальные файлы искать в текущей директории, увеличивая номер в расширении файла. У разбиваемого файла менять имя и расширение: filename. ext -> filename _ ext. pXX, где XX - это номер части (от 00 до 99). При сборке производить обратную операцию. Пример: файл a. out размер 5 456 223 байт конечные файлы: a _ out. p 01 размер 2 000 000 байт a _ out. p 0 2 размер 2 000 000 байт a _ out. p 03 размер 1 456 223 байт
Пример работы программы: разбиение: c:\>file_sc -s BigFile 2000000
сборка: c:\>file_sc -с BigFile.p01
25 Написать программу, которая составляет список файлов в текущей директории, сортирует файлы в списке по расширению (в алфавитном порядке) и записывает этот отсортированный список в текстовый файл.
26 Написать программу, принимающую в качестве аргументов командной строки два имени текстовых файлов. Программа считывает содержимое первого файла, подсчитывает число вхождений каждой буквы, и записывает результат во второй файл.
27 Подготовить несколько текстовых файлов с сообщениями. Подготовить специальный текстовый файл, в котором заданы пути к текстовым файлам с сообщениями. Написать программу, принимающую в качестве аргумента командной строки путь к текстовому файлу, читающую из файла имена текстовых файлов с сообщениями и выводящую текстовые файлы с сообщениями на экран.
28. Написать программу, принимающую в качестве аргументов командной строки имя текстового файла и параметр, определяющий режим вывода содержимого файла на экран. Программа выводит содержимое файла на экран в зависимости от режима вывода либо в обычном символьном виде, либо в шестнадцатеричном формате (по два знакоместа на символ под старшие и младшие 4 бита). При выводе в шестнадцатеричном формате коды соседних символов разделять пробелами.
Рекомендаци и по организации кода программы
1. Старайтесь осмысленно использовать директиву using, определяя при помощи неё использование нужных средств стандартной библиотеки. Например, целесообразно использовать
using std::cout; using std::cin; using std::endl; using std::string;
вместо использования всего пространства имен стандартной библиотеки:
using namespace std;
Целесообразно использовать пространство имен для разделения области различных частей проекта, содержащего объявления нескольких классов. Пространство имен позволяет исключить конфликт имен для классов и методов с одинаковыми именами, определенными в различных частях проекта.
2. Каждый блок кода программы должен быть сопровожден соответствующими комментариями. Комментарии к программе должны быть составлены на русском языке. Старайтесь делать код программы читаемым, давать переменным и методам осмысленные имена.
3. При использовании объектно-ориентированного подхода к проектированию программ целесообразна многофайловая организация проекта. При этом в состав проекта будут входить главный модуль main.cpp и файлы статических библиотек, включающие в себя заголовочные файлы библиотек и соответствующе им файлы реализации. 4. Имена создаваемых программных модулей, равно как и имена программных переменных, должны нести смысловую нагрузку об их назначении. Можно использовать стандартные сокращения, абревиатуры и их комбинации. Например, имя программной утилиты su, входящей в состав командной оболочки bash, является сокращением от английского «substitute user» - «замена пользователя», что отражает факт создания локализованной сессии выполнения команд от имени другого пользователя.
Файловый ввод-вывод в Linux Низкоуровневый файловый ввод-вывод является артефактом операционной системы. Именно он обеспечивает наибольшее быстродействие и используется службами ядра.
Низкоуровневый файловый ввод-вывод не является средством стандартной библиотеки языка С. Это платформо зависимая система ввода-вывода. На UNIX/Linux и Windows системах она имеет различную внутреннюю реализацию, хотя и имеет общий функциональный механизм. Низкоуровневый файловый ввод-вывод основан на использовании дескрипторов файлов. Файловые дескрипторы относятся к одному из важных ресурсов процесса – программы в контексте исполнения. При клонировании процесса дочерний процесс наследует, в том числе, и таблицу открытых файловых дескрипторов.
Агрегативный тип данных Структура является одним из базовых типов (базовые, встроенные типы данных) для языков С и С ++, она относится к категории агрегативных типов данных и используется для создания типов данных, определяемых пользователем. С точки зрения теории информации, структурой называют некоторый набор данных и связи, наложенные на эти данные. Благодаря имеющимся связям между данными они выделяются из внешней информационной среды. Можно сказать, что структура – это способ организации информации. Структуры позволяют описывать категории физического мира терминами языка программирования и являются базой для создания абстрактных типов данных (ADT – Abstract Data Type) В С и С ++ структура – это совокупность данных разного типа, собранных под одним именем. Структура состоит из набора полей, каждое из которых является экземпляром одного из базовых типов данных. Поля, определяющие состав структуры, в С ++ называются ее атрибутами. Существует ряд ограничений, накладываемых на типы полей структур: в языке С полями структур не могут быть функции и экземпляры структур того же типа, что и структура, в которой они объявляются, но могут быть указатели на функции и указатели на структурные переменные того же типа. В С ++ атрибутами структур могут быть и функции, но, как и в С, атрибутами не могут быть переменные того же структурного типа. Структуры, содержащие указатели на структуры того же типа, называются самоссылочными структурами. В ряде случаев, экземпляр структуры называется записью. Это связано с тем, что записи, как и экземпляры структурных переменных, тоже содержат в себе наборы информационных полей — атрибуты. Кроме того, структурированная информация используется при работе с базами данных (БД): экземпляр структуры отражается в виде записи, набора полей таблиц БД. Общий вид объявления структур в С / С ++.
struct <Имя_составного_типа> { <тип_1> <Имя_атрибута_1>; <тип_2> <Имя_атрибута_2>; * * * * <тип_N> <Имя_атрибута_N>; }; typedef struct <Имя_составного_типа> { <тип_1> <Имя_атрибута_1>; <тип_2> <Имя_атрибута_2>; * * * * <тип_N> <Имя_атрибута_N>;
} <Псевдоним_для_составного_типа>;
Объявление структуры является декларацией для компилятора о том, каким образом должна быть организована информация при создании экземпляров структурных переменных, эта декларация не связана с выделением памяти, память выделяется только при объявлении структурных переменных. Рассмотрим следующие примеры. Объявление структуры для представления точек на плоскости в Декартовой системе координат.
struct TPoint2D { /* объявляется структурный тип TPoint2D, */ float x; /* содержащий два поля типа float */ float y; }; /*объявление структуры заканчивается пустым оператором */
Объявление структуры, совмещенное с объявлением двух структурных переменных.
struct TPoint2D { /* объявляется структурный тип TPoint2D, */ float x; /* содержащий два поля типа float */ float y; } A, B; // Идентификаторы создаваемых структурных переменных
Следует обратить внимание на тот факт, что при объявлении структурных переменных в языке С необходимо использовать ключевое слово struct, являющееся частью имени структурного типа, а в С ++ его можно опускать:
struct A { int val; }; /* Объявление структурного типа */ struct A a1; /* Объявление переменной структурного типа по правилам ANSI С */ struct A a2 = {1}; /* Объявление стректурной переменной, совмещенное с инициализацией */
Поэтому в ANSI C целесообразно использовать форму объявления структурного типа, совмещенную с определением псевдонима для типа (typedef).
typedef struct TA { int val; } A; /*Объявление псевдонима для пользовательского структурного типа*/ A a; /* Объявление переменной структурного типа */
В языке программирования С ++ такая конструкция является избыточной, так как компилятор ведет собственный «реестр» («реестр» - система учета, специальным образом организованная внутренняя БД) пользовательских типов данных, объявленных в проекте, и добавляет необходимую информацию в объявления переменных. Приведем вариант объявления типа А для языка С ++.
struct A { int val; }; // Объявление структурного типа*/ A a; // Объявление переменной структурного типа
Для доступа к полям структур используются две операции: доступ по имени (.) и доступ через указатель (->). Рассмотрим следующий пример.
typedef struct Point2D { float x; float y;} TPoint2D; TPoint2D A, B={0F, 0.5F}; TPoint2D* ptr=&A; /* объявление указателя на структуру */ A.x=1.15F; /* обращение к полю структуры по имени */ ptr->y=2.34F; /* обращение к полю структуры через указатель */
Механизмы выделения памяти для экземпляров структур в куче такие же, как и для скалярных типов данных.
// ANSI C typedef struct Point3D {float x; float y; float z;} TPoint3D; TPoint3D* arrayPoint=(TPoint3D*)malloc(sizeof(TPoint3D)*10); if(arrayPoin==NULL) { /* обработка ошибок выделения памяти */ } arrayPoint[0]->x=0F; arrayPoint[0]->y=0F; arrayPoint[0]->z=0F; /* Какой-то код... */ free(arrayPoint); /* освобождение памяти в куче */
// С++ struct TPoint2D { // объявляется структурный тип TPoint2D, float x; // содержащий два поля типа float float y; }; // объявление структуры заканчивается пустым оператором Tpoint2D *Polygon = new Tpoint2D[20]; // Цикл инициализации элементов массива структур // Обработка элементов массива структур. show(Polygon); // функция для отрисовки полигона на экране delete[] Polygon; // Освобождение памяти
При определении полигона (множества точек) в программе можно использовать и механизм ангрегирования, когда одниструктурные переменные объявляются в качестве полей дгругих. Например:
struct TPolygon2D { TPoint2D* arr; // указатель на массив точек size_t numb; // количество точек в полигоне };
Рассмотрим упрощенную схему, используемую при объявлении структурных типов для представления информации о студентах с реализацией кода на С ++. В общем виде экземпляр структурной переменной должен содержать поля для представления фамилии, имени, отчества студента, даты рождения, данных об факультете или институте, название или шифр специальности, даты поступления, номера или названия учебной группы, список или массив оценок текущей успеваемости и уникального цифрового идентификатора.
Сообветсвующая предложенной схеме структура на языке С ++ может быть представлена следующим образом:
struct Student { uint64_t id; std::string surName; // Фамилия std::string firstName; // Имя std::string patronymic; // Отчество std::string institute; // институт/факультет std::string specialty; // специальность std::time_t birthday; // Дата рождения std::time_t enrollment; // Дата зачисления uint8_t status; // Статус: академ.отпуск|отчислен и др. uint8_t *academicPerformance; // указатель на массив оценок };
Данный способ представления информации о студенте не является оптимальным по использованию памяти и обладает определенной избыточностью в отношении полей, предназначенных для представления информации, как о дате рождения, так и о заде зачисления студента в учебное заведение. Кроме того, хранение информации об оценках, без привязке к названию соответствующих предметов, крайне малоинформативно и не практично. Целесообразно разработать структурный тип для представления данных об успеваемости, который должен содержать как минимум два поля: название предмета и полученная оценка.
struct TAcademicPperformance { std::string article; // название учебного курса unsigned char assessment; // полученная оценка };
С учетом вышеизложенного, может быть предложен следующий вариант структурного типа для представления информации о студенте.
struct Student { uint64_t id; std::string surName; // Фамилия std::string firstName; // Имя std::string patronymic; // Отчество std::string institute; // институт/факультет std::string specialty; // специальность char birthday[3]; // Дата рождения в формате ГГ:ММ:ДД char enrollment[3]; // Дата зачисления в формате ГГ:ММ:ДД uint8_t status; // Статус: академ.отпуск|отчислен и др. TAcademicPerformance* perf; // указатель на массив оценок };
Подобный подход к организации информации лишь на первый взгляд может показаться слишком сложным, на практике же такой подход применяется достаточно широко. В качестве примера рассмотрим стандатный тип, спользуемый для представления даты и времени – std::tm.
struct tm { int tm_sec; // секунды после минут [0,59] int tm_min; // минуты после часов [0,59] int tm_hour; // часы после полуночи [0,23] int tm_mday; // день месяца [1,31] int tm_mon; // месяц года (январь = 0) [0,11] int tm_year; // год (1900 год = 0) int tm_wday; // день недели (вс = 0) [0,6] int tm_yday; // день года (1 января = 0) [0,365] int tm_isdst; };
Отметим, что практически все специальные структуры, предназначенные для обеспечения локализации приложений (поддержка национальной кодировки, способов отображения даты, времени, денежных единиц и другое), в языке С ++ унаследованы из языка С. Кроме того, в состав стандарной библиотеки введены все специальные функции, предназначенные для работы с датой и временем, и не только. Следующий пример демонтсирует базовый способ получения информации о величине системных даты и времени.
#include <iostream> #include <iomanip> #include <ctime> int main() { std::time_t t = std::time(NULL); std::tm tm = *std::localtime(&t); std::cout << "Time right now is " << std::put_time(&tm, "%c %Z") << '\n'; return 0; } Как видите, структурный подход к программированию, явивишися предшественником объектно-ориентированного подхода, определяет следующую требования к разработке ПО: 1. определение необходимых структрурных типов, адекватных информационной модели программной системы; 2. поиск и разработка алгоритмов для работы с выбранными структурами; 3. разработка функций, реализующих выбранные методы и алгоритмы.
Изучение утилиты who
ЛАБОРАТОРНАЯ РАБОТА №2 Цель работы 1. Изучить правила организации пользовательских (агрегативных) типов данных. 2. Исследовать механизмы организации полей данных в структурах и способы обращения к ним. 3. Научится использовать структуры для разработки проблемно ориентированных типов данных (абстрактных типов данных, АТД). 4. Научиться разрабатывать и использовать хранилища данных, организованные по принципу электронных таблиц. Задания к лабораторной работе Согласно заданию составить алгоритм и написать программу на языке С++. Программа компилируется и запускается под управлением ОС Linux. Разработанная программа должна содержать встроенную справочную информации, описывающую правила использования, цель назначения и информацию о разработчике. Аргументы запуска программа должна обрабатывать согласно рекомендациям POSIX. Разрабатываемая программа предназначена для хранения массива структур (записей), она должна поддерживать управление на уровне аргументов командной строки (аргументов запуска). Поддерживаемые опции запуска: -- help либо - h - запуск программы в режиме получения справки. После вывода справочной информации программа завершает работу. -с [ N ] [ file _ name ] - запуск программы в режиме создания электронной таблицы записей, N – количество записей, file _ name – имя текстового файла, в котором будет сохранен массив (таблица) записей. - r [ N ] [ file _ name ] - запуск программы в режиме чтения содержимого текстового файла file _ name, на экран должны быть выведены не более N записей. Следует учесть, что реальное количество записей в файле может не совпадать с заданным значением N. Если заданный файл окажется пуст, либо по какой-либо причине программа не сможет его открыть, должно быть выдано соответствующее сообщение. В случае если программа будет запущена с неопределенными разработчиком аргументами, программа должна выдать соответствующее сообщение и вывести минимальную справку о корректных аргументах запуска. Это так же касается случая, когда программа запускается без аргументов.
Варианты заданий Варианты заданий работы 1. Самолеты
2. Расчет движения
3. Перевозки
4. Расписание
5. Аэропорт
6. Ремонт аэродромных сооружений
7. Кассы авиабилетов
8. Технические характеристики парка используемых ПК
9. Города
10. Московские мосты
11. Линии московского метро
12. Легковые автомобили
13. Учет продажи программных продуктов
14.Учет абонентов городской телефонной станции
15. Детские сады
16. Учет сотрудников (для отдела кадров)
17. Ведомость зарплаты за текущий месяц
18. Музеи
19. Экскурсии
20. Киноафиша
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-06-14; просмотров: 174; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.25.130 (0.01 с.) |