Скачать презентацию Основы программирования Синтаксис С Лекция 3 Синтаксис Скачать презентацию Основы программирования Синтаксис С Лекция 3 Синтаксис

0-3.pptx

  • Количество слайдов: 56

Основы программирования Синтаксис С++ Лекция 3 Основы программирования Синтаксис С++ Лекция 3

Синтаксис С++ Набор символов языка C++ включает в себя почти все возможные символы ASCII. Синтаксис С++ Набор символов языка C++ включает в себя почти все возможные символы ASCII. В С++ различается регистр. Например: «int absolute. Value; » и «int Absolute. Value; » – разные идентификаторы. Лишние пробелы при записи программы (за редким исключением) игнорируются, используются обычно программистом для улучшения читаемости кода. Например: « int z=5*5*5; » и «int z = 5* 5 * 5 ; » значат одно и то же. Строки, начинающиеся с // игнорируются при компиляции, часть строки, находящаяся после // игнорируется. Текст, находящийся между /* и */, включая сами ограничители, игнорируется. Например: main() { printf(“Hello world!”); // здесь может быть ваша реклама! }

С++: ключевые слова Эти слова нельзя использовать в качестве идентификаторов Управление потоком и прочее С++: ключевые слова Эти слова нельзя использовать в качестве идентификаторов Управление потоком и прочее break case continue default do else false for goto if return sizeof switch true typedef while Типы и свойства типов auto char class const double enum extern float int long register short signed static struct union unsigned void volatile

Система типов С++ Для числовых данных Целые значения int С плавающей точкой double В Система типов С++ Для числовых данных Целые значения int С плавающей точкой double В зависимости от нужд программиста имеется система модификаторов, применяемых вместе с данными типами: signed / unsigned и long / short. Первые определяют интерпретацию знакового бита числа (unsigned int способен хранить значения в диапазоне от 0 до 4294967296, а int от -2147483648 до 2147483647). Модификатор signed / unsigned не меняет размера выделяемой памяти. Модификатор short / long управляет диапазоном возможных значений и изменяет размер выделяемой памяти. Для short double принято ключевое слово float, short то же самое, что short int. Замечание: long int то же самое, что просто long, для long double нет отдельного ключевого слова. Для строковых типов char (на самом деле всегда можно представить себе обычное целое в диапазоне от 0 до 255, помните, типы – это лишь договор об интерпретации байтов памяти. Для типов char возможно применение модификатора signed / unsigned). Да и нет – логические операции bool (допустимо true или false, но на самом деле выделен 1 байт памяти = искусственный тип! Запомните, при вычислении логических выражений целочисленный 0 приравнивается к false, ложь; а любое отличное от 0 значение к true, правде!)

Система типов С++ Типы могут использоваться в сочетании с модификаторами: const long int x Система типов С++ Типы могут использоваться в сочетании с модификаторами: const long int x = 10000000; unsigned short int y = 100; const char* message = “This is a text”; и даже const int* const p = &x; short m = 3; // тоже, что и short int m = 3; float p = 1. 2;

Операторы С++ Список операторов С++: http: //ru. wikipedia. org/wiki/%D 0%9 E%D 0%BF%D 0%B 5%D Операторы С++ Список операторов С++: http: //ru. wikipedia. org/wiki/%D 0%9 E%D 0%BF%D 0%B 5%D 1 %80%D 0%B 0%D 1%82%D 0%BE%D 1%80%D 1%8 B_%D 0% B 2_C_%D 0%B 8_C%2 B%2 B#. D 0. 9 F. D 1. 80. D 0. B 8. D 0. BE. D 1. 80. D 0. B 8. D 1. 82. D 0. B 5. D 1. 82. D 1. 8 B_. D 0. BE. D 0. BF. D 0. B 5. D 1. 80. D 0. B 0. D 1. 82. D 0. BE. D 1. 80. D 0. BE. D 0. B 2 Арифметические: * умножение / деление - вычитание или замена знака + сложение *=, /=, -=, += они же, но с присваиванием. Например: int a=5, b=10; a+=10; // теперь а=15 b=-a+a; // b=0 a*=(-b+a); Также С++ имеет два «стильных» оператора, инкремент и декремент. Например: a++ тоже самое, что a=a+1 или a+=1 a-- тоже самое, что a=a-1 или a-=1 Логические: && и || или ! не == равенство != неравенство > больше < меньше >= больше либо равно <= меньше либо равно Например: bool a=true, b=false, c=true; a=!a; // теперь a ложь b=a&&a; // b правда (a&&b)||c; a&&b&&c&&(a||b); a||(!b&&a||!a); //постарайтесь определить значения последних 3 выражений. На практике придется довольно часто составлять такие условия.

Операторы С++ Управления памятью: new – выделяет блок delete – удаляет блок & - Операторы С++ Управления памятью: new – выделяет блок delete – удаляет блок & - взять адрес * - использовать значение по адресу (“dereferencing” указателя) Например: int a=10; int* b = &a; // тут * - не оператор, //а часть типа (int*) – «указатель на целое» *b=100; // теперь a =100, b указатель на a; b+=1; // теперь a=100; b указатель на 32 //бита, следующие за а. Вызовы: [ ] взятие индекса массива ( ) вызов функции -> выбор по указателю. выбор по ссылке (самые используемые операторы объектно-ориентированного программирования)

Основы программирования Классы памяти, массивы, указатели. Лекция 3 Основы программирования Классы памяти, массивы, указатели. Лекция 3

Массивы Набор однотипных объектов а 0 а 1 а 2 а 3 а 4 Массивы Набор однотипных объектов а 0 а 1 а 2 а 3 а 4 H e l l o char a[] = “Hello world!”; w? индекс 6. a[11] = ‘? ’ a[6] а 5 а 6 а 7 а 8 а 9 а 10 а 11 w o r l d !

Массивы int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, Массивы int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, 300}; а 0 а 4 а 8 а 12 а 16 а 20 а 24 а 28 а 32 а 36 а 40 а 44 7 8 80 800 1000 1 2 3 0 100 200 300 b[3] то же, что «int x=800; » , но без идентификатора! почему мы можем обратиться к b[3]? (почему мы не обязаны сказать b[‘a 12’])? или b[3*sizeof(int)]?

Указатели а 0 а 4 а 8 а 12 а 16 а 20 а Указатели а 0 а 4 а 8 а 12 а 16 а 20 а 24 а 28 а 32 а 36 а 40 а 44 7 8 80 800 1000 1 2 3 0 100 200 300 Указатель b a 80 a 0 Обычная переменная: 1) имеет идентификатор 2) имеет адрес в памяти 3) содержит адрес памяти 4) всегда 32 (64) бита!

Система типов С++ дает возможность создать пользовательские типы данных. Ключевое слово class. Общая таблица Система типов С++ дает возможность создать пользовательские типы данных. Ключевое слово class. Общая таблица типов С++ Тип Указатель на тип Ссылочный тип int* int& double* double& char* char& bool* bool& void* void& . . my_type* my_type& Другими словами, для каждого типа предусмотрен свой ссылочный тип (который мы обсудим позже) и свой тип-указатель.

Указатели int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, Указатели int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, 300}; а 0 а 4 а 8 а 12 а 16 а 20 а 24 а 28 а 32 а 36 а 40 а 44 7 8 80 800 1000 1 2 3 0 100 200 300 Указатель b a 80 a 0 printf(“%i ”, ? ? ); *b b 7 2242345 *b+1 8 *(b+1) 8 *b+2 9 *(b+2) 80

Указатели int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, Указатели int b[] = {7, 8, 800, 1000, 1, 2, 3, 0, 100, 200, 300}; а 0 а 4 а 8 а 12 а 16 а 20 а 24 а 28 а 32 а 36 а 40 а 44 7 8 80 800 1000 1 2 3 0 100 200 300 Указатель b a 80 Конструкция b[i] полностью аналогична *(b+i) a 0 * у имени типа – заявляет об объявлении типа указателя! * в выражении – оператор умножения * перед идентификатором(именем) переменной-указателя заявляет о работе со значением, на которое указывает адрес памяти, содержащийся в указателе

Зачем вообще указатель? Не все переменные хотят иметь уникальное имя! int my_big_array_of_integers[10000]; my_big_array_of_integers[100] = Зачем вообще указатель? Не все переменные хотят иметь уникальное имя! int my_big_array_of_integers[10000]; my_big_array_of_integers[100] = 6975059; my_big_array_of_integers[1] = 8674445; *my_big_array_of_integers = 10; *(my_big_array_of_integers+5) = 20;

Синтаксис С++ Функция – блок кода, выполняющий определенную операцию также основная форма контроля потоком Синтаксис С++ Функция – блок кода, выполняющий определенную операцию также основная форма контроля потоком управления объявление функции тип ИМЯ (тип аргумент 1, тип аргумент 2 … тип аргумент N ) тип данных, возвращаемый функцией каждый аргумент задается как тип данных и локальное имя, представляющее этот аргумент внутри кода функции int Slozhenie_2_chisel(int a, int b) { return a+b; } int z; z = Slozhenie_2_chisel(10, 100); теперь z имеет значение 110 z равно 0 (неявно)

Функция С++ По сути функция – самостоятельная программа! int main() { } printf(. . Функция С++ По сути функция – самостоятельная программа! int main() { } printf(. . . ) { . . . } void swap(int a, int b) { ХОЧУ МЕНЯТЬ МЕСТАМИ ЗНАЧЕНИЯ 2 ПЕРЕМЕННЫХ }

Функция С++ По сути функция – самостоятельная программа! void swap(int a, int b) {. Функция С++ По сути функция – самостоятельная программа! void swap(int a, int b) {. . . } Область видимости Участок программы, где действительна связь между адресом памяти и идентификатором (именем) переменной Проектируя функцию swap, вы НЕ должны больше заботиться о том, используется ли уже где-то идентификатор a или b.

Режим передачи значений По сути функция – самостоятельная программа! int main() { int b Режим передачи значений По сути функция – самостоятельная программа! int main() { int b = 100; int z = 200; int y = 300; swap(z, y); } void swap(int a, int b) {. . . } Память программы b z y a 1 a 2 a 3 a 4 100 200 300 a 5 a 6 a 7 a 8 a 9

Режим передачи значений По сути функция – самостоятельная программа! int main() { int b Режим передачи значений По сути функция – самостоятельная программа! int main() { int b = 100; int z = 200; int y = 300; swap(z, y); } void swap(int a, int b) {. . . } Память программы b z y a a 1 a 2 a 3 a 4 a 5 100 300 200 300 видимость main b 200 a 6 видимость swap a 7 a 8 a 9

Управление потоком В С++ операторы можно группировать в смысловые блоки. Блоки ограничены фигурными скобками: Управление потоком В С++ операторы можно группировать в смысловые блоки. Блоки ограничены фигурными скобками: { }. Операторы внутри блока выполняются последовательно, блоки выполняются как единые модули. Функция – базовая единица управления. Фактически, это именованный блок операторов. Блок из 3 операторов (2 вызова функции, 1 инкремент) { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Далее в программе блок каждый раз повторяется. Это выглядит ужасно! int i = 10; { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } printf(“And do it once more!”); { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Сделаем из него функцию void Print. And. Increment_i( ) { printf(“Hi, let us print the value of i: %i”, i); printf(“And then increment i”); i++; } Если мы определили функцию, программа станет красивой! int i = 10; Print. And. Increment_i( ); printf(“And do it once more!”); Print. And. Increment_i( ); // and again and so on…

Управление потоком Блок или один оператор можно выполнять много раз циклы Выполняет блок, пока Управление потоком Блок или один оператор можно выполнять много раз циклы Выполняет блок, пока проверка условия дает true. Примечание! Изменение переменной происходит в цикле for по выполнения последнего оператора блока for(начальные значения; проверка условия; изменение переменной) { } while(проверка условия) { } Например: //создадим массив из 100 целых, заполним //его единицами int my_array[100]; for(int k=0; k < 100; k++) my_array[k]=1; printf(“Done!”); // заметим отсутствие { }, когда 1 оператор // printf выполняется 1 раз!!! // то же, но с while int my_array[100]; int j=0; while(j< 100) { my_array[k]=1; j++; // не забывайте увеличивать j, иначе //вечный цикл } printf(“Done!”);

Управление потоком Условное исполнение блока if(условие выполняется) { } Блок (или 1 оператор) выполняется, Управление потоком Условное исполнение блока if(условие выполняется) { } Блок (или 1 оператор) выполняется, если условие true, в противном случае блок пропускается if(условие выполняется) { } else { } Блок (или 1 оператор) выполняется, если условие true, в противном случае выполняется блок после else. if(условие выполняется) { } else if(другое условие) { } else { } Блок (или 1 оператор) выполняется, если условие true, в противном случае проверяется другое условие, если true, выполняется блок после else if, если нет, то блок после else. Конструкция if… else может содержать любое количество блоков с else if, проверяющих разные логические выражения последовательно. Выполняется либо один или несколько блоков if / else if, либо блок else (если все условия блоков if не верны).

Заголовочные файлы Директивы препроцессора #include указывает компилятору, что перед выполнением компиляции следует заменить ее Заголовочные файлы Директивы препроцессора #include указывает компилятору, что перед выполнением компиляции следует заменить ее на текст файла, указанного этой директивной Стандартные библиотеки С++ содержат ряд важнейших функций и структур данных: управление вводом и выводом; файловые операции; контейнеры; алгоритмы и прочее. #include // выключить в программу библиотеку ввода-вывода С, которая содержит функции printf(), scanf() для чтения и записи информации в консоли, а также их аналоги для работы с файлом fprintf(), fscanf(). #include // математические функции #include // функции API среды системы Windows, например, функция system(), которая выполняет системные команды строки. и многие другие файлы, о которых мы еще поговорим.

Функция fprintf() Первый аргумент – указатель на поток Идея: «ПОТОК» - некая последовательность (большой Функция fprintf() Первый аргумент – указатель на поток Идея: «ПОТОК» - некая последовательность (большой одномерный массив) «УКАЗАТЕЛЬ» -на текущее положение в потоке. 1. Создать поток из файла (функция fopen()), чтобы читать или записывать данные в файл. Передать указатель на поток (его возвращает функция fopen()) функции fscanf для чтения, или fprintf() для записи данных. В случае вывода на экран (экран-то один) поток экрана уже считается открытым, поэтому printf() и scanf() не имеют этого аргумента. 2. После работы функции fprintf() / fscanf() / printf() / scanf() указатель на поток смещается на количество байт, записанное функцией. Второй аргумент – строка форматированного ввода. Данные, только что записанные fprintf() Новое положение указателя в потоке Она формируется из указанной вами строки, в которой все символы %x (где x – спецификатор формата) заменяются на значения аргументов функции с 3 по n. Таким образом, сама функция (f)printf(. . . ) имеет 2+k = n аргументов, если в строке указаны k символов %. %i – интерпретировать аргумент как int %s – интерпретировать аргумент как char* (строка) %f – интерпретировать аргумент как float и т. д.

Официальный пример /* fscanf example */ #include <stdio. h> int main () { char Официальный пример /* fscanf example */ #include int main () { char str [80]; // массив достаточной длины, чтобы записать строку “PI, TEST” float f; // место в памяти для числа с плавающей точкой FILE * p. File; // указатель на объект типа FILE (тип FILE пользовательский и описан в stdio. h) p. File = fopen ("myfile. txt", "w+"); // функция fopen откроет поток в файл “myfile. txt” из каталога программы // если файла нет, его создаст. И вернет указатель на поток, в начало файла fprintf (p. File, "%f %s", 3. 1416, "PI"); // запишет в файл форматированную строку «число с плавающей точкой-пробел-строка» // используется два %, следовательно нужно дать 2 аргумента, первый из которых // интерпретируется как float, второй как char* (строка = массив из символов char) // Тонкий момент: “PI” – на самом деле массив char из 3 элементов! ‘P’, “I’, “’ // Поэтому вместо %s запишется содержимое памяти по char*, начиная с адреса // ‘P’ и пока в памяти не встретится ‘’. rewind (p. File); // перемотка – вернуть указатель потока в начало файла! fscanf (p. File, "%f", &f); // теперь чтение. Читаем 8 байт и интерпретируем как float, записываем в память по // адресу, где создалась наша f (в стеке, автоматически). Указатель p. File увеличится на 8 // байт fscanf (p. File, "%s", str); // Читаем теперь строку fclose (p. File); // Закрываем поток (а в папке с нашей программой теперь есть файл myfile. txt) printf ("I have read: %f and %s n", f, str); // Выводим на экран строку return 0; }

Алгоритмы: анализ. Алгоритмы: анализ.

Сортировка Алгоритмы Скорость работы Стабильность Вставкой (insertion sort) n / n^2 + Выбором (selection Сортировка Алгоритмы Скорость работы Стабильность Вставкой (insertion sort) n / n^2 + Выбором (selection sort) n^2 / n^2 - Объединением (merge sort) nlog(n) / nlog(n) + Быстрая (quick sort) nlog(n) / n^2 -* Шелла (Shell sort) n / n(log(n))^2 - Пузырьковая (Bubble sort) n / n^2 +

from Wikipedia. com from Wikipedia. com

Сортировка 2 4 1 5 8 7 3 6 Сколько сравнений нужно выполнить? 2 Сортировка 2 4 1 5 8 7 3 6 Сколько сравнений нужно выполнить? 2 1 2 4 1 5 8 7 3 6 +4 +1 1 2 4 5 8 7 3 6 +6 +1 1 2 4 5 8 7 3 6 1 2 3 4 5 8 7 6 1 2 3 4 5 6 8 7 1 2 3 4 5 6 7 8 +5 2 2 4 1 5 8 7 3 6 1 2 4 1 5 8 7 3 6 +1 ∑= 28 сравнений +4 +3 +2 +1

Сортировка 2 4 1 5 8 7 3 6 Сравнивать меньше? Легко! 2 4 Сортировка 2 4 1 5 8 7 3 6 Сравнивать меньше? Легко! 2 4 1 5 8 7 3 6 2 4 1 5 8 7 3 6 7 8 3 6 +4 2 4 1 5 +3 +3 1 2 4 5 3 6 7 8 +7* 1 2 3 4 5 6 7 8 ∑= 17 сравнений

Сортировка Задача: отсортировать 10 000 целых чисел. Сортировка выбором Сортировка слиянием? N сравнений Какова Сортировка Задача: отсортировать 10 000 целых чисел. Сортировка выбором Сортировка слиянием? N сравнений Какова «высота» дерева? На j-том шаге какое количество подзадач существует и какова их сложность? Высота 50 000 Подзадач размером 132 877

Reduction and Indirection (Сведение и посредничество) 1. Indirection. Обращение к переменной через ее идентификатор. Reduction and Indirection (Сведение и посредничество) 1. Indirection. Обращение к переменной через ее идентификатор. На самом деле есть адрес байта и значение по этому адресу. C++ компилятор max_value=9; Память ID address Address Value max_value a 1232144 9 2. Indirection. Трансляция виртуального адреса в физический. виртуальная память устройство управления памятью физическая память ID V address V ADDR P address Value max_value a 1232144 0 x 435 fd 532 9

Reduction and Indirection 1 -d search problem Одномерный поиск Дан массив элементов (пар ключ-значение, Reduction and Indirection 1 -d search problem Одномерный поиск Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 5 4 23 7 8 9 1 0 13 17 19 31 26 22 27 15 25 33 34 3

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 5 4 23 7 8 9 1 0 13 17 19 31 26 22 27 15 25 33 34 3 сортировка 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 6

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 6 9 10 11 12 13 14 15 16 17 18 19

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 6 9 10 11 12 13 14 15 16 17 18 19

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 6 9 10 11 12 13 14 15 16 17 18 19

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 6 9 10 11 12 13 14 15 16 17 18 19

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 25

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 25

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 25

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 25

1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив 1 -d search problem Дан массив элементов (пар ключ-значение, оно же индекс-число). Задача: получив значение, проверить, есть ли в массиве ключ с таким значением. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 25 Пусть есть 2 миллиона ключей. Тогда 1 d Search займет 21 сравнение. 2 млн. ключей, 2 млн. запросов: 4* 10 ^ 12 – наивный алгоритм (4 000 000) 84 * 10 ^ 6 – 1 d search (84 000)

Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34

Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 4 3 19 11 7 13 17 1 0 9 10 11 12 13 14 15 16 17 18 19 10 12 15 8 16 2 5 18 9 6 14

Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 Random shuffle Дан упорядоченный массив элементов, нужно случайно перемешать их. 0 1 2 3 4 5 6 7 8 0 1 3 4 5 7 8 9 13 15 17 19 22 23 25 26 27 31 33 34 4 3 19 11 7 13 17 1 0 9 10 11 12 13 14 15 16 17 18 19 10 12 15 8 16 2 5 18 9 6 14 sort 0 1 3 4 5 13 9 25 1 0 26 33 5 22 31 15 4 0 2 4 5 8 1 2 3 6 6 7 7 8 9 9 10 11 12 13 14 15 16 17 18 19 17 7 34 19 23 8 27 3 10 11 12 13 14 15 16 17 18 19

Вставочная сортировка Вставочная сортировка

Выборочная сортировка Выборочная сортировка

Пузырьковая сортировка Пузырьковая сортировка

Сравнения пызурьковая вставкой выбором Сравнения пызурьковая вставкой выбором

Сравнения пызурьковая вставкой выбором Сравнения пызурьковая вставкой выбором

Сортировка слиянием Сортировка слиянием

Быстрая сортировка Быстрая сортировка

Функции и библиотеки: Open. GL (Open Graphics Library)[2] is a cross-language, multi -platform application Функции и библиотеки: Open. GL (Open Graphics Library)[2] is a cross-language, multi -platform application programming interface (API) for rendering 2 D and 3 D computer graphics. The API is typically used to interact with a Graphics processing unit (GPU), to achieve hardware-accelerated rendering. Open. GL was developed by Silicon Graphics Inc. (SGI) from 1991 and released in January 1992[3] and is widely used in CAD, virtual reality, scientific visualization, information visualization, flight simulation, and video games. Open. GL is managed by the non-profit technology consortium Khronos Group. Wikipedia