- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •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, нельзя пользоваться / и % .
- •Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)
Указатели
Указатель — это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера. Переменная, содержащая адрес другой переменной. Отдельные операции можно сделать только с их помощью, или позволяют более компактно записать код. Стандартное объявление нетипизированного указателя – void * . Используются в тех случаях , когда нужно иметь прямой доступ к памяти.
Объявление: тип *имя; Тип указателя определяет тип объекта, на который указатель будет ссылаться.
Операция & (унарная) даёт адрес объекта. Помещение адреса переменной типа char с в переменную ( указатель) р :
p = &c. Операция применима к объектам оперативной памяти, нельзя использовать для констант и выражений.
Операция * - операция ссылки по указателю (разыменовывания). Ip = &x(x=1). Y = *ip = 1.
Указатели и аргументы функций – чтобы в вызываемой функции изменить значения, передать указатели на переменную. Swap (&a,&b) – void swap(int *x, int *y) { int temp ; temp = *x; *x = *y; *y = temp;}
Массивы
Массив — это набор переменных одного типа, имеющих одно и то же имя. Доступ к конкретному элементу массива осуществляется с помощью индекса.
Объявление: тип имя_переменной [размер];
Одномерный массив — это список, хранящийся в непрерывной области памяти в порядке индексации. Ниже - как хранится в памяти массив а, начинающийся по адресу 1000 и объявленный как int a[8]; Элемент a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
Адрес 1000 1001 1002 1003 1004 1005 1006 1007
Запись а[i] означает i-тый элемент массива.
Связь между указателями и массивами
Int a[10]; int *pa;
Pa = &a[0]- указатель указывает на нулевой элемент массива, содержит адрес а0.
X = *pa. копирует содержимое элемента а0 в х.
Ра+1 указывает на следующий, +I – на итый элемент после ра. *(pa+1) – равно содержимому а1 элемента.
Pa = &a0 или ра = а.
Выражение в виде обращения к массиву по индексу эквивалентно ссылке по указателю со смещением. Pa[i]= *(pa+i). Указатель является переменной (ра = а, pa++), но нельзя (a=pa и a++).
Представление в эвм
* - взять значение по некоторому адресу
*(&x)=x &(*x)=x
Выражение &а позволяет получить адрес участка памяти, выделенной на машинном уровне для переменной а. Операция & применима только к объектам, имеющим имя и размещенным в памяти. Ее нельзя применять к выражениям, константам, битовым полям структур, регистровым переменным или внешним объектам, с которыми может взаимодействовать программа.
Указатель может ссылаться на объекты того типа, который присутствует в определении указателя. Исключение: указатели, в определении которых использован тип void – отсутствие значения. Такие указатели могут ссылаться на объекты любого типа, но к ним нельзя применять операцию разыменования «*».
Создание указателя на массив
Указатель на 1-й элемент массива можно создать путем присваивания ему имени массива без индекса. Например, если есть объявление
int *p;
int sample[10];
p = sample;
В обеих переменных (р и sample) хранится адрес 1-го элемента, отличаются эти переменные только тем, что значение sample в программе изменять нельзя. Адрес первого элемента можно также получить, используя оператор получения адреса &. Выражения sample и &sample[0] имеют одно и то же значение.
