- •Основы алгоритмизации и программировани
- •Тема . Подставляемые (встраиваемые) функции. Перегрузка функций
- •Тема. Рекурсивные функции
- •Тема 4. Производные типы. Тип указатель: указатели на объекты.
- •Тема. Тип указатель: указатели на функции.
- •Тема. Символьные данные и строки.
- •Тема. Функции для работы со строками.
- •Тема . Массивы: одномерные массивы.
- •Тема. Одномерные массивы: задачи сортировок элементов массива.
- •Тема. Двумерные массивы.
- •Тема. Структуры
- •Тема. Структуры и указатели
- •Тема . Объединения
- •Тема. Битовые поля
- •Тема . Стандартные файлы и функции по работе с ними.
- •Тема. Распределение памяти. Динамическое выделение памяти.
- •Тема. Одномерные динамические массивы.
- •Тема 19. Двумерные динамические массивы.
- •Тема. Динамические структуры данных.
- •Тема . Динамические структуры данных: однонаправленные и двунаправленные списки.
- •Тема. Динамические структуры данных: очередь и стек.
- •Тема. Динамические структуры данных: бинарные деревья.
- •4 Контрольные задания Задание 1
- •Задание 2
- •Задание 3
- •Задание 4
- •Задание 5
- •Задание 6
- •5. Примеры выполнения домашних заданий
- •1. Запуск приложения:
- •2. Создание консольного приложения:
- •4. Ввод программного кода:
- •5. Построение проекта:
- •1. Запуск приложения:
- •2. Создание консольного приложения:
- •4. Ввод программного кода:
- •5. Построение проекта:
- •Лабораторные работы
- •Лабораторная работа. Подставляемые (встраиваемые) функции. Перегрузка функций.
- •Лабораторная работа. Рекурсивные функции.
- •Лабораторная работа. Производные типы. Тип указатель: указатели на объекты.
- •Лабораторная работа. Тип указатель: указатели на функции.
- •Лабораторная работа. Решение задач с использованием указателей.
- •Лабораторная работа. Символьные данные и строки.
- •Лабораторная работа. Функции для работы со строками.
- •Лабораторная работа. Одномерные массивы: задачи сортировок элементов массива.
- •Лабораторная работа. Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива.
- •Лабораторная работа . Двумерные массивы: задачи сортировок и перестановок в двумерных массивах.
- •2.5. Контроль знаний (тесты, образец билета, вопросы для экзамена, зачета)
- •2.5.2 Итоговый контроль знаний
Тема . Объединения
Объединение – это частный случай структуры.
Объединение (смеси) – объект, который в каждый момент времени содержит один из нескольких элементов различных типов.
Объединение является структурой данных, члены которой расположены по одному и тому же адресу. Поэтому размер объединения равен размеру его наибольшего члена. В любой момент времени объединение хранит значение только одного из членов.
Объявление объединения определяет имя переменной объединения и специфицирует множество переменных, называемых элементами объединения, которые могут быть различных типов. Переменная с типом объединения запоминает любую отдельную величину, определяемую набором элементов объединения.
Определение объединений
Все компоненты объявления структур, такие как шаблоны, имена типов, имена элементов и т.д. применимы и при объявлении объединений. Единственное отличие состоит в том, что при объявлении объединения вместо ключевого слова struct используется union.
Синтаксис:
union [ИмяОбъединения] {
ОпределенияЭлементов;
} ОбозначениеОбъединения;
где union – спецификатор типа;
ИмяОбъединения – идентификатор;
ОпределенияЭлементов – совокупность описаний объектов, каждый из которых служит прототипом одного из элементов объединений.
Доступ к элементам объединения (полям данных)
Для обращения к элементу объединения используются те же конструкции, что и для обращения к элементу структуры:
ИмяОбъединения.ИмяЭлемента
(* УказательНаОбъединение).ИмяЭлемента
УказательНаОбъединение->ИмяЭлемента
Например:
СС.hh
(*pin).mas
pin–>mas
Тема. Битовые поля
Битовое поле – это элемент структуры, определенный как некоторое число битов, обычно меньшее, чем число битов в целом числе (оно по величине не превосходит машинного слова и зависит от реализации компилятора). Они предназначены для экономного размещения в памяти данных небольшого диапазона, обеспечивают удобный доступ к отдельным битам данных. Кроме того, с помощью битовых полей можно формировать объекты с длиной внутреннего представления, не кратной байту.
Битовые поля обычно применяются в низкоуровневом программировании.
Объявление битовых полей
Элементом структуры может быть битовое поле, обеспечивающее доступ к отдельным битам памяти. Вне структур или объединений битовые поля объявлять нельзя. Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса или получить ссылку на них.
Синтаксис объявления типа структуры с битовыми полями:
struct [ИмяСтруктуры] { Тип1 ИмяПоля1 : ШиринаПоля1
Тип2 ИмяПоля2 : ШиринаПоля2
........................
ТипN ИмяПоляN : ШиринаПоляN
} ИмяСтруктуры;
Тема . Стандартные файлы и функции по работе с ними.
Файлы делятся на текстовые и двоичные.
Текстовый файл – это файл, в котором каждый символ из используемого набора символов хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа «конец строки». Текстовый файл заканчивается специальным символом «конец файла».
Двоичный файл – файл, данные которого представлены в бинарном виде. При записи в двоичный файл символы и числа записываются в виде последовательности байт (в своем внутреннем двоичном представлении в памяти компьютера).
Особенностью языка С++ является отсутствие в нем структурированных файлов. Все файлы рассматриваются как неструктурированная последовательность байтов. При таком подходе понятие файла распространяется и на различные устройства.
В С++ существуют специальные средства ввода-вывода данных. Все операции ввода-вывода реализуются с помощью функций, которые находятся в библиотеке С++. Библиотека С++ поддерживает три уровня ввода-вывода:
потоковый ввод-вывод;
ввод-вывод нижнего уровня;
ввод-вывод для консоли и портов (зависит от ОС).
Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.
Функция открытия файла
Для работы с файлом в языке C++ необходима ссылка на файл. Для определения такой ссылки существует структура FILE, описанная в файле stdio.h. Данная структура содержит все необходимые поля для управления файлами, например: текущий указатель буфера, текущий счетчик байтов, базовый адрес буфера ввода-вывода, номер файла.
При открытии файла (потока) в программу возвращается указатель на поток (файловый указатель), являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток во всех последующих операциях.
Например:
#include<stdio.h>
..............
FILE *fp;
Для открытия файла существует функция fopen, которая инициализирует файл.
Синтаксис:
fp=fopen(ИмяФайла, РежимОткрытия);
где fp – указатель на поток (файловый указатель);
ИмяФайла – указатель на строку символов, представляющую собой допустимое имя файла, в которое может входить спецификация файла (включает обозначение логического устройства, путь к файлу и собственно имя файла);
РежимОткрытия – указатель на строку режима открытия файла.
Например:
fp=fopen("t.txt","r");
Функция закрытия файла
Открытые на диске файлы после окончания работы с ними рекомендуется закрыть явно. Это является хорошим тоном в программировании.
Синтаксис:
int fclose(УказательНаПоток);
Возвращает 0 при успешном закрытии файла и -1 в противном случае.
Открытый файл можно открыть повторно (например, для изменения режима работы с ним) только после того, как файл будет закрыт с помощью функции fclose().
Функция удаления файла
Синтаксис:
int remove(const char *filename);
Эта функция удаляет с диска файл, указатель на который хранится в файловой переменной filename. Функция возвращает ненулевое значение, если файл невозможно удалить.
Функция переименования файла
Синтаксис:
int rename(const char *oldfilename, const char *newfilename);
Функция переименовывает файл; первый параметр – старое имя файла, второй – новое. Возвращает 0 при неудачном выполнении.
Функция контроля конца файла
Для контроля достижения конца файла есть функция feof.
int feof(FILE * filename);
Функция возвращает ненулевое значение, если достигнут конец файла.
Функции ввода-вывода данных файла
1) Символьный ввод-вывод
Для символьного ввода-вывода используются функции:
int fgetc(FILE *fp);
где fp – указатель на поток, из которого выполняется считывание.
Функция возвращает очередной символ в формате int из потока fp. Если символ не может быть прочитан, то возвращается значение EOF.
int fputc(int c, FILE*fp);
где fp – указатель на поток, в который выполняется запись;
c – переменная типа int, в которой содержится записываемый в поток символ.
Функция возвращает записанный в поток fp символ в формате int. Если символ не может быть записан, то возвращается значение EOF.
Основные алгоритмы работы с файлами
Порядок работы с текстовыми и двоичными файлами аналогичен.
Для записи данных в файл нужно выполнить:
Описать файловую переменную типа FILE *.
Открыть файл для записи с помощью функции fopen.
Записать данные в файл с помощью функции fprintf или fwrite.
Закрыть файл с помощью функции fclose.
Для чтения данных из файла нужно выполнить:
Описать файловую переменную типа FILE *.
Открыть файл для чтения с помощью функции fopen.
Считать данные из файла с помощью функции fscanf или fread.
Закрыть файл с помощью функции fclose.