НРТК
Массив и его объявление
Использование массивов
Пример: ввод элементов массива
Пример: вычисление суммы и вывод
Пример: копирование массива
Пример: поиск максимума (версия 1)
Пример: поиск максимума (версия 2)
Пример: поиск максимума среди положительных
Пример: поиск максимума среди положительных
Инициализация
Пример: проверка упорядоченности
Массив как параметр функции
Задачи
Двумерные массивы
Задачи
Алгоритмы сортировки и поиска
Алгоритмы сортировки и поиска
Пример: поиск элемента в массиве
Пример: поиск элемента в массиве
Задачи
120.42K
Категория: ПрограммированиеПрограммирование

Массивы. Начальные сведения. С / С++. Тема 05

1. НРТК

С / С++
Тема 05. Массивы. Начальные сведения
НРТК, 2022 г. 1
Массивы. Начальные сведения
Созонов А.А.

2. Массив и его объявление

• Массив — набор пронумерованных
однотипных элементов
• Объявление массива:
<тип> <идентификатор>[<константа>]
где: <константа> — количество элементов массива
• Примеры:
int array[20];
double delta, beta[30], alpha;
• В этом примере delta, alpha — простые
переменные, beta[30] – массив из 30 double
НРТК, 2022 г. 2
Массивы. Начальные сведения
Созонов А.А.

3. Использование массивов

• Обращение к элементу массива:
<идентификатор>[<индекс элемента>];
где: <индекс элемента> — порядковый номер
элемента массива – выражение типа «целое»
• Примеры:
array[3] = 8;
a = array[i] * array[j];
d = beta[i + j];
• Элементы массива нумеруются с 0:
beta[0], beta[1], beta[2],... , beta[m - 1]
НРТК, 2022 г. 3
Массивы. Начальные сведения
Созонов А.А.

4. Пример: ввод элементов массива

const int max_size = 100;
int array[max_size];
int sum, n, i;
do
{
cout << "Введите количество элементов массива:";
cin >> n;
} while ( n <= 0 || n > max_size );
for ( i = 0; i < n; i++ )
{
cout << "[" << i << "] = ";
cin >> array[i];
}
НРТК, 2022 г. 4
Массивы. Начальные сведения
Созонов А.А.

5. Пример: вычисление суммы и вывод

sum = 0;
// Обнуляем сумму
for ( int i = 0; i < n; i++ )
sum = sum + ms[i];
for ( i = 0; i < n; i++ )
{
cout << "[" << i << "] = ";
cin >> array[i];
}
cout << "Sum = " << sum << endl;
НРТК, 2022 г. 5
Массивы. Начальные сведения
Созонов А.А.

6. Пример: копирование массива

j = 0;
while ( b[j] != barrier )
{
a[j] = b[j];
j++;
}
j = 0;
while ( b[j] != barrier )
a[j++] = b[j];
j = 0;
while ( ( a[j++] = b[j] ) != barrier )
• Есть ли различия:
– между случаем 1 и случаем 2
– между случаем 2 и случаем 3
НРТК, 2022 г. 6
Массивы. Начальные сведения
Созонов А.А.

7. Пример: поиск максимума (версия 1)

const int array_size = 100;
int array[array_size];
int max, nmax;
int i;
max = array[0];
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > max )
{
max = array[i];
nmax = i;
}
НРТК, 2022 г. 7
Массивы. Начальные сведения
Созонов А.А.

8. Пример: поиск максимума (версия 2)

const int array_size = 100;
int array[array_size];
int nmax;
int i;
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > array[nmax] )
nmax = i;
НРТК, 2022 г. 8
Массивы. Начальные сведения
Созонов А.А.

9. Пример: поиск максимума среди положительных

const int array_size = 100;
int array[array_size];
int max, nmax;
int i;
max = array[0];
nmax = 0;
for ( i = 1; i < array_size; i++ )
if ( array[i] > 0 && array[i] > max )
{
max = array[i];
nmax = i;
}
А если нулевой элемент был отрицательным?
НРТК, 2022 г. 9
Массивы. Начальные сведения
Созонов А.А.

10. Пример: поиск максимума среди положительных

const int array_size = 100;
int array[array_size];
int max, nmax;
int i;
max = -INT_MAX; // -numeric_limits<int>::max();
nmax = -1;
for ( i = 0; i < array_size; i++ )
if ( array[i] > 0 && array[i] > max )
{
max = array[i];
nmax = i;
}
НРТК, 2022 г. 10
Массивы. Начальные сведения
Созонов А.А.

11. Инициализация

• Пример
int days[] = { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
• Значения элементов
int y[6] = { 1, 2, 3 };
// Инициализаторов
меньше, чем размер массива
// y[0] = 1, y[1] = 2, y[2] = 3,
// y[3] = 0, y[4] = 0, y[5] = 0
int z[3] = { 1, 2, 3, 4, 5 };
// Ошибка,
слишком много инициализаторов
• Число элементов в массиве
sizeof(days) / sizeof(int)
НРТК, 2022 г. 11
Массивы. Начальные сведения
Созонов А.А.

12. Пример: проверка упорядоченности

int x[] = { 77, 1, 3, 4, 7, 13, 17, 19, 23 };
int n = sizeof(x) / sizeof(int); // Размер массива
int i, flag = 1; // Пусть массив упорядочен
...
for(i = 0; i < n - 1; i++)
if(x[i] > x[i + 1])
{
flag = 0;
// Массив не упорядочен
break;
// Выход из цикла
}
if(flag) cout << "The array is ordered" << endl;
else
cout << "The array is not ordered" << endl;
...
Демонстрация
НРТК, 2022 г. 12
Массивы. Начальные сведения
Созонов А.А.

13. Массив как параметр функции

int SumArray( int[], int );
int main()
{
int a[20], b[10], na, nb;
...
int sa = SumArray(a, na);
int sb = SumArray(b, nb);
// Прототип функции
// Ввод a, b
return 0;
}
int SumArray(int ms[], int n)
{
int sum = 0, i;
for ( i = 0; i < n; i++ ) sum += ms[i];
return sum;
}
НРТК, 2022 г. 13
Массивы. Начальные сведения
Созонов А.А.

14. Задачи

• Для данного массива вывести вначале его
элементы с четными индексами, а затем — с
нечетными
• Вычисление количества локальных
максимумов в данном массиве
• Циклический сдвиг элементов массива на
данное число позиций
• Задачи для самостоятельной работы по
одномерным массивам
НРТК, 2022 г. 14
Массивы. Начальные сведения
Созонов А.А.

15.

Двумерные массивы
НРТК, 2022 г. 15
Массивы. Начальные сведения
Созонов А.А.

16. Двумерные массивы

• Пример:
double r[3][4];
• Расположение в памяти — по строкам
··· r[0][0] r[0][1] r[0][2] r[0][3] r[1][0] r[1][1] r[1][2] r[1][3] r[2][0] r[2][1] r[2][2] ···
1 строка
2 строка
3 строка
Инициализация
double r[3][4] = {{500, 700, 450, 1000},
{600, 710, 480, 1100},
{800, 750, 550, 1200}
};
НРТК, 2022 г. 16
Массивы. Начальные сведения
Созонов А.А.

17. Задачи

• Подсчет выручки
• Задачи для самостоятельной работы по
двумерным массивам
НРТК, 2022 г. 17
Массивы. Начальные сведения
Созонов А.А.

18.

Алгоритмы сортировки и поиска
НРТК, 2022 г. 18
Массивы. Начальные сведения
Созонов А.А.

19. Алгоритмы сортировки и поиска

• Сортировка методом «пузырька»
Демонстрация
НРТК, 2022 г. 19
Массивы. Начальные сведения
Созонов А.А.

20. Алгоритмы сортировки и поиска

• Сортировка алгоритмом выбора
Демонстрация
НРТК, 2022 г. 20
Массивы. Начальные сведения
Созонов А.А.

21. Пример: поиск элемента в массиве

int Find(int array[], int n, int key)
{
int nom = -1;
int i = 0;
while ( i < n && nom == -1 )
if ( array[i++] == key ) nom = i;
return nom;
}
Здесь есть ошибка. Где?
НРТК, 2022 г. 21
Массивы. Начальные сведения
Созонов А.А.

22. Пример: поиск элемента в массиве

int Find(int array[], int n, int key)
{
int nom = -1;
int i = 0;
while ( i < n && nom == -1 )
if ( array[i++] == key ) nom = i - 1;
return nom;
}
Демонстрация
НРТК, 2022 г. 22
Массивы. Начальные сведения
Созонов А.А.

23. Задачи

• Определение того, совпадают ли два данных
массива
• Задачи для самостоятельной работы
• Сайт алгоритмов: http://algolist.manual.ru/
НРТК, 2022 г. 23
Массивы. Начальные сведения
Созонов А.А.

24.

НРТК, 2022 г. 24
Массивы. Начальные сведения
Созонов А.А.
English     Русский Правила