- •1. Основные этапы решения задач на эвм
- •Формулировка задачи
- •Математическая постановка задачи
- •Разработка алгоритма решения задачи
- •Написание текста программы на языке программирования
- •Ввод текста программы в эвм
- •Поиск и устранение синтаксических ошибок
- •Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы
- •Базовые компоненты программ
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Типы данных
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Универсальные функции ввода и вывода любых типов данных
- •Структуры и форма написания программы
- •Программирование разветвляющихся вычислительных процессов
- •Цикл while – цикл с предусловием.
- •Цикл do while – цикл с постусловием
- •Цикл for
- •Безусловная передача управления внутри цикла
- •Описание некоторых стандартов алгоритмов
- •Работа с файлами (функции ввода вывода верхнего уровня)
- •Указатели
- •Одномерные массивы Объявление массива.
- •Стандартные функции обработки строк
- •Многомерные массивы на примере двумерных
- •Классы памяти
- •Способы передачи данных в функцию
- •Функции и строки
- •Функции и одномерные числовые массивы
- •Функции и двумерные массивы
- •Функции с параметрами по умолчанию
- •Перегрузка функции
- •Шаблоны функции
- •Типы данных, определяемые пользователем
- •4.1. Структуры
- •Шаблон структуры
- •Структурные переменные
- •Инициализация структуры
- •Доступ к полям структуры
- •Массив структур
- •Вложенные структуры
- •Битовые поля структур
- •Передача структуры в функцию
- •Двоичный ввод-вывод структур
- •Функции двоичного ввода-вывода
- •Динамические структуры данных
- •4.2. Объединения
- •4.3. Перечисления
- •Файловые операции ввода/вывода
- •Файловый ввод/вывод с прямым доступом
Массив структур
Пример 3. Объявить массив структур статически, заполнить его данными с клавиатуры, а затем организовать в массиве поиск номера телефона абонента по его фамилии.
/* Массив структур. Обращение к полям структуры через
имя элемента массива */
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include <string.h>
struct Tel{
char name[25];
long number;
};
void main(void)
{
Teltel[5]; /* массив структур - 5 элементов */
charname[25];
inti;
intflag=0; //признак ситуации: абонент не найден
/* ввод данных в массив структур */
for(i=0; i<5; i++)
{
cout<<"\nвведите фамилию абонента";
cin>>tel[i].name;
cout<<"введите его номер";
cin>>tel[i].number;
}
cout<<"\nВыбор телефона по фамилии";
cin>>name;
/* поиск структуры по фамилии абонента */
for(i=0; i<5; i++)
if(!strcmp(name,tel[i].name)) //если строки совпали
{
cout<<"\n номер абонента “<< name ;
cout<<” равен "<<tel[i].number<<endl;
flag=1; //признак ситуации: абонент найден
}
if(flag==0)
cout<<"Абонент не найден"<<endl;
return;
}
Задание 1. Перепишите пример 3, выделяя память под массив динамически и обращаясь к полям структур через адреса структур.
Вложенные структуры
Структура, являющаяся полем другой структуры, называется вложенной.
Заметим, что в характеристики абонента телефона, как правило, входит и адрес абонента. Опишем шаблон структуры Address следующим образом:
struct Address {
char street[25];
int house;
int flat;
};
После этого полное описание характеристик абонента телефона будет выглядеть так:
struct Sprav {
char name[25];
long number;
Address addr;
};
Доступ к вложенной структуре Address осуществляется через имя (или адрес) внешней структуры.
Пример 4. Объявить структуру с вложенной структурой. Заполнить поля структуры с помощью констант соответствующего типа.
Sprav sp;
strcpy(sp.name, “Иванов И.И.”);
sp.number=452230;
strcpy(sp.addr.street, “ пр. Машиностроителей ”);
sp.addr.house=17;
sp.addr.flat=98;
Битовые поля структур
Целочисленные данные могут быть помещены в маленький объем памяти с использованием битовых полей. Битовые поля структуры используются для плотной упаковки данных, имеющих небольшой диапазон изменения, например, для хранения флагов состояний, значение которых 0 или 1 и требует 1бита памяти.
В заголовочном файле dos.h описывается шаблон структуры ftime, поля которой содержат время и дату. Размер каждого поля определен в битах, при этом шесть данных занимают 4 байта памяти:
struct ftime {
unsigned ft_sec: 5;
unsigned ft_min: 6;
unsigned ft_hour: 5;
unsigned ft_day: 5;
unsigned ft_month: 4;
unsigned ft_year: 7; //год – 1980
};
Тип битового поля – целый, обычно unsigned, после двоеточия ставится размер поля в битах. Битовые поля располагаются от меньших номеров битов к большим. Действия над битами осуществляются дольше, чем над байтами, т.к. компилятор должен генерировать специальные коды, поэтому за экономию памяти платим большим кодом программы.