Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на экзамен.docx
Скачиваний:
103
Добавлен:
17.11.2019
Размер:
1.58 Mб
Скачать

27 (15). Алгоритмы сортировки данных.

Ответ:

Сортировка – это упорядочение элементов множества в возрастающем или убывающем порядке.

Алгоритмы сортировки данных:

  1. Пузырьковая сортировка (сортировка обменом) – идет последовательное сравнение элементов начиная с 0 позиции. Если левая позиция больше, чем правая, то меняем местами элементы. Если правый элемент больше, то оставляем все на местах. Происходит пока массив не будет отсортирован.

  2. Сортировка методом выбора – сначала в массиве находится наименьший элемент, и он меняется местами с первым элементом (возможно, и с собой, если первый элемент как раз и есть наименьший). Потом находится следующий наименьший элемент и меняется местами со вторым элементом. Подобное продолжается до упорядочивания всего массива.

  3. Сортировка методом вставки – первый элемент в массиве образует уже отсортированную последовательность. Сравниваем второй элемент с первым. Если порядок между ними нарушен, то элемент передвигается на одну позицию вправо. Теперь отсортированный массив состоит из 2х элементов. Далее, в течении каждой итерации, берем следующий элемент и сравниваем его другими элементами в уже отсортированном списке, начиная с конца этого списка. Если порядок между ними нарушен, то меняем их местами, если нет, то «вставка» нового элемента закончена, переходим к следующему.

  4. Сортировка слиянием – сначала анализируются первые элементы обоих массивов (либо правой и левый массивы основного подмассива). Меньший элемент переписывается в новый массив. Оставшиеся элементы последовательно сравниваются с элементами из другого массива. В новый массив после каждого сравнения попадает меньший элемент. Процесс продолжается до исчерпания элементов одного из массивов. Затем остаток другого массива дописывается в новый массив. Полученный новый массив упорядочен таким же образом, как исходные.

  5. Сортировка Шелла – сравниваются элементы на расстоянии d. Если d = [n/2], то после каждого просмотра шаг d уменьшается вдвое. На последнем просмотре он сокращается до d = 1.

  6. Быстрая сортировка (сортировка Хоара) – фиксируется ключ (опорное, базовое значение) относительно которого все элементы с большим весом перемещаются вправо, а с меньшим – влево. При этом весь список элементов делиться относительно базового ключа на 2-е части. Для каждой части процесс повторяется. Выборы опорного элемента – самый крайний правый; медиана по трем точкам (первого, последнего и среднего).

  7. Пирамидальная сортировка – заключается в построении пирамидального дерева.

28. Работа со строками в C++.

Ответ:

Строка – это последовательность (массив) символов (типа char), которая заканчивается специальным символом – признаком конца строки. Это символ записывается как '\0' (не путайте с символом переноса строки '\n') и равен 0.

При вводе строки символ конца строки добавляется автоматически. Все функции работы со строками – и стандартные, и создаваемые программистом – должны ориентироваться на этот символ. Если требуется сформировать новую строку, то обязательно надо добавлять признак конца строки. Если этого не сделать, то при дальнейшей работе возникнут ошибки.

В языке С++ существует два способа работы со строками:

  • строки с стиле языка C (символьные массивы);

  • класс string.

Пример объявления строк в стиле С: char fish[] = «Bubbles»

Стандартные функции работы со строками (<string.h>):

  • Определение длины строки: int strlen(const char *str);

  • Сравнение строк: int strcmp(const char *str1, const char *str2);

  • Копирование: char *strcpy(char *str1, const char *str2);

  • Конкатенация строк: char *strcat(char *str1, const char *str2);

  • Поиск символа в строке: char *strchr(const char *str, char c);

  • Поиск подстроки: char *strstr(const char *str1, const char *str2);

Ввод/вывод строки:

  • Ввод строки до пробела или другого разделителя: функция scanf с форматом %s;

  • Ввод строки, содержащей пробелы: char *gets (char *buffer);

  • Ввод строки из файла, n задаёт максимальное количество символов для ввода: char *fgets(char *string, int n, FILE *stream);

  • Вывод строки с форматированием: функция printf с форматом %s;

  • Вывод строки: int puts(const char *string);

  • Вывод строки в файл: int fputs(const char *string, FILE *stream);

29 (16). Типы данных языка программирования С++. Синтаксис, операторы, основные особенности.

Ответ:

Алфавит. Множество символов языка C/С++ включает:

  • прописные буквы латинского алфавита;

  • строчные буквы латинского алфавита;

  • арабские цифры;

  • разделители: , . ; : ? ! ' « | / \ ~ _ ^ ( ) { } [ ] < > # % & - = + *

Язык C++ различает большие и маленькие буквы.

Литералы. Литералы в языке C++ могут быть целые, вещественные, символьные и строковые.

  • Целые:

  • десятичные: 10, 132, -32179;

  • восьмеричные (предваряются символом «0»): 010, 0204, -076663;

  • шестнадцатеричные (предваряются символами «0х»): 0хА, 0x84, 0x7db3.

  • Вещественные: 15.75, 1.575e1, .75, -.125

  • Символьные: 'a', 'e', '.', '?', '2'.

  • Строковые: «строка».

Комментарии: /*<символы>*/ и //.

Типы данных.

Тип

Размер в байтах

Диапазон значений

bool

1

true или false

char

1

от -128 до 127

signed char

1

от -128 до 127

unsigned char

1

от 0 до 255

wchar_t

2

от 0 до 65 535

char16_t

2

от 0 до 65 535

char32_t

4

от 0 до 4 294 967 296

short

(short int)

2

от -32 768 до 32 767

signed short

unsigned short

2

от 0 до 65 535

int

4

от -2 147 483 648 до 2 147 483 647

signed int

unsigned int

4

От 0 до 4 294 967 295

long (long int)

4

от -2 147 483 648 до 2 147 483 647

signed long

unsigned long

4

От 0 до 4 294 967 295

float

4

±3.4х10±38, ~7-значная точность

long long

8

- 9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

unsigned long long

8

от 0 до 18 446 744 073 709 551 615

double

8

±1.7х10±308, ~15-значная точность

long double

8

±1.7х10±308, ~15-значная точность

Операторы языка С++.

Оператор

Ассоциативность

::

Левая

() [] ->

Левая

! ~ +(унарный) –(унарный) ++ -- &(унарный) *(унарный) typecase(приведение типа) static_cast dynamic_cast

Reinterpret_cast sizeof new delete typeid decltype

Правая

. *(унарная) ->

Левая

* / %

Левая

+ -

Левая

<< >>

Левая

< <= > >=

Левая

== !=

Левая

&

Левая

^

Левая

|

Левая

&&

Левая

||

Левая

?: (условный оператор)

Правая

= *= /= %= += -= &= ^= |= <<= >>=

Правая

,

Левая