- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •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
move( int k; // откуда
int
l; // куда
int
n; // сколько
) {
if (n==1) printf (“Ход %d на
%d”, k, l);
Else
{
Int
t;
t
= 6-k-l; ( или 6/k/l) move(k,t,n-1); move(k,l,1); move(t,l,n-1); }}
Бинарный поиск элемента в массиве
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high) {
mid = (low+high)/2;
if (x < v[mid])
high = mid + 1;
else if (x > v[mid])
low = mid + 1;
else /* found match */
return mid;
}
return -1; /* no match */
Сумма цифр в числе
Int f(int m){ int s=0;
While (m/10) {
S += m%10;
M= m/10; }
S=s+m;
Return s;
Число различных элементов в символьном массиве
int
main() { int
i, count = 0; char
a[] = { "hctrokahhf" }; int
l = strlen(a); qsort(a,
l, sizeof(char), strcmp); for
(int i = 0; i < l; i++) printf("%c",
*(a + i));
for
(i = 1; i <= l; i++) { if
(a[i] != a[i - 1]) count++; } printf("\n%d",
count); system("pause"); }}
{ int i, l;
int k=1;
l=strlen(s);
for(i=1;i<l;i++){
if(*s!=*(s+i)){
k++;
}
if(*s==*(s+i)){
k=0;
}
}
Сгенерировать все перестановки в целочисленном массиве (Билет 1).
void p (int n)
{ int i;
if(n==1){
printf (A);
} return n;
for(i=0;i<n;i++){
swap(&A[n-1], &A[n-1-i]);
p(n-1);
swap(&A[n-1], &A[n-1-i]);
Здесь функция printf выводит массив, а функция swap меняет два элемента массива.
int n;
int b[100]; // массив с числами 1,..., n
void rec(int i)
{ int j, t;
if(i==n)
{ for(i=0; i<n; ++i)
printf("%d%c",b[i],i<n-1?' ':'\n');
return;
}
// подстановка на i-ое место всех элементов с i по n-1
for(j=i; j<n; ++j)
{
t=b[i];
b[i]=b[j];
b[j]=t;
rec(i+1);
}
// восстановление состояния массива
t=b[i];
for(j=i+1; j<n; ++j)
b[j-1]=b[j];
b[n-1]=t;
}
Функция, возвращающая I и j такие, чтобы сумма эл-тов в I-ой строке равнялась сумме в j-ом столбце.
#include <stdio.h>
#define M 5
#define N 4
int MASS[M][N];
int main()
{
int i, j, SUMM_i = 0, SUMM_j = 0, buf = 1, K = 0, Z = 0;
int n;
for (i = 0; i < M; i++)//заполняем массив как нам хочется
for (j = 0; j < N ; j++)
MASS[i][j] = 2 * 2 + 2 * i - 9;
MASS[1][0] = 2; MASS[1][1] = 2; MASS[1][2] = 2; MASS[1][3] = 2;
MASS[0][3] = 2; MASS[1][3] = 2; MASS[2][3] = 2; MASS[3][3] = 2; MASS[4][3] = 0;
for (i = 0; i < M; i++) //пробегаем каждую строку массива
{
n = N - 1;
SUMM_i = 0;
for (j = 0; j < N; j++)
SUMM_i = SUMM_i + MASS[i][j];//сумма элементов i-той строки
while (buf && n >= 0)// пробегаем в цикле все столбцы массива
{
SUMM_j = 0;
for (j = 0; j < M; j++)
SUMM_j = SUMM_j + MASS[j][n];// сумма элементов N-ного столбца
if (SUMM_i == SUMM_j)// если суммы равны, то
{
K = i;//запоминаем индекс строки
Z = n;//запоминаем индекс столбца
buf = 0;
}
n--;
}
}
printf("%d\n%d\n", K, Z);
system("Pause");
}
