Алгоритмизация циклических процессов.

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

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

Простые циклы.

Для циклов с известным количеством повторений характерно то, что задаются:

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

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

Сложные циклы.

Сложные циклы содержат внутри себя один или несколько других циклов, поэтому одни циклы оказываются включенными в состав других. Циклы, объемлющие (охватывающие) другие циклы, принято называть внешними, а циклы, входящие (включенные) во внешние циклы, - внутренними (вложенными).

При алгоритмизации сложных циклов следует заметить следующие наиболее характерные стороны данного вычислительного процесса:

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

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

В качестве примера, рассмотрим следующий прототип функции:

int foo(int n);

Этот прототип объявляет функцию с именем «foo», которая принимает один аргумент «n» целого типа и возвращает целое число. Определение функции может располагаться где угодно в программе, но определение требуется только в случае её использования.

В C++ в пользовательских функциях доступны параметры по умолчанию.

Пользовательские фун-и ввода и вывода.

В C++ для ввода и вывода данных используются объекты потоковых классов.

Мы уже использовали потоковые объекты для ввода/вывода данных в консольных приложениях. Ключевые слова cout и cin - это обычные объекты. А операторы извлечения из потока >> и вставки в поток << - перегруженные операции классов этих объектов.

Система классов ввода/вывода довольна сложна. Базовым классом является класс ios (от Input/Output Stream - потоковый ввод/вывод). У класса ios довольно много производных классов. На данный момент нас интересует лишь несколько.

cin и cout - объекты классов istream (от Input Stream - поток ввода) и ostream (от Output Stream - поток вывода) соответственно. Именно для этих классов перегружены операторы извлечения и вставки.

14. Указатели в C++

Указатель в C++ – это переменная, хранящая адрес некоторого объекта. Если объект имеет тип T, то указатель на него описывается следующим образом:

T* p;

При объявлении нескольких указателей символ * обязателен перед именем каждой переменной. Так, в объявлении

double* p1, p2, *p3;

Записи T* p и T *p равноценны. Запись T* p обычно читается как
«p принадлежит к типу указатель на T », а запись T *p – как «p является указателем на объект типа T».

Указателю можно присвоить либо значение 0, либо адрес объекта, используя унарный оператор взятия адреса &. Например:

int i,a[10];

int* pi=&i,*pa,*pb=0;

pa=&a[9];

Массив указателей и указатель на массив объявляются следующим образом:

int* b[10]; // массив указателей

int (*paa)[10]=&a; // указатель на массив

Можно также объявить указатель на указатель:

char c;

char* pc=&c;

char** ppc=&pc;

Указатели, инициализированные значением 0, называются нулевыми и ни на что не указывают.

Бывают случаи, когда нас интересует просто значение адреса, а не тип указываемого объекта. С этой целью в язык C++ введены указатели void*, способные хранить адрес любого объекта. В отличие от типизированных указателей, рассмотренных выше, указатели void* называются нетипизированными.

Ссылки в C++

Ссылка в C++ – это альтернативное имя (псевдоним) объекта. Это определение ỳже общего определения ссылки, данного во введении. Запись T& обозначает ссылку на объект типа T. Например, в следующем фрагменте

int i=1;

int& r=i;

объявляется ссылка на переменную i, в результате чего как r, так и i ссылаются на один и тот же объект целого типа. Теперь значение переменной i можно изменить через ссылку r:

r=2; // i получит значение 2

r++; // i получит значение 3

В момент объявления ссылка обязательно должна инициализироваться объектом соответствующего типа. После объявления повторная инициализация ссылки невозможна. Обратите внимание, что для обозначения ссылочного типа используется тот же символ &, что и для оператора взятия адреса. Что именно имеется в виду, ясно из контекста: знак & после имени типа используется для объявления ссылки, в остальных случаях он обозначает оператор взятия адреса. Заметим также, что могут существовать объекты, вообще не имеющие собственного имени; ссылка для них выступает в роли единственного имени и предоставляет единственный способ доступа. Ссылку можно представлять себе как константный указатель, который всегда разыменован. Однако необходимо помнить, что, в отличие от указателя, память под ссылку не выделяется, т. е. сама ссылка не является объектом! Именно поэтому не имеет смысла объявление указателя на ссылку, ссылки на ссылку или массива ссылок: Ссылка же на указатель является распространенной практикой:

int *p;

int*& rp=p;

Ссылочные переменные- это замена указателей в C++. первого типа ссылочных переменных - жёсткие ссылки. Жёсткая ссылочная переменная - это синоним другой переменной. $a = 5; $b = &$a; $a = 8; echo $b; Теперь объясняю, что здесь написано. Вначале мы создаём переменную a, которой присваиваем значение 5. Дальше мы создаём жёсткую ссылку b на переменную a. Затем изменяем переменную a. И ввиду того, что b - это синоним a, у нас изменяется и b тоже. То есть значение одно, а переменных, ссылающихся на это значение, две. Переходим ко второму типу (и последнему) ссылочных переменных в PHP, к символическим ссылкам. Символическая ссылка - это переменная, которая содержит строковое значение с именем другой переменной. Советую вдуматься в это определение, чтобы стало понятно. И сразу пример:

<?php
$a = 17.1;
$b = "a";
echo $$b;
?>

В результате, как не трудно догадаться, вылезет число "17.1". Обратите внимание, что мы использовали конструкцию из двух знаков "$". Такая конструкция добирается до значения переменной, на которую ссылается символическая ссылка.

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

15. Перегрузка функций является особенностью языка C++, которой нет в языке С. Как вы увидите, перегрузка функций достаточно удобна и может улучшить удобочитаемость ваших программ. Перегрузка функций позволяет вам использовать одно и то же имя для нескольких функций с разными типами параметров. Для перегрузки функций просто определите две функции с одним и тем же именем и типом возвращаемого значения, которые отличаются количеством параметров или их типом. Перегрузка функций позволяет вашим программам определять несколько функций с одним и тем же именем и типом возвращаемого значения. Одним из наиболее общих случаев использования перегрузки является применение функции для получения определенного результата, исходя из различных параметров. Перегрузка функций улучшает удобочитаемость программ . Перегрузка функций C++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа*, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции. Что надо знать: 1. Перегрузка функций предоставляет несколько "взглядов" на одну и ту же функцию внутри вашей программы. 2. Для перегрузки функций просто определите несколько функций с одним и тем же именем и типом возвращаемого значения, которые отличаются только количеством и типом параметров. 3. В процессе компиляции C++ определит, какую функцию следует вызвать, основываясь на количестве и типе передаваемых параметров. 4. Перегрузка функций упрощает программирование, позволяя программистам работать только с одним именем функции.


Наши рекомендации