
- •1. Основные этапы решения задач на эвм
- •Формулировка задачи
- •Математическая постановка задачи
- •Разработка алгоритма решения задачи
- •Написание текста программы на языке программирования
- •Ввод текста программы в эвм
- •Поиск и устранение синтаксических ошибок
- •Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы
- •Базовые компоненты программ
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Типы данных
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Универсальные функции ввода и вывода любых типов данных
- •Структуры и форма написания программы
- •Программирование разветвляющихся вычислительных процессов
- •Цикл while – цикл с предусловием.
- •Цикл do while – цикл с постусловием
- •Цикл for
- •Безусловная передача управления внутри цикла
- •Описание некоторых стандартов алгоритмов
- •Работа с файлами (функции ввода вывода верхнего уровня)
- •Указатели
- •Одномерные массивы Объявление массива.
- •Стандартные функции обработки строк
- •Многомерные массивы на примере двумерных
- •Классы памяти
- •Способы передачи данных в функцию
- •Функции и строки
- •Функции и одномерные числовые массивы
- •Функции и двумерные массивы
- •Функции с параметрами по умолчанию
- •Перегрузка функции
- •Шаблоны функции
- •Типы данных, определяемые пользователем
- •4.1. Структуры
- •Шаблон структуры
- •Структурные переменные
- •Инициализация структуры
- •Доступ к полям структуры
- •Массив структур
- •Вложенные структуры
- •Битовые поля структур
- •Передача структуры в функцию
- •Двоичный ввод-вывод структур
- •Функции двоичного ввода-вывода
- •Динамические структуры данных
- •4.2. Объединения
- •4.3. Перечисления
- •Файловые операции ввода/вывода
- •Файловый ввод/вывод с прямым доступом
Передача структуры в функцию
Непосредственный доступ к полям структуры – плохой стиль программирования. Все операции, которые разрешены применительно к структуре, должны быть реализованы в виде отдельных функций, тем самым имитируя работу со структурой как с единым целым.
Структуру можно передавать в функцию по значению, адресу или по ссылке: если поля передаваемой структуры не изменяются внутри функции – то структура передается по значению; если поля изменяются внутри функции – то в функцию передается адрес или ссылка структуры.
Примечание. Для сокращения объема передаваемых данных для неизменяемой структуры можно создать параметр – ссылка на неизменяемый объект (структуру).
Массив структур передается по адресу (аналогично одномерному числовому массиву).
Из функции, если это необходимо, в качестве результата можно передать значение структуры или ссылку (или указатель) на существующий в вызывающей функции объект (структуру) .
Примечание. Передача структуры по ссылке осуществляется проще.
Пример 5. Написать программу с функциями:
Заполнения одной структуры данными с клавиатуры
Вывода одной структуры на экран монитора.
Проанализируем характеристики функций:
у первой функции поля переданной структуры изменяются (вследствие ввода), поэтому в функцию следует передать адрес или ссылку объявленной структуры;
у второй функции поля структуры надо вывести на экран монитора, следовательно, они не будут изменяться внутри функции, значит в функцию следует передать значение объявленной структуры, но, для сокращения объема передаваемых данных для неизменяемой структуры можно создать параметр – ссылка на неизменяемый объект (структуру).
.
Обе функции ничего не вычисляют, следовательно, результата не передают (функции типа void).
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include <iomanip>
struct Tel{
char name[25];
long number;
};
void InStruct(Tel & r);
void OutStruct(const Tel & r);
void main(void)
{
Tel tel;
cout<<»\nВведите структуру:»;
InStruct(tel);
cout<<”\nВаша структура:»;
OutStruct(tel);
}
/* Функция заполнения структуры. Исходное данное – ссылка на структуру */
void InStruct(Tel &r)
{
cout<<”nВведите фамилию ”;
cin>>r.name;
cout<<“Введите номер телефона ”;
cin>>r.number;
return;
}
/* Функция вывода структуры. Исходное данное – ссылка на неизменяемый объект */
void OutStruct(const Tel & r)
{
cout<<setw(20)<<r.name<<setw(10)<< r.number<<endl;
return;
}
Двоичный ввод-вывод структур
Хранение большого количества структур на диске удобнее всего осуществлять в двоичном виде, т.к. при этом:
Со структурой обращаемся как с единым целым;
При вводе-выводе не тратится время на преобразование данных из символьной формы в двоичную и наоборот;
При отсутствии вышеуказанного преобразования не происходит потеря точности вещественных чисел;
Каждая структура в двоичном файле занимает одинаковое количество байт, что дает возможность, используя функцию fseek, считывать, изменять и удалять любую структуру непосредственно в файле.
Следует отметить, что двоичный файл создается только с помощью функции двоичного вывода и просматривать его в текстовом редакторе не стоит.