![](/user_photo/2706_HbeT2.jpg)
- •1.2Типы данных
- •1.2.1Объявление переменной
- •1.2.2Категории типов данных
- •1.2.3Целый тип данных
- •1.2.4Данные с плавающей точкой (вещественные типы)
- •1.3Знаки операций
- •1.3.3Простое присваивание
- •1.3.4Составное присваивание
- •1.3.5Приоритеты операций и порядок вычислений
- •1.4Структура и компоненты программы на языке си
- •1.5Организация ввода-вывода в стиле си
- •1.6.1 Манипуляторы и форматирование ввода-вывода
- •1.7Математические функции
- •2Алгоритм. Элементы структурного программирования
- •2.1Понятие алгоритма
- •2.2Основные требования к алгоритмам
- •2.3Элементы структурного программирования
- •3Программирование алгоритмов линейной структуры
- •4Алгоритмы и программы ветвящейся структуры. Условный оператор if. Переключатель switch
- •4.1Алгоритмы и программы ветвящейся структуры
- •4.1.1Условный оператор if
- •If (выражение) оператор1;
- •4.1.2Логические операции
- •4.2Примеры составления алгоритмов и программ с использованием условного оператора If
- •4.3Переключатель switch
- •5Алгоритмы и программы циклической структуры
- •5.1 Понятие цикла. Разновидности циклов
- •5.3Оператор while
- •5.4Оператор do while
- •5.5Оператор continue
- •6Регулярные типы данных. Массивы
- •6.1 Понятие регулярного типа
- •6.2Алгоритмы сортировки массивов
- •6.3 Постановка задачи сортировки и методы её решения
- •6.4Алгоритм прямого упорядочения (Алгоритм сортировки выбором элемента)
- •6.5Алгоритм попарного сравнения соседних элементов («пузырьковая» сортировка)
- •6.6Алгоритм сортировки выбором элемента
- •6.7Методы доступа к элементам массивов, использование указателей
- •6.8Организация многомерных массивов. Указатели на многомерные массивы
- •7.1Описание и определение функции
- •7.2Вызов функции
- •7.3Передача параметров в функцию
- •7.4Описание прототипа функции
- •7.5Функция с переменным количеством параметров
- •7.6Понятие сигнатуры функции
- •7.7Подставляемые (встраиваемые) функции
- •7.8Передача параметров в главную функцию
- •7.9Рекурсивные вызовы функции
- •7.10Примеры составления функций
- •8Указатели
- •8.1Понятие указателя
- •8.2Инициализация указателей
- •8.3Операции с указателями
- •8.4Ссылки
- •9Структуры (struct)
- •10Динамические структуры данных
- •3.1 Односвязные списки
- •Д обавление в начало списка.
- •2 ) Добавление в середину списка.
- •У даление первого элемента списка.
- •3 )Удаление элемента из середины списка.
- •Int Data; //поле данных
- •If (!q) //...И он первый в списке
- •3.2 Стек
- •3.3 Очередь
- •11Динамические массивы
- •12Функции и массивы
- •13Указатели на функции
- •14.1Файловый ввод/вывод с помощью потоков
- •14.2 Дополнительные функции файлового ввода/вывода
- •14.3Режимы файлов
- •14.4 Двоичные файлы
- •14.5Произвольный доступ к файлам
- •Список использованных источников
13Указатели на функции
При использовании имени функции без последующих скобок и параметров имя функции выступает как указатель на эту функцию, и его значением служит адрес размещения функции в памяти. Это значение можно присвоить другому указателю, и затем новый указатель применить для вызова функции. В определении нового указателя должен быть тот же тип, что и возвращаемое функцией значение, и та же сигнатура.
Тип_функции (*имя_указателя)(спецификация_параметра);
int(*funclptr)(char); - определение указателя funclptr на функцию с параметром типа char, возвращающую значение типа int.
При определении указатель на функцию может быть инициализирован. В качестве инициализирующего выражения должен использоваться адрес функции, тип и сигнатура, которой соответствуют определяемому указателю.
void (*ptr1)(float)=f3;
Указатели на функцию могут быть объединены в массивы.
float (*ptrArray)(char)[4];
Для обращения к третей из этих функций потребуется оператор
float a=(*ptrArray[2])('f');
Для удобства последующих применений и сокращения производных описаний рекомендуется с помощью спецификатора typedef вводить имя типа указателя на функцию: typedef float (*ptf)(float); Массив указателей на функции удобно использовать при разработке всевозможных меню.
#include <stdlib.h>
#include <iostream.h>
void act1(char*name)
{cout << "Действия по созданию файла " << name;}
void act2(char*name)
{cout << "Действие по удалению файла " << name;}
void act3(char*name)
{cout << "Действие по чтению файла " << name;}
void act4(char*name)
{cout << "Действие по модификации файла " << name;}
void act5(char*name)
{cout << "Действие по закрытию файла " ;
exit(0);
}
typedef void(*menu)(char*);
menu MenuAct[5]={act1,act2,act3,act4,act5};
void main()
{int number;
char FileName[30];
cout << "\n 1 - создание файла";
cout << "\n 2 - уничтожение файла";
cout << "\n 3 - чтение файла";
cout << "\n 4 - модификация файла";
cout << "\n 5 - выход из программы";
while(1)
{while(1)
{cout << "\n\n Введите номер пункта меню: ";
cin >> number;
if(number>=1 && number<=5) break;
cout << "\n Ошибка в номере пункта меню!";
}
if (number!=5)
{cout << "Введите имя файла";
cin >> FileName;
}
(*MenuAct[number-1])(FileName);
}
}
14Файлы в Си/СИ++
При решении многих задач возникает проблема хранения и обработки достаточно большого объема данных. В таких случаях широко используют внешние устройства для записи и чтения информации. Связь с внешними источниками, приемниками и носителями информации в С++ осуществляется только с помощью файлов.
Традиционно под файлом понимается поименованная совокупность данных на внешнем носителе, однако в С++ этот термин трактуется более широко. Файлом здесь считается также любое внешнее устройство, по своему назначению являющееся источником или приемником информации, например, клавиатура, принтер, диск и т.д. Такое устройство принято называть логическим, поскольку учитывается только его главная функция, а не физические характеристики.
До начала операции ввода-вывода конкретному внешнему файлу должна быть поставлена в соответствие специальная переменная в программе.