русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тип идентификатор


Дата добавления: 2013-12-23; просмотров: 846; Нарушение авторских прав


тип – идентификатор стандартного типа или сформированного пользователем;

формальные параметры отделяются друг от друга запятыми.

Если список формальных параметров содержит слово void,то это означает, что список формальных параметров пуст, то есть отсутствуют формальные и фактические параметры. В этом случае можно оставить только круглые скобки. В зависимости от способа приема исходных данных и возврата результата, формальные параметры делятся по категориям:

- по значению;

- по адресу;

- по ссылке.

int fun ( int a, int * h) // int a – по значению, int * h – по адресу

int l = 8;

int b = fun(5, &l);

int *p = new int;

int d = fun(b, p);

Передача параметров по значению.В случае передачи параметров по значению формальному параметру функции присваивается копия значения фактического параметра. В ОП выделенной для кодов и данных функции, выделится участок памяти точно такой же как и для фактического параметра, куда и будет помещена копия фактического параметра. Все изменения над формальным параметром внутри функции не отражаются на фактическом параметре, так как изменения происходят с копией фактического параметра, а не с ним самим. Недостатком этого способа передачи данных заключается в том, что выделяется дополнительная память и тратится время на копирование. По значению можно передавать любой тип, как простой, так и структурированный.

Передача параметров по адресу.Такой способ передачи параметра в функцию требует указания адреса фактического параметра, который при запуске вызывающей функции присваивается соответствующему фактическому параметру. Внутри функции открывается доступ к фактическому параметру, что позволяет не только вернуть результат по адресу фактического параметра, но и его запортить. Недостатком является то, что надо следить за сохранностью фактических параметров.



Передача параметра по ссылке посредством ссылки. Ссылки используются как псевдонимы для других переменных. при переаче параметров посредством ссылок происходит то же самое, что и при передаче посредством указателей. Ссылка становится вторым именем фактического параметра и все изменения, происходящие внутри функции, сказываются также на фактическом параметре. В отличии передачи по значению копия не создается, следовательно, значение параметра после обработки в вызывающей функции сохранит своё новое значение. Для получения данных по ссылке не надо пользоваться операцией разыменования (*).

Пример функции, возвращающей значение

#include <iostream>

using namespace std ;

// прототипы функций

long double fact ( const int& ) ;//ссылка на константу целого типа

// главная функция

void main ( )

{

int x = 8 ;

cout << fact ( x ) << endl ;

x = fact ( x ) ; cout << x << endl ;

}

// определение вычисления без рекурсии

long double fact ( const int& n )

{

int i ( n ) ;// I инициализируется значением параметра n

long double res = 1 ;

while ( i > 1 ) res *= i-- ;

return res ; //возврат результата

}

 

Пример передачи параметров по значению и по ссылке

#include <iostream>

using namespace std ;

// прототипы функций

void swapV ( int, int ) ;

void swapP ( int*, int* ) ;

void swapR ( int&, int& ) ;

void reverseArray ( int*, int = 10 ) ;

void view ( const int*, int = 5 ) ;

// главная функция

int main ( )

{

int aIn, bIn ;

cout << "Enter a -> " ; cin >> aIn ;

cout << "Enter b -> " ; cin >> bIn ;

// перестановка по значению

int a = aIn, b = bIn ; swapV ( a, b ) ;

cout << "Result swapV ( ): " ; cout << a << ' ' << b << endl ;

// перестановка посредством указателей

a = aIn, b = bIn ; swapP ( &a, &b ) ;

cout << "Result swapP ( ): " ; cout << a << ' ' << b << endl ;

// перестановка посредством ссылок

int &ra = aIn, &rb = bIn ;

swapR ( ra, rb ) ; // swapR ( aIn, bIn ) ;

cout << "Result swapR ( ): " ; cout << aIn << ' ' << bIn << endl ;

// реверс массива

int ar [ 20 ] = { 1, 2, 3, 4, 5, 6 } ;

cout << "\nInitial array\n" ; view ( ar, 5 ) ;

cout << "\nReverse array\n" ;

reverseArray ( ar, 5 ) ; view ( ar, 5 ) ;

cout << "\nOne more reverse\n" ;

reverseArray ( ar, 12 ) ; view ( ar, 12 ) ;

return 0 ;

}

// перестановка по значению (только внутри функции)

void swapV ( int x, int y )

{ int t = x ; x = y ; y = t ; }

// перестановка при помощи указателей

void swapP ( int* px, int* py )

{ int t = * px ; * px = * py ; * py = t ; }

// перестановка при помощи ссылок

void swapR ( int& rx, int& ry )

{ int t = rx ; rx = ry ; ry = t ; }

// реверс массива

void reverseArray ( int* p, int size )

{

for ( int i = 0, j = size - 1; i < j; i++, j-- )

swapP ( p + i, p + j ) ; // swapR ( p [ i ], p [ j ] ) ;

}

// вывод состояния массива

void view ( const int* p, int size )

{

int n = 5 ;

for ( int i = 0; i < size; i++ )

{

for ( int j = 0; j < n && ( i + j ) < size; j++ )

cout << p [ i + j ] << '\t' ;

i += n - 1 ;

cout << endl ;

}

}

В этом примере рассматриваются разные способы передачи параметров для перестановки значений двух переменных и организация вызова функций для этих способов.

Функция swapV получает исходные данные по значению, следовательно, работает с копиями глобальных переменных. Перестановки внутри функции swapV никак не отражаются на переменных в вызывающей функции.

Функция swapP в качестве исходных данных принимает адреса фактических параметров, которые передаются при вызове ( swapP ( &a, &b ) ; ). При таком способе функция swapP имеет непосредственный доступ к значениям глобальных переменных. При перестановке используется разыменование указателей. После выполнения swapP значения a и b поменяются местами.

Функция swapR использует в качестве формальных параметров ссылки. В примере перед вызовом функции объявляются независимые ссылки ra и rb, после чего происходит вызов функции swapR ( ra, rb ). Объявление ссылок было необязательным. Можно было обратиться к функции swapR ( aIn, bIn ). Результат один и тот же при обоих вызовах, так как меняются местами переменные aIn и bIn. При использовании ссылок копии не создаются, и разыменование не выполняется.

 

Файловый ввод вывод

Функции в/в в С++ позволяют читать (копировать) данные из файлов и устройств в/в в ОП, и записывать из ОП в файл и устройства в/в. Функции в/в можно разделить на 2 группы:

1. в/в верхнего уровня: потоковый и записями;

2. в/в нижнего уровня: системный в/в.

Под файлом понимается либо именованная область внешней памяти ПЭВМ (ж.д. или г.д.), либо логическое устройство – потенциальный источник или приемник информации, доступ к которым обеспечивает операционная система. Поддержка ОС состоит в том, что в ней имеются свойства:

· создание файлов;

· удаление файлов;

· поиск файлов на внешнем носителе;

· открытие файлов;

· чтение данных из файла;

· запись данных в файл;

· закрытие файлов;

· перемещение указателя в нужное место файла.

Функции ввода вывода нижнего уровня не выполняют буферизации и форматирование данных. Это функции системного ввода вывода:

· они позволяют пользоваться непосредственно средствами ввода вывода ОС;

· их целесообразно использовать при разработке собственных подсистем ввода вывода данных.

Функции ввода вывода верхнего уровняпозволяют буферизованный форматный и бесформатный ввод вывод данных. Это значит, что при чтении данных из файла и записи данных в файл, обмен данными осуществляется между программой и буфером, расположенным в ОП. Данные из буфера в файл и обратно пересылаются по заполнению или по исчерпанию данных буфера. Буферизация ускоряет выполнение программы за счет уменьшения количества пересылок данных из буфера на МД и обратно. Функции ввода вывода верхнего уровня реализуют ввод вывод потоком и записями находятся в файле stdio.h.

Поток (stream) можно определить как абстрактный канал связи, который связывается в программе для обмена данными с файлами. Его можно связать с файлом на МД или внешнем устройстве. Поток может быть текстовым или бинарным.

Буфер (buffer) представляют собой область ОП, которую используют средствами ввода вывода для промежуточного хранения данных, передаваемых между программой и внешним устройством. Буфер может быть системным. Область памяти, где размещаются системные буферы, принадлежит ОС, а не программе.

Библиотека в/в в С++ включает средства для работы с последовательными файлами и файлами прямого метода доступа. Логически последовательный файл представляет собой цепочку байтов, имеющую начало и конец (перед первым и после последнего байта). Чтение и запись в такой файл идет последовательно байт за байтом от начала к концу. При продвижении от начала к концу каждый байт находится в определенной позиции. Начало файла имеет нулевую позицию, каждая последующая на единицу больше предыдущей позиции. Позиция конца файла равна размеру файла в байтах. В каждый момент обращения к файлу позиции в файле, откуда выполняется чтение и куда производится запись, определяются значениями указателей позиций записи и чтения файла. Позиционирование указателей записи выполняется либо автоматически, либо за счет явного управления их положением.

У всех создаваемых в программе потоков имеются общие поведенческие свойства, поэтому одинаковые средства могут применяться для работы с различными потоками. Отличие потоков определяются спецификой их создания и использования. Рассматривая взаимосвязь файлов с потоками ввода вывода нужно отметить следующие процедуры:

1. создание файла;

2. создание потока;

3. открытие файла;

4. «присоединение» файла с потоку;

5. обмены с файлом с помощью потока;

6. «отсоединение» потока от файла;

7. закрытие файла;

8. уничтожение файла, если это необходимо.

Высоко уровневые средства ввода вывода С++ позволяют работать с текстовыми и бинарными файлами после того как в программе установлена их взаимосвязь с текстовыми и бинарными потоками соответственно.

Файл, рассматриваемый как последовательность строк символов, разделенных непробельными символами, называется текстовым. Кроме символа «пробел » пробельными символами являются специальные символы:

· ‘/t’ – горизонтальная табуляция;

· ‘/v’ – вертикальная табуляция;

· ‘/n’ – новая строка;

· ‘/r’ – возврат каретки;

· ‘/f’ – прогон бумаги до конца страницы;

· ‘/b’ – возврат на один символ;

· ‘/a’ – звуковой сигнал;

· ‘/07’ – звуковой сигнал.

Имя текстового файл состоит из: - пути следования;

- имени;

- расширения txt.

Расширение txt позволяет просматривать содержимое файла при его открытии. При записи в файл в текстовом режиме обмена, каждый символ новой строки ‘/n’ преобразуется в пару символов – в конец строки и начало строки. В процессе чтения из файла каждая пара символов – конец строки и начало строки, преобразуются в ‘/n’. Чтение из файла продолжается до тех пор пока не обнаружен символ конец файла. В этом случае считается, что достигнут конец файла и выполнено условие EOF (End Of File)

Файл называется бинарным, если его рассматривают как последовательность байтов без учета разделения на строки, он сохраняется в машинном коде и не открывается в редакторе, имеет расширение отличное от .txt (.dat). В качестве файлов рассматривают не только именованные участки на дисках, но и любые файловые устройства, с которыми можно осуществлять операции в/в. Не все файлы имеют одинаковые поведенческие свойства. Это связано и с физической реализацией файла. Поэтому при связывании потока с определенным файлом поток приобретает свойства этого файла. Такое поведение позволяет говорить о «записи в поток» и «чтении из потока», что эквивалентно «запись в поток» и «чтение из файла». Если свойства файла конфликтуют со свойствами связываемого потока, то возникает исключительная ситуация – ошибка открытия файла.

Файл состоит из набора однотипных данных называемых элементами. Файл имеет 3 характерные особенности:

1. индивидуальное имя, что дает возможность работать с несколькими файлами в одном программном проекте;

2. все элементы файла одного типа кроме файлового типа;

3. длина файла ограничивается ёмкостью диска.

Имя файла –переменная строкового типа, длина имени файла зависит от операционной системы и состоит из:

[имя диска:] [{\директория}] имя файла . расширение

В квадратных скобках необязательные конструкции. Если опущен путь следования к файлу, то файл создается в текущем состоянии. Имя файла может быть задано константой или переменой, которая может быть инициализирована в момент объявления или чтением с клавиатуры. Полное имя файла можно достичь с помощью конкатенации.



<== предыдущая лекция | следующая лекция ==>
Объявление формальных параметров | Открытие, закрытие и удаление файла.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.