- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •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, нельзя пользоваться / и % .
- •Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)
Перевести отрицательное целое число (он любое может назвать) в дополнительный код.
Взять модуль, перевести в обратный код(инвертирование) и прибавить 1 к младшему разряду.
Есть ли смысл применять метод барьера в поиске подстроки в строке?
Ответ: нет смысла, т.к. в этом случае барьером будет целый образец, который мы ищем, в конце строки поиска. Если образец длинный, нужно выделять много места в строке поиска, а операция проверки теперь состоит не просто из проверки на равенство, а из нескольких проверок на равенство. В общем, чем длиннее образец, который мы ищем, тем меньше смысл в использовании метода барьера. Нет смысла, т.к. от этого мы особо ничего не выиграем.
Дан двумерный массив int A[N][M]. Как с помощью указателя обратиться к элементу A[i][j]?
Ответ: *(A+i *M+j) – не ок.
Ответ: *(*(A+i)+j)
В функцию, которая ищет число в массиве, передаётся массив таким образом:
int func( int A[N], int b )
Можно ли здесь применить метод барьера?
Ответ: нет, т.к. в функцию передаётся массив фиксированного размера, а чтобы применить метод барьера, нужно добавить один элемент к массиву.
Для чего нужен инвариант цикла?
Ответ: для двух целей: для составления правильного цикла и для проверки правильности цикла. Особенно инвариант помогает, если в задаче есть множество всяких математических условий, в практический смысл которых вникать не хочется.
Некоторые говорят, что нужно очень хорошо знать все сортировки. Даже желательно сортировку Шелла и деревом. Всё это есть в Вирте. Есть вопрос на определение сложности какой-нибудь сортировки. То есть нужно уметь вычислять C и M. Всё было на лекциях. Нужно вообще хорошо понимать смысл сложности. Сложности сортировок.
Роль алгоритма оптимального поиска на примере задачи про коммивояжёра.
Сравнить эффективность алгоритмов: простой сортировки, усовершенствованной, бинарного и линейного поиска, алгоритмов поиска подстроки в строке.
Передача и представление в памяти двумерного массива.
Сложность, какой алгоритм сортировки более эффективен.
Почему индексы массива начинаются с 0, а не с 1?
Адрес первой ячейки – А, второй (А+1) и так далее.
В C, имя массива, по существу, указатель, ссылка на ячейку памяти, поэтому массив выражение [n] относится к ячейке памяти н-элементов от начальной элемента. Это означает, что индекс используется в качестве смещения. Первый элемент массива именно содержится в ячейке памяти, которая относится к массиву (0 элементов от), поэтому она должна быть обозначена как массив [0].
Переписывание кр:
Представить число суммой цифр, если сумма больше 10 -считать сумму заново.
int A(long x)
{
int res = 0;
long tmp = x;
while(1)
{
while(tmp > 0)
{
res += tmp % 10;
tmp /= 10;
}
if(res > 10)
{
tmp = res;
res = 0;
}
else
break;
}
return res;
}
Задачи на экзамене:
Размерность типа данных int ( в битах )
minint=1;
while (minint<<1) minint = minint<<1;
maxint = minint - 1;
a = (maxint - minint) + 1;
b = 2;
do {
b *= 2;
sizeint++;
} while (b != a)
Реализация strcmp();
Int strcmp(char *s1, char *s2)
{
While (*s1 || *s2) //пока не дошли до конца
If (*s1-*s2) return (*s1-*s2);
Else
{ s1++; s2++}
Return 0;
}
Возвращает 0, если совпадает, число <0, если s1<s2, >0, если s2>s1.
Палиндром ( из к.р.)(еще два варианта в тетради). (Билет 11)
Int p(long x);
{ long n=x, m=0;
While (n>0)
{
M = m*10 + n%10;
N=n/10;
}
If (m==x) return 0;
Else return 1;}
Вывести все числа в случайном порядке (правая лучше)
Нельзя заменить заголовок второго цикла на n.
Rand()%3+1 от 1 до 3, Rand()% 3 – от 0 до 2
int A[2^(8*sizeof(int))]; // [N]
void printNumbers(int N) {
int i,j, A[N];
int x;
for (i = 0; i < N; i++) {
A[N] = i;
}
j = N;
for (i = 0; i < N; i++) {
x = rand() % j;
printf("%d\n", A[x]);
A[x] = A[j];
j--;
}
}
void rand_print(int N)
{
int i,j,n=N-1;
for(i=o;i<N;i++) A[i]=i;
for(i=0;i<N-1;i++,n--)
{
j=rand();
j%=n;
printf("%d",A[j]);
A[j]=A[n];
}
printf("%d",A[0]);
}
