Скачать презентацию Программирование 1 Лекция 12 Массивы начало 10 11 Скачать презентацию Программирование 1 Лекция 12 Массивы начало 10 11

Л 12 1 Масивы Начало.ppt

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

Программирование 1 Лекция 12 Массивы (начало) 10. 11. 2011 Массивы. Начало 1 Программирование 1 Лекция 12 Массивы (начало) 10. 11. 2011 Массивы. Начало 1

Начальная часть лекции: Краткий обзор предыдущей лекции (завершение темы «Индуктивные функции» ) (лекция не Начальная часть лекции: Краткий обзор предыдущей лекции (завершение темы «Индуктивные функции» ) (лекция не состоялась из-за болезни преподавателя, но материалы были высланы студентам) • Лекция 11 осн часть. ppt • Лекция 11 дополнение анализ текста. ppt 10. 11. 2011 Массивы. Начало 2

Последовательность символов из алфавита X : x 1 x 2 … xn (xi X). Последовательность символов из алфавита X : x 1 x 2 … xn (xi X). См. лекцию 9. Последовательность — это набор элементов некоторого множества: • для каждого натурального числа можно указать элемент данного множества; • это число является номером элемента и обозначает позицию данного элемента в последовательности; • для любого элемента (члена) последовательности можно указать следующий за ним элемент последовательности. Таким образом, последовательность оказывается результатом последовательного выбора элементов заданного множества. И, если любой набор элементов является конечным, и говорят о выборке конечного объёма, то последовательность оказывается выборкой бесконечного объёма. 10. 11. 2011 Массивы. Начало Википедия 3

Отступление «Из математики» Из лекции 9 Определение. Последовательностью называется отображение множества N в некоторое Отступление «Из математики» Из лекции 9 Определение. Последовательностью называется отображение множества N в некоторое заранее заданное множество X. Обозначение. Итак, последовательность есть отображение f множества N во множество X. Значение f есть f(n) или fn. Или xn. Конец отступления 10. 11. 2011 Массивы. Начало 4

Массивы Линейный (или одномерный) массив (вектор*) Математическая модель: Последовательность x 0, x 1, x Массивы Линейный (или одномерный) массив (вектор*) Математическая модель: Последовательность x 0, x 1, x 2, …, xn-1 где xi X для всех i 0. . n-1; X – тип элементов; n – количество элементов последовательности !!! Нумерация от 0 до n-1 n – фиксировано (! в отличие от файла). Форма записи: x[0], x[1], x[2], …, x[n-1] Составное значение: X X X … X = Xn ================================ * комментарий относительно термина «вектор» 10. 11. 2011 Массивы. Начало 5

Индексация Доступ к элементам последовательности (компонентам массива) произвольный - по индексу (индексация): x[i] = Индексация Доступ к элементам последовательности (компонентам массива) произвольный - по индексу (индексация): x[i] = xi для всех i 0. . n-1 Например, x[0] , x[3], x[1001], x[p], … Вычисление индекса (выражения) x [ j + 3*k – 1] Действия: x[j] = 5; z = x[k-2] Примечание. См. слайд 4. На массив можно смотреть как на функцию, заданную таблично. Подобие и различие обозначений: • f(t), f(5), … • x[i], x[5], … Смысл операции x[j] = 5; в этой интерпретации… 10. 11. 2011 Массивы. Начало 6

Описание массива const int n. Max = 10; float а[100]; int b[50]; char ch[n. Описание массива const int n. Max = 10; float а[100]; int b[50]; char ch[n. Max]; typedef int arr [20]; // описание типа arr d; // объявление массива (выделение памяти) int tab[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 10. 11. 2011 Массивы. Начало 7

Индексация и вычисление адреса сonst int n = 100; short a [n]; d +d Индексация и вычисление адреса сonst int n = 100; short a [n]; d +d + i*d 10. 11. 2011 = Adr(a[0]) – адрес первого элемента a[0] 0 1 2 3 i d – количество элементов памяти, занимаемое одним элементом массива Adr(a[i]) = + i*d; Adr(a[i + 1]) = Adr(a[i]) + d; Массивы. Начало 8

Простые примеры действий с массивами (поэлементно) s = 0; for (int i=0; i<n; i++) Простые примеры действий с массивами (поэлементно) s = 0; for (int i=0; i arr[k]) k=i; // k –номер максимального bool p = true; int i = 1; while ((i < n) && p ) { p = (x[i-1] < x[i]); i ++; } // p = ‘последовательность возрастает’ 10. 11. 2011 Массивы. Начало 9

Массивы в качестве параметров функций Передача массива по int sum (const int a[], uns Массивы в качестве параметров функций Передача массива по int sum (const int a[], uns n) адресу { int s = 0; +комментарий for (uns i=0; i arr[k]) k = i; return k; } 10. 11. 2011 Массивы. Начало 10

Массивы в качестве параметров функций int sum (const int a[], uns n) // Предусловие: Массивы в качестве параметров функций int sum (const int a[], uns n) // Предусловие: n < = фактического размера массива { int s = 0; for (uns i=0; i

Что может проверить клиент? Пусть int b[10]; n=5; // а если n=15 ? s=sum(b, Что может проверить клиент? Пусть int b[10]; n=5; // а если n=15 ? s=sum(b, n); Пусть int b[10]; … n=5; n 1 = sizeof(b)/sizeof(int); if (n<=n 1) s=sum(b, n); else … 10. 11. 2011 Массивы. Начало Можно sizeof(b)/sizeof(b[0]) Что здесь гарантируется, а что – нет? 12

Может ли сама «поставляемая» функция проверить предусловие? int sum (const int a[], uns n) Может ли сама «поставляемая» функция проверить предусловие? int sum (const int a[], uns n) // Предусловие: n < = фактического размера массива { int s = 0; ? n 1 = sizeof(a)/sizeof(a[0]); for (uns i=0; i

Альтернатива – передача массива по ссылке const unsigned short Max_n = 20; typedef int Альтернатива – передача массива по ссылке const unsigned short Max_n = 20; typedef int arr 1 [Max_n] ; int sum (const arr 1 &a, uns n) // Предусловие: n < = фактического размера массива { int s = 0; n 1 = sizeof(a)/sizeof(a[0]); for (uns i=0; i

Например uns num. Max (const arr 1 &arr, const uns n) { uns n Например uns num. Max (const arr 1 &arr, const uns n) { uns n 1 = sizeof(arr)/sizeof(arr[0]); uns k = 0; if (n>n 1) {cout << "Range error" << endl; } else { for (uns i=1; iarr[k]) k=i; } } return k; } 10. 11. 2011 Массивы. Начало 15

Замечание На следующей лекции подвести итог по вопросу передачи массивов в качестве аргументов функций. Замечание На следующей лекции подвести итог по вопросу передачи массивов в качестве аргументов функций. Выбор : универсальность или надежность? 10. 11. 2011 Массивы. Начало 16

КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 10. 11. 2011 Массивы. Начало 17 КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 10. 11. 2011 Массивы. Начало 17