Скачать презентацию Занятие 4 Курс Основы программирования План занятия Скачать презентацию Занятие 4 Курс Основы программирования План занятия

4 Архитектура фон Неймана, массивы.pptx

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

Занятие 4 Курс Занятие 4 Курс "Основы программирования"

План занятия 1. Архитектура фон Неймана 2. Недостатки архитектуры 3. Массивы, индексация 4. int План занятия 1. Архитектура фон Неймана 2. Недостатки архитектуры 3. Массивы, индексация 4. int _ [N] / var _ = [ ]

Основные принципы • Данные и инструкции в одной памяти • Адресность памяти • Программное Основные принципы • Данные и инструкции в одной памяти • Адресность памяти • Программное управление • Двоичное кодирование

Общая схема Память Устройство управления Арифметико-логическое устройство Накопитель Ввод Вывод Общая схема Память Устройство управления Арифметико-логическое устройство Накопитель Ввод Вывод

Адресность памяти • Память состоит из пронумерованных ячеек. Адрес Содержимое 0 … 1 … Адресность памяти • Память состоит из пронумерованных ячеек. Адрес Содержимое 0 … 1 … • В произвольный момент доступна любая ячейка. 2 … 3 … … … 1 073 741 820 … 1 073 741 821 … 1 073 741 822 … 1 073 741 823 … • Для доступа используются номера соответствующих ячеек – адреса. 1 Гбайт

Программное управление • Программа – последовательность команд. • Команды хранятся в ячейках одна за Программное управление • Программа – последовательность команд. • Команды хранятся в ячейках одна за другой и выполняются по порядку. • При необходимости можно изменить порядок выполнения команд – специальной командой. Адрес Содержимое 0 Команда 1 1 Команда 2 2 Команда 3 3 Команда 4 … … 1 073 741 820 … 1 073 741 821 … 1 073 741 822 … 1 073 741 823 …

Данные и инструкции 0 +0 +1 +2 +3 +4 0 jmp 10 3 5 Данные и инструкции 0 +0 +1 +2 +3 +4 0 jmp 10 3 5 2 5 ? – – 10 mov_ax* 2 add_ax* 3 mul_ax 15 6 sub_ax* 4 mov 2_ax 5 20 printc ‘x’ printc ‘=’ printi* 25 5 – – jmp – переход к инструкции в ячейке, номер которой указан mov_ax – скопировать в накопитель указанное число * – взятие содержимого ячейки по её номеру add_ax – увеличить содержимое накопителя на указанное число sub_ax – уменьшить содержимое накопителя на указанное число mul_ax – домножить содержимое накопителя на указанное число mov 2_ax – скопировать из накопителя в указанную ячейку printc – вывести букву на экран printi – вывести указанное число на экран

Двоичное кодирование 0 +0 +1 +2 +3 +4 0 jmp 10 3 5 2 Двоичное кодирование 0 +0 +1 +2 +3 +4 0 jmp 10 3 5 2 5 ? – – 10 mov_ax* 2 add_ax* 3 mul_ax 15 6 sub_ax* 4 mov 2_ax 5 20 printc ‘x’ printc ‘=’ printi* 25 5 – – 0 +0 +1 +2 +3 +4 0 00000001010 00000011 00000101 00000010 5 00000000 0000 10 00000010 00000011 00000100 15 00000110 00000101 00000100 00000110 00000101 20 00000111 00100001 00000111 00100100 00001000 25 00000101 00000000

Реальный пример Реальный пример

Недостатки архитектуры • Ограниченная пропускная способность между процессором и памятью • Скорость работы памяти Недостатки архитектуры • Ограниченная пропускная способность между процессором и памятью • Скорость работы памяти существенно ограничивают скорость работы процессора • Совершенствование систем кэширования порождает множество новых проблем

Массив Несколько переменных под одним именем. • Array – англ. «массив, множество» 12 Обычная Массив Несколько переменных под одним именем. • Array – англ. «массив, множество» 12 Обычная переменная: int x = 12; / var x = 12; X Массив: int a[] = {5, 18, 31, 2}; / var a = [5, 18, 31, 2]; 5 0 a 18 1 31 2 2 3

Зачем нужны массивы? Векторные типы данных: • 2/3/4 D векторы, матрицы, кватернионы и т. Зачем нужны массивы? Векторные типы данных: • 2/3/4 D векторы, матрицы, кватернионы и т. д. function vec 3_length(v 3) { return v 3[0]*v 3[0]+ v 3[1]*v 3[1]+ v 3[2]*v 3[2]; } var vector 3 = [3, 16, 7]; var length = vec 3_length(vector 3); Хранение множеств • Набор строк с именами студентов, список покупок и т. д. var students = [‘Олег’, ‘Маша’, ‘Павел’, ‘Света’]; students. push(‘Андрей’);

Статические и динамические • Статические: размер обязательно задаётся при создании, а затем не может Статические и динамические • Статические: размер обязательно задаётся при создании, а затем не может меняться. Характерно для С. • Динамические: размер определяется количеством элементов, складываемых в массив в процессе работы. Размер меняется автоматически, либо по требованию. Характерно для JS.

Запись в коде С int a[4]; // массив а имеет 4 ячейки int b[] Запись в коде С int a[4]; // массив а имеет 4 ячейки int b[] = {3, 1}; // 2 ячейки int c[]; // ошибка! размер не указан int d; scanf(“%i”, &d); int e[d]; // ошибка! размер не const int f = 7; int g[f]; // ок, 7 ячеек

Запись в коде JS var a; a = []; // теперь а – пустой Запись в коде JS var a; a = []; // теперь а – пустой массив a = [2, 6, 1]; // три ячейки a. push(4); // [2, 6, 1, 4] a. splice(1, 2); // [2, 4] a. splice(1, 0, 3); // [2, 3, 4]

Индексация массива Номер элемента указывается в квадратных скобках после имени массива. По смыслу соответствует Индексация массива Номер элемента указывается в квадратных скобках после имени массива. По смыслу соответствует субскрипту вне программирования: a[0] <-> a 0 var a = [2, 6, 1]; console. log(a[0]+“ ”+a[2]); // “ 2 1” int a[] = {2, 6, 1}; printf(“%i %i”, a[0], a[2]); // “ 2 1”

Связь с циклами Массив можно индексировать переменной – как в JS так и в Связь с циклами Массив можно индексировать переменной – как в JS так и в С. Переменная может быть счётчиком цикла. Так организуется обработка N элементов: var a=[2, 6, 1, 3]; / int a[]={2, 6, 1, 3}; var i = 4; / int i = 4; while( --i / 2 ) { a[i] += a[3 -i]; a[3 -i] = a[i] - a[3 -i]; a[i] += a[i] - a[3 -i]; // обмен : D } // [3, 1, 6, 2]

Сортировка массива чисел 1. Пишем программу сортировки массива пузырьковым методом по убыванию. Понадобится: • Сортировка массива чисел 1. Пишем программу сортировки массива пузырьковым методом по убыванию. Понадобится: • условный оператор ( if( ){} ) • цикл-в-цикле ( for( ){ } } ) • массив: [1, 7, 2, 5, 6, 0, 8, 4, 3, 9] Результат: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Псевдокод а = массив для i = 0, i<10, i++ для j = 0, Псевдокод а = массив для i = 0, i<10, i++ для j = 0, j<9 -i, j++ если a[j] < a[j+1] обменять a[j], a[j+1] Ответ в a.

Домашнее задание 1. Повторить задание, сделанное в классе с использованием любого другого алгоритма сортировки Домашнее задание 1. Повторить задание, сделанное в классе с использованием любого другого алгоритма сортировки на свой выбор. 2. Организовать заполнение массива случайными числами диапазона [0; 100]. Программа выводит индекс первого элемента превышающего значение 90, если такой существует в массиве.