
- •1. Основные этапы решения задач на эвм
- •Формулировка задачи
- •Математическая постановка задачи
- •Разработка алгоритма решения задачи
- •Написание текста программы на языке программирования
- •Ввод текста программы в эвм
- •Поиск и устранение синтаксических ошибок
- •Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы
- •Базовые компоненты программ
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Типы данных
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Универсальные функции ввода и вывода любых типов данных
- •Структуры и форма написания программы
- •Программирование разветвляющихся вычислительных процессов
- •Цикл while – цикл с предусловием.
- •Цикл do while – цикл с постусловием
- •Цикл for
- •Безусловная передача управления внутри цикла
- •Описание некоторых стандартов алгоритмов
- •Работа с файлами (функции ввода вывода верхнего уровня)
- •Указатели
- •Одномерные массивы Объявление массива.
- •Стандартные функции обработки строк
- •Многомерные массивы на примере двумерных
- •Классы памяти
- •Способы передачи данных в функцию
- •Функции и строки
- •Функции и одномерные числовые массивы
- •Функции и двумерные массивы
- •Функции с параметрами по умолчанию
- •Перегрузка функции
- •Шаблоны функции
- •Типы данных, определяемые пользователем
- •4.1. Структуры
- •Шаблон структуры
- •Структурные переменные
- •Инициализация структуры
- •Доступ к полям структуры
- •Массив структур
- •Вложенные структуры
- •Битовые поля структур
- •Передача структуры в функцию
- •Двоичный ввод-вывод структур
- •Функции двоичного ввода-вывода
- •Динамические структуры данных
- •4.2. Объединения
- •4.3. Перечисления
- •Файловые операции ввода/вывода
- •Файловый ввод/вывод с прямым доступом
Типы данных, определяемые пользователем
Успех программы часто зависит от удачного выбора способа представления данных. Очередной технологией в развитии программирования явилась идея абстракции данных. Смысл ее состоит в том, чтобы описывать новые типы данных со сколь угодно сложной структурой и работать с ними как с единым целым. Сгруппированная тем или иным образом информация оказывается, представлена в более естественном виде.
С помощью структур, объединений и перечислений можно моделировать сложные объекты, возникающие при решении задач.
4.1. Структуры
Структура представляет собой запись, состоящую из одного или нескольких полей, расположенных в памяти подряд. Поля – это данные любого стандартного типа, в том числе и другие структуры.
Для использования структур в программе необходимо:
Описать шаблон для структуры
Объявить переменные, соответствующие этому шаблону
Научиться работать со структурной переменной через поля структуры или как с единым целым.
Шаблон структуры
Шаблон структуры - это схема, описывающая содержание структуры. Пусть мы хотим создать телефонный справочник, тогда объектом описания будет абонент телефона. Выделяя главные характеристики объекта, создадим следующее описание шаблона структуры:
struct Tel {
char name[25]; //имя абонента
long number; //номер телефона
};
Данный текст описывает тип структуры с именем шаблона Tel, состоящий из двух полей: строки name и целой переменной number типа long.
Имя поля структуры может быть таким же, как имя объекта вне структуры.
Если шаблон описан внутри функции - он доступен только этой функции, если шаблон описан вне функции - он доступен любой функции программы, начиная с точки описания шаблона. Обычно шаблон структуры описывается в заголовочных файлах.
Установка шаблона не вызывает никаких действий в программе, машина просто будет «узнавать» созданный нами тип, который называется Tel.
Структурные переменные
После описания шаблона структуры можно объявлять структурные переменные. Объявление структурных переменных приводит к выделению памяти для полей структуры, куда можно записать данные или откуда можно прочитать их.
Следующий оператор объявляет простую структурную переменную, массив структур, указатель на структуру:
Tel tel1, tel2[5], *tel3;
Инициализация структуры
Объявить структурную переменную можно с инициализацией, например, объявим массив из двух структур с инициализацией:
Teltel[2]={
"Иванов Ф.А.", 456756,
"Петров В.П.", 632345
};
Доступ к полям структуры
Обращаться со структурной переменной можно как с единым целым или на уровне полей структуры. Например, операция ввода-вывода структур производится на уровне полей, а копируются структуры как единое целое.
При использовании имени структурной переменной доступ к полям структуры осуществляется через символ “.” (точка), а при использовании адреса – через символ “- >” (стрелочка).
Продемонстрируем правила обработки структурной переменной (в дальнейшем – структуры) на примерах.
Пример 1. Объявить две структуры описанного ранее шаблона, ввести данные с клавиатуры в первую структуру, скопировать их во вторую структуру, а затем из второй структуры вывести их на экран монитора.
// Обращение к полям структуры через имя переменной
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
struct Tel{
char name[25];
long number;
};
void main(void)
{
Tel tel1, tel2;
cout<<"\nвведите фамилию абонента";
cin>>tel1.name;
cout<<"введите его номер";
cin>>tel1.number;
tel2=tel1; //работа со структурой как с единым целым
cout<<"\nВведено:"<<endl;
cout<<"Фамилия : “<< tel2.name;
cout<<” номер: "<<tel2.number;
}
Пример 2. Переписать ту же задачу, выделяя память под структуры динамически и обращаясь к полям структуры через адрес структуры.
// Обращение к полям структуры через указатель
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
struct Tel{
char name[25];
long number;
};
void main(void)
{
Tel*tel1, *tel2;
/* Выделение памяти для структуры */
tel1=new Tel;
tel2=new Tel;
cout<<"\nвведите фамилию абонента";
cin>>tel1->name;
cout<<"введите его номер";
cin>>tel1->number;
*tel2= *tel1; // нельзя так же сравнивать структуры
cout<<"\nВведено:"<<endl;
cout<<"Фамилия : “<< tel2->name;
cout<<” номер: "<<tel2->number;
}