Скачать презентацию Массивы 1 Свойства массивов 2 Скачать презентацию Массивы 1 Свойства массивов 2

oap_6(Массивы).ppt

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

Массивы Массивы

► 1. Свойства массивов ► 2. Формат объявления ► 3. Инициализация ► 4. Генерация ► 1. Свойства массивов ► 2. Формат объявления ► 3. Инициализация ► 4. Генерация случайных чисел ► 5. Работа с массивом ► 6. Поиск в массиве

Массивы (arrays) ► Массив – это группа связанных друг с другом элементов одного типа Массивы (arrays) ► Массив – это группа связанных друг с другом элементов одного типа (double, float, int и т. п. ) последовательно расположенных в памяти.

► Идентификатор ► Число – имя массива элементов – размер массива ► Индекс – ► Идентификатор ► Число – имя массива элементов – размер массива ► Индекс – порядковый номер элемента в массиве, целое число для доступа к элементу

1. Свойства массива ► нельзя задавать статический массив переменного размера (только константой) ► обращение 1. Свойства массива ► нельзя задавать статический массив переменного размера (только константой) ► обращение к элементам массива - по индексу ► индексы начинаются с 0 ► если список инициализации короче размера массива, то оставшимся присваивается 0 ► Элементами массива не могут быть функции ► Элементы массива не могут быть типа void.

2. Формат объявления массива спецификатор-типа описатель [константное - выражение]; спецификатор-типа описатель [ ]; Пример: 2. Формат объявления массива спецификатор-типа описатель [константное - выражение]; спецификатор-типа описатель [ ]; Пример: 31 целое число int temps[31]; 1 2 3 4 temps[0] temps[1] temps[2] temps[3]……

0 1 2 3 temps[0] temps[1] temps[2] temps[3]…… индексом (subscript), 0 1 2 3 temps[0] temps[1] temps[2] temps[3]…… индексом (subscript),

Нумерация элементов массива начинается с нуля и заканчивается n – 1, где n – Нумерация элементов массива начинается с нуля и заканчивается n – 1, где n – число элементов массива.

Элементы массива занимают один непрерывный участок памяти компьютера и располагаются последовательно друг за другом Элементы массива занимают один непрерывный участок памяти компьютера и располагаются последовательно друг за другом

const int array_size =100; int arr[array_size]; int array_size; int arr[array_size]; const int array_size =100; int arr[array_size]; int array_size; int arr[array_size];

3. Инициализация массивов а. при его определении: инициализация списком значений или выражений int temps[5] 3. Инициализация массивов а. при его определении: инициализация списком значений или выражений int temps[5] = {45, 56, 12, 98, 12}; мы создали пять элементов temps[0] 45 temps[1] 56 temps[2] 12 temps[3] 98

int temps[5] = {45, 56, 12}; int temps[2] = {45, 56, 12}; static float int temps[5] = {45, 56, 12}; int temps[2] = {45, 56, 12}; static float prices[3] = {23. 45, 34. 56, 12. 34}; float prices[] = {23. 45, 34. 56, 12. 34};

► Если массив явно не проинициализирован, то внешние и статические массивы инициализируются нулями. ► ► Если массив явно не проинициализирован, то внешние и статические массивы инициализируются нулями. ► Автоматические массивы после объявления ничем не инициализируются и содержат неизвестную информацию.

когда значение элементу массива не было присвоено, он так же, как и любая переменная, когда значение элементу массива не было присвоено, он так же, как и любая переменная, будет иметь своим значением некий «мусор» .

б. Отдельным элементам массива можно присваивать значения temps[0] = 45; б. Отдельным элементам массива можно присваивать значения temps[0] = 45;

в. когда число элементов известно заранее, используйте цикл for и ввод с клавы в. когда число элементов известно заранее, используйте цикл for и ввод с клавы

г. Заполнение случайными значениями г. Заполнение случайными значениями

4. Генерация случайных чисел i = rand () ; Функция rand генерирует целое число 4. Генерация случайных чисел i = rand () ; Функция rand генерирует целое число в диапазоне от 0 до RAND_MAX (символическая константа, определенная в заголовочном файле ).

i = rand () % 6 ; // генерирует случайное число от 0 до i = rand () % 6 ; // генерирует случайное число от 0 до 5 Масштабирование , число 6 - масштабирующий коэффициент

Для рандомизации необходимо использование стандартной библиотечной функции srand((unsigned)time(NULL)); Функция time (с аргументом NULL) возвращает Для рандомизации необходимо использование стандартной библиотечной функции srand((unsigned)time(NULL)); Функция time (с аргументом NULL) возвращает текущее «календарное время» в секундах.

5. Работа с массивами Пример ► по элементам массива вычисляется среднее арифметическое значение ► 5. Работа с массивами Пример ► по элементам массива вычисляется среднее арифметическое значение ► массив используется для перевода значений температуры из шкалы Фаренгейта в шкалу Цельсия

. . . . . .

Использование цикла do. . . while для загрузки массива Использование цикла do. . . while для загрузки массива

6. Определение количества элементов sizeof(параметр) sizeof(int) // 4 int b[5]; sizeof(b); // 20 Кол-во 6. Определение количества элементов sizeof(параметр) sizeof(int) // 4 int b[5]; sizeof(b); // 20 Кол-во эл массива = sizeof(имя_массива)/ sizeof(тип_данных)

7. Поиск в массиве 7. Поиск в массиве

Смысл переменных Смысл переменных

ПЕРЕМЕННАЯ - СЧЕТЧИК. ПЕРЕМЕННАЯ - СЧЕТЧИК.

ПЕРЕМЕННАЯ - ПРИЗНАК. суммирование элементов массива до первого отрицательного включительно: ПЕРЕМЕННАЯ - ПРИЗНАК. суммирование элементов массива до первого отрицательного включительно:

5 -8 -9 7 8 -5 !!!!!!!-ПРОВРИТЬ 5 -8 -9 7 8 -5 !!!!!!!-ПРОВРИТЬ

ПЕРЕМЕННАЯ - НАКОПИТЕЛЬ. for (s=0, . . . ; . . . ) { ПЕРЕМЕННАЯ - НАКОПИТЕЛЬ. for (s=0, . . . ; . . . ) { получить k; s+=k; }

for (s=0, i=0; i<10; i++) s+=A[i]; for (p=1, . . . ; ) { for (s=0, i=0; i<10; i++) s+=A[i]; for (p=1, . . . ; ) { Получить k; p*=k; }

// Сумма элементов массива до первого // отрицательного // Сумма элементов массива до первого // отрицательного

// Сумма положительных элементов // массива // Сумма положительных элементов // массива

// Сумма значений функции sin // в диапазоне 0. . 1 с шагом 0. // Сумма значений функции sin // в диапазоне 0. . 1 с шагом 0. 1

ПЕРЕМЕННАЯ – МИНИМУМ (МАКСИМУМ) for (s=0, . . . ; . . . ) ПЕРЕМЕННАЯ – МИНИМУМ (МАКСИМУМ) for (s=0, . . . ; . . . ) { получить k; if (k>s) s=k; } //нахождение максимального элемента массива. 3 7 9 4

► запоминает не само значение максимума, а индекс элемента в массиве, где оно находится. ► запоминает не само значение максимума, а индекс элемента в массиве, где оно находится.

Позиция минимального из положительных Позиция минимального из положительных

Смысл переменных при завершении циклов for (i=0; i<n; i++) if (A[i]<0) break; if (i==n-1). Смысл переменных при завершении циклов for (i=0; i

Смысл индексных переменных при работе с массивами while() {. . . c=A[i]; i++; . Смысл индексных переменных при работе с массивами while() {. . . c=A[i]; i++; . . . } // Извлечь очередной и продвинуть индекс while() {. . . c=A[i++]; . . . } // “Нежесткая” связь с циклом for (. . . ; i++) {. . . c=A[i]; . . . } // “Жесткая” связь с циклом

while() {. . . A[i]=c; i++; . . . } // Записать очередной и while() {. . . A[i]=c; i++; . . . } // Записать очередной и продвинуть индекс while() {. . . A[i++]=c; . . . } // “Нежесткая” связь с циклом for (. . . ; i++) {. . . c=A[i]; . . . } // “Жесткая” связь с циклом

► Пример – задача переписать элементы массива A в массив B так, чтобы в ► Пример – задача переписать элементы массива A в массив B так, чтобы в выходном массиве слева относительно выбранного A[k], называемого медианой, находились все элементы, меньшие данного, а справа большие. -“движение” по массиву A слева направо, связанное с циклом просмотра массива; ► -“движение” по массиву B в процессе заполнения его с левого конца; ► -“движение” по массиву B в процессе заполнения его с правого конца. ►

Смысл переменных в структурах данных ► ПОСЛЕДОВАТЕЛЬНОСТЬЮ называется (упорядоченное) множество переменных, количество которых может Смысл переменных в структурах данных ► ПОСЛЕДОВАТЕЛЬНОСТЬЮ называется (упорядоченное) множество переменных, количество которых может меняться. определить текущее количество элементов последовательности : ► -использовать дополнительную переменную - счетчик числа элементов; ► -добавлять каждый раз в качестве обозначения конца последовательности дополнительный элемент с особым значением - признак конца последовательности, например нулевой (ОГРАНИЧИТЕЛЬ ПОСЛЕДОВАТЕЛЬНОСТИ).

Житейский смысл алгоритмов и их фрагментов -обмен значениями (перестановка) соседних переменных в массиве; int Житейский смысл алгоритмов и их фрагментов -обмен значениями (перестановка) соседних переменных в массиве; int A[10], c; c=A[i]; A[i]=A[i+1]; A[i+1]=c;

a=5; b=6; c=a; a=b; b=c; a=5; b=6; c=a; a=b; b=c;

Смысл выражений в арифметических задачах Смысл выражений в арифметических задачах

Пример анализа программы for (m=0, k=0, i=1; i<20; i++) if (A[i-1]<A[i]) k++; else { Пример анализа программы for (m=0, k=0, i=1; i<20; i++) if (A[i-1]m) m=k; k=0; }

► 1. Смысл цикла for() ► 2. Смысл переменной m из выражения if (k>m) ► 1. Смысл цикла for() ► 2. Смысл переменной m из выражения if (k>m) m=k; ► 3. A[i] - текущий элемент массива, A[i-1] имеет смысл - предыдущий элемент массива, A[i-1]

► процесс выполнения нескольких шагов цикл i= 1 2 3 4 5 6 7 ► процесс выполнения нескольких шагов цикл i= 1 2 3 4 5 6 7 8 A[] 3 4 5 2 1 3 4 6 2 k=0 k++ k++ k=0 1 2 0 0 1 2 3 0 m=k m=k 2 3

► МАКСИМАЛЬНУЮ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ ВОЗРАСТАЮЩИХ ЗНАЧЕНИЙ в массиве ► МАКСИМАЛЬНУЮ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ ВОЗРАСТАЮЩИХ ЗНАЧЕНИЙ в массиве

удаления отрицательных элементов из массива 2 -4 6 -2 удаления отрицательных элементов из массива 2 -4 6 -2

Пример for (i=1, s=0; i<10; i++) if (A[i]>0 && A[i-1]<0) s++; Пример for (i=1, s=0; i<10; i++) if (A[i]>0 && A[i-1]<0) s++;

for (i=0, s=A[0]; i<10; i++) if (A[i]>s) s=A[i]; for (i=0, s=A[0]; i<10; i++) if (A[i]>s) s=A[i];

? for (s=1, i=0; i < 10; i++) s = s * A[i]; // ? for (s=1, i=0; i < 10; i++) s = s * A[i]; // 1 6 8 14

? cin >> b; for (i=0; A[i]!=0; i++); A[i]=b; A[i+1]=0; // 36 8 12 ? cin >> b; for (i=0; A[i]!=0; i++); A[i]=b; A[i+1]=0; // 36 8 12

? for (n=a, s=0; n!=0; n=n/10) { k=n%10; s=s*10+k; } // 4723 n k ? for (n=a, s=0; n!=0; n=n/10) { k=n%10; s=s*10+k; } // 4723 n k s

? for (s=A[0], i=1; i < 10; i++) A[i-1] = A[i]; A[9] = s; ? for (s=A[0], i=1; i < 10; i++) A[i-1] = A[i]; A[9] = s; // A[0] // 4 A[1] 7 A[2] 9 A[3] 45

? for (i=0; i<10; i++) if (A[i]<0) break; if (i==10) cout << ? for (i=0; i<10; i++) if (A[i]<0) break; if (i==10) cout << "Хорошо!!!n";

error int a[3]; cout<<a[1]<<” “<<a[2]<<” “<<a[3]<<endl; error int a[3]; cout<

error double f[3]={1. 1, 100. 001, 1000. 0001}; error double f[3]={1. 1, 100. 001, 1000. 0001};