- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •3.1. Операторы и блоки.
- •3.2. Оператор if – else
- •3.3. Конструкция else-if.
- •3.4. Оператор switch
- •3.5. Циклы while и for
- •3.6. Цикл do-while
- •3.7. Операторы break и continue
- •3.8. Оператор goto и метки
- •3.9. Оператор return
- •Инвариант
- •Указатели
- •Массивы
- •Связь между указателями и массивами
- •Представление в эвм
- •Создание указателя на массив
- •Инициализация массивов
- •Операции над указателями
- •Замечание! 2 указателя нельзя суммировать, но можно прибавлять константу. Сравнивать допустимо только с указателями того же типа или с null
- •Метод барьера в линейном поиске
- •Метод барьера при быстрой сортировке массива
- •Сортировка методом вставки. В отсортированной части массива последний элемент – барьер.
- •Процедуры
- •Локальные и глобальные переменные
- •Локальные переменные
- •Глобальные переменные
- •Средний и наихудший случай
- •Дополнительно (то же самое)
- •Анализ эффективности алгоритмов не должен зависеть от:
- •Временная сложность алгоритма
- •Некоторые свойства временной сложности алгоритма (функции f(n) )
- •Характеристики рекурсии
- •Виды рекурсии
- •Когда не нужно применять рекурсию
- •Применение эвристик.
- •Метод ветвей и границ (доп. Из Wikipedia)
- •Алгоритм Неймана.
- •Линейный конгруэнтный метод
- •Выбор параметров, выбор модуля и множителя.
- •Сдвиг на несколько символов: Если не совпадает , то сдвигаем образ вправо до последнего его стоп-символа. Если «стоп-символа» вообще нет в образе, то образ смещается за этот символ.
- •Вопросы на экзамен по информатике:
- •Перевести отрицательное целое число (он любое может назвать) в дополнительный код.
- •Есть ли смысл применять метод барьера в поиске подстроки в строке?
- •Задачи на экзамене:
- •Задача о Ханойских башнях
- •Бинарный поиск элемента в массиве
- •Сумма цифр в числе
- •Число различных элементов в символьном массиве
- •Сгенерировать все перестановки в целочисленном массиве (Билет 1).
- •Функция, возвращающая I и j такие, чтобы сумма эл-тов в I-ой строке равнялась сумме в j-ом столбце.
- •Есть одномерный массив целых чисел и нужно построить функцию, получающую на вход вещественное число X и возвращающую индекс элемента, который ближе всего к этому числу.
- •Функция strcpy (char *s1, char *s2) , билет 12.
- •Реализация strcat(); Билет 7.
- •Билет 5. Функция, выдаёт частное и остаток от деления X на y, нельзя пользоваться / и % .
- •Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)
Метод барьера при быстрой сортировке массива
Суть метода состоит в том, что выбирается некоторый элемент - барьер просмотра; затем просматривается массив слева до обнаружения элемента, большего чем барьер, и справа от барьера до обнаружения элемента, меньшего чем барьер, после чего обнаруженные элементы меняются местами. Эта процедура выполняется до тех пор, пока оба просмотра не встретятся в середине барьера. Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
Одной из трудностей данного методы является выбор барьера (медианы). Медианой для n элементов называется элемент, меньший или равный половине из n элементов и больший или равный другой половине из n элементов.(В отсортированном массиве стоит посередине).
Сортировка методом вставки. В отсортированной части массива последний элемент – барьер.
Такой случай повторяющегося процесса с 2 условиями окончания позволяет использовать метод барьера, поставить барьер а(0) = х. Тогда между j=I и x=a[i] вставить a[0]=x; и можно убрать проверку условия j>0. Расширить диапазон в A[n+1].
for (i=1;i<=N-1; i++)
{ j=i;
x=A [i];
while (( j>0)&&(x<A[ j-1 ])) //Пока не дошли до левого конца и пока элемент меньше предыдущего.
{ A [ j ]=A[ j-1 ]; //Ищем место, раздвигаем
J --;
}
A[ j ]=x;
}
Билет 7. Процедуры и функции в С.
Функция разбивает большие вычислительные задачи на набор маленьких и позволяет программистам пользоваться разработками предшественников. Так же функция позволяет скрыть детали реализации программы, избежав нежелательного вмешательства одной части программы на другую.
Функция в общем виде:
Возвр_тип имя_функции(список_параметров)
{
Тело_функции
}
«Список параметров» можно и не писать вообще, что равносильно написанию в скобках слова «void». Так же в список параметров может входить множество одинаковых по типу переменных. f ( int i, int k, int j) /* правильное объявление*/
f ( int i, k, float j) /* неправильное, у переменной k должен быть
собственный спецификатор типа */
Возвращение значение в функцию «return»
Если функция не определена словом void (т.е. не является процедурой), то в нее можно вернуть некоторое значения. Осуществляется это с помощью оператора return(выражение); - скобки не обязательны. Кроме возвращения значения, return служит немедленных выходом из функции ( передачи управления в вызывающую функцию без передачи значения).
Виды функций: 1) Простые вычисления. Пример: sqrt(), sin() – выполняют операции над своими аргументами. 2) Функции, которые обрабатывают информацию и возвращают значения, которые показывают, успешно ли была выполнена операция. 3) Процедуры (функции, у которых нет явно возвращаемых значений). Пример: exit().
Процедуры
- функции, у которых нет явно возвращаемых значений.
Void a(int x, int y) { … } – процедура. int a(int x, int y) { … } – функция. dummy () {} ; - функция-заглушка. Ничего не делает и ничего не возвращает. В том месте, где должно быть что-то,но его нет.
Формальные и фактические параметры функции.
Те параметры, что написаны в тексте процедуры, называются формальными, а те, которые пишутся в вызывающей программе - фактическими. При вызове процедуры или функции формальным параметрам ставятся в соответствие фактические.
Формальный параметр — аргумент, указываемый при объявлении или определении функции.
Фактический параметр — аргумент, передаваемый в функцию при ее вызове;
Int func(int a); - формальный параметр а, может отсутствовать. // описание функйии
Int func(int b) //формальный параметр, имя параметра может не совпадать с указанным при объявлении функции
{
Return 0;
}
int main()
{
int c=0;
myfunction(c); // Вызов функции. c - фактический параметр.
return 0;
}
Порядок и типы формальных параметров должны быть одинаковыми в определении функции и во всех ее объявлениях. Типы фактических параметров при вызове функции должны быть совместимы с типами соответствующих формальных параметров. Тип формального параметра может быть любым основным типом, структурой, объединением, перечислением, указателем или массивом. Если тип формального параметра не указан, то этому параметру присваивается тип int.
Передача параметров в функцию:
Вызов по значению .
При вызове по значению, выражение-аргумент вычисляется, и полученное значение связывается ] с соответствующим формальным параметром функции (обычно посредством копирования этого значения в новую область памяти). При этом, если язык разрешает функциям присваивать значения своим параметрам, то изменения будут касаться лишь этих локальных копий, но видимые в месте вызова функции значения останутся неизменными по возвращении.
Системы типов некоторых языков, использующих вызов по значению и непосредственно не поддерживающих вызов по ссылке, предоставляют возможность явно определять ссылки (объекты, ссылающиеся на другие объекты), в частности, указатели (объекты, представляющих собой адреса других объектов в памяти ЭВМ). Их использование позволяет симулировать вызов по ссылке внутри семантики вызова по значению. Такое решение применяется, например, в языках Си и ML. Оно не является самостоятельной стратегией вычисления — язык по-прежнему вызывает по значению. Симуляцию вызова по ссылке в языке Си. Переменные целого типа и указатели передаются по значению. Но так как указатель содержит адрес внешней переменной, её значение изменится.
