Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать
  1. Перевести отрицательное целое число (он любое может назвать) в дополнительный код.

Взять модуль, перевести в обратный код(инвертирование) и прибавить 1 к младшему разряду.

  1. Есть ли смысл применять метод барьера в поиске подстроки в строке?

Ответ: нет смысла, т.к. в этом случае барьером будет целый образец, который мы ищем, в конце строки поиска. Если образец длинный, нужно выделять много места в строке поиска, а операция проверки теперь состоит не просто из проверки на равенство, а из нескольких проверок на равенство. В общем, чем длиннее образец, который мы ищем, тем меньше смысл в использовании метода барьера. Нет смысла, т.к. от этого мы особо ничего не выиграем.

  1. Дан двумерный массив int A[N][M]. Как с помощью указателя обратиться к элементу A[i][j]?

Ответ: *(A+i *M+j) – не ок.

Ответ: *(*(A+i)+j)

  1. В функцию, которая ищет число в массиве, передаётся массив таким образом:

int func( int A[N], int b )

Можно ли здесь применить метод барьера?

Ответ: нет, т.к. в функцию передаётся массив фиксированного размера, а чтобы применить метод барьера, нужно добавить один элемент к массиву.

  1. Для чего нужен инвариант цикла?

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

  1. Некоторые говорят, что нужно очень хорошо знать все сортировки. Даже желательно сортировку Шелла и деревом. Всё это есть в Вирте. Есть вопрос на определение сложности какой-нибудь сортировки. То есть нужно уметь вычислять C и M. Всё было на лекциях. Нужно вообще хорошо понимать смысл сложности. Сложности сортировок.

  2. Роль алгоритма оптимального поиска на примере задачи про коммивояжёра.

  3. Сравнить эффективность алгоритмов: простой сортировки, усовершенствованной, бинарного и линейного поиска, алгоритмов поиска подстроки в строке.

  4. Передача и представление в памяти двумерного массива.

  5. Сложность, какой алгоритм сортировки более эффективен.

  6. Почему индексы массива начинаются с 0, а не с 1?

Адрес первой ячейки – А, второй (А+1) и так далее.

В C, имя массива, по существу, указатель, ссылка на ячейку памяти, поэтому массив выражение [n] относится к ячейке памяти н-элементов от начальной элемента. Это означает, что индекс используется в качестве смещения. Первый элемент массива именно содержится в ячейке памяти, которая относится к массиву (0 элементов от), поэтому она должна быть обозначена как массив [0].

Переписывание кр:

  1. Представить число суммой цифр, если сумма больше 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;

}

Задачи на экзамене:

  1. Размерность типа данных 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)

  1. Реализация 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.

  1. Палиндром ( из к.р.)(еще два варианта в тетради). (Билет 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;}

  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]);

}