Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bilety_programmirovanie_1-7.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

68. Разрешение неоднозначности при вызове функций.

При разрешении перегрузки функции выполняются следующие шаги:

• Выделяется множество перегруженных функций для данного вызова, а также свойства списка аргументов, переданных функции.

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

• Находится функция, которая лучше всего соответствует вызову.

Рассмотрим последовательно каждый пункт.

На первом шаге необходимо идентифицировать множество перегруженных функций, которые будут рассматриваться при данном вызове.

На втором шаге среди множества кандидатов отбираются устоявшие (viable) – такие, которые могут быть вызваны с данными аргументами.

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

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

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

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

69. Одномерные массивы (объявление, индексация, хранение в памяти, сортировка).

Пример: поиск второго наибольшего по величине значения в массиве.

Массив - это коллекция переменных одинакового типа, обращение к которым происходит с применением общего для всех имени. Массивы представляют собой удобное средство группирования связанных переменных.

Одномерный массив - это список связанных переменных.

Для объявления одномерного массива используется следующая форма записи:

тип имя_массива[размер];

Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и размерностью массива. В языке C/C++ эта информация задается в разделе описаний.

Доступ к отдельному элементу массива осуществляется с помощью индекса. Индекс описывает позицию элемента внутри массива. В C++ первый элемент массива имеет нулевой индекс. Поскольку массив sample содержит 10 элементов, его индексы изменяются от 0 до 9. Чтобы получить доступ к элементу массива по индексу, достаточно указать нужный номер элемента в квадратных скобках. Так, первым элементом массива sample является sample[0], а последним - sample[9].

// Определение второго наибольшего по величине значения в массиве.

//s- второй наибольший

if (a[0]>=a[1])

{

f=a[1];

s=a[2];

}

else

{

f=a[2];

s=a[1];

}

for (i=3; i<5; i++)

{

if (a[i]>f)

{

s=f;

f=a[i];

}

else if (a[i]>s)

s=a[i];

1. Сортировка массива выбором.

Метод основан на поиске наименьшего элемента. Номер этого элемента запоминается, затем его меняют местами с первым элементом. Далее, ищется наименьший элемент среди оставшихся и меняется местами со вторым и т.д.

2. Сортировка перестановками

Метод основан на принципе сравнения и обмена пары соседних элементов до тех пор, пока не будут рассортированы все элементы. Этот метод широко известен как сортировка методом пузырька.

3. Инвертирование массива

Алгоритм заключается в том, чтобы переставить элементы массива в обратном порядке, т.е поменять местами 1-ый элемент с последним, 2-ой – с предпоследним и т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]