Слайд 1Основы программирования:
язык C++
Структурные типы данных
Массивы
Слайд 2Основы программирования/C++
Структурные типы данных
Слайд 3Основы программирования/C++/Структурные типы данных
Структурные типы данных – это типы, значение
которых состоит из совокупности составных частей
Скалярный Структурный
Слайд 4Основы программирования/C++/Структурные типы данных
Структурные типы данных C++:
Массивы – int a[n]
Структуры
(записи) – struct
Объединения – union
-----------------------
Определяемые типы
Перечисления – enum
Определение типа
– typedef
Слайд 5Основы программирования/C++
Массивы
Слайд 6Основы программирования/C++/Массивы
Массив – структурный тип данных, состоящий из фиксированного числа
однотипных элементов, доступ которых осуществляется по индексу.
Значения
a
Слайд 7Основы программирования/C++/Массивы
Описание массива
тип_элементов имя_массива[размер]
размер – количество элементов
индексы элементов всегда начинаются
с нуля!
Пример.
void main()
{
int a[10];
float b[100];
}
Слайд 8Основы программирования/C++/Массивы
Размер массива – это количество его элементов
Размерность массива –
это количество его индексов
одномерный (линейный) – 1 индекс
двухмерный (матрица) –
2 индекса
трехмерный – 3 индекса и т.д.
Слайд 9Основы программирования/C++/Массивы
Доступ к элементу массива – через его индекс в
квадратных скобках
например,
a[5] –элемент массива а с индексом 5
b[12] –элемент
массива b с индексом 12
a[i] –элемент массива a с индексом равным i
Слайд 10Основы программирования/C++/Массивы
10
25
a[0] = 10;
a[1] = a[0] + 15;
a
Слайд 11Основы программирования/C++/Массивы
Внимание! Нельзя обращаться к несуществующему элементу массива!
Например, здесь ошибка:
i
= 9;
a[i+1] = 100;
Это обязанность программиста обеспечить невыход индекса за
границу допустимого диапазона .
a
Слайд 12Основы программирования/C++/Массивы
a
Обычно, для последовательного перебора элементов массива
используют цикл for,
в котором перебирают значения индекса от
первого до последнего элемента:
for(int i
= 0; i < n; i++)
. . . //какая-то работа с a[i]
Например:
for (int i = 0; i < 10; i++)
{
a[i] = i;
}
Слайд 13Основы программирования/C++/Массивы
Рассмотрим пример решения задачи:
Задача1. Дан линейный целочисленный массив из
N элементов (N=10). Найти среднее арифметическое четных элементов.
Пример входа и
выхода:
Исходный массив:
5 8 11 0 7 12 8 19 13
Среднее арифметическое четных = 7.60
Слайд 14Основы программирования/C++/Массивы
#include
#include
#include
#include
using namespace std;
void main()
{
const
int n = 10;
int a[n];
srand(time(NULL));
for (int i=0;
i a[i] = rand() % n;
cout<< «Массив:" << endl;
for (int i=0; i cout<< setw(4)<< a[i];
cout << endl;
Слайд 15Основы программирования/C++/Массивы
// Среднее арифметическое четных
int sum = 0;
int
count = 0;
for (int i=0; i
if(a[i] % 2 == 0)
{
sum += a[i];
count++;
}
if(count)
{
float avg = (float)sum / count;
cout << "Среднее ар. четных = " << setw(12) << avg << endl;
}
else
{
cout << "Четных нет...";
}
return;
}
Слайд 16Основы программирования/C++/Массивы
Рассмотрим еще пример:
Задача2. Дан линейный целочисленный массив из N
элементов (N=10). Найти и обменять местами максимальный и минимальный элементы.
Пример
входа и выхода:
Исходный массив:
5 8 11 0 7 12 8 19 13
Измененный массив:
5 8 11 19 7 12 8 0 13
Слайд 17Основы программирования/C++/Массивы
// Нахождение индексов imax и imin элементов
int imin = 0;
// Индекс минимального элемента
int imax = 0; // Индекс максимального
элемента
for (int i=1; i{
if(a[i] < a[imin])
imin = i;
if(a[i] > a[imax])
imax = i;
}
// Обмен максимального и минимального
int tmp = a[imin];
a[imin] = a[imax];
a[imax] = tmp;
Слайд 18Основы программирования/C++/Массивы
Рассмотрим еще пример:
Задача3. Даны два линейных целочисленных массива X
и Y по N элементов в каждом (N=10), упорядоченных по
не убыванию. Разместить эти элементы в массиве Z вдвое большего размера, чтобы они также были расположены по неубыванию.
Пример входа и выхода:
Исходный массив X:
3 5 8 8 10 15 16 20 25 28
Исходный массив Y:
2 3 3 6 10 12 14 20 21 24
Полученный массив Z:
2 3 3 3 5 6 8 8 10 10 12 14 15 16 20 20 21 24 25 28
Слайд 19Основы программирования/C++/Массивы
Алгоритм задачи 3:
Проходим массивы X и Y слева направо,
сравнивая один элемент из X с одним элементов из Y.
Выбираем из них меньший и переносим его в Z. Затем переходим к следующему элементу после перенесенного.
После этого один из массивов закончится. Тогда остаток другого массива нужно перенести в Z.
X: 3 5 8 8 10 15 16 20 25 28
Y: 2 3 3 6 10 12 14 20 21 24
Z: 2 3 3 3 5 6 8 8 10 10…
Слайд 20Основы программирования/C++/Массивы
int x[n], y[n], z[2*n];
//Заполнение массивов x и y случайными
неубывающими числами
x[0] = rand() % n;
y[0] = rand() % n;
for
(int i=1; i x[i] = x[i-1] + rand() % n;
y[i] = y[i-1] + rand() % n;
}
// Вывод массива x
cout<< "Array x:" << endl;
for (int i=0; i cout<< setw(4)<< x[i];
cout << endl;
// Вывод массива y
cout<< "Array y:" << endl;
for (int i=0; i cout<< setw(4)<< y[i];
cout << endl;
Слайд 21Основы программирования/C++/Массивы
int ix = 0; // индекс элемента массива X
int
iy = 0; // индекс элемента массива Y
int iz =
-1; //индекс элемента массива Z
//Слияние массивов x и y в массив z
while ((ix < n) && (iy < n)) // пока есть элементы в массивах
if (x[ix] <= y[iy])
{// перенос элемента x в массив z
iz++;
z[iz] = x[ix];
ix++;
}
else
{//перенос элемента y в массив z
iz++;
z[iz] = y[iy];
iy++;
}
Слайд 22Основы программирования/C++/Массивы
while (ix < n) // пока есть элементы в
массиве х
{// перенос элемента X в массив Z
iz++;
z[iz] = x[ix];
ix++;
}
while (iy < n) // пока есть элементы в массиве y
{//перенос элемента y в массив z
iz++;
z[iz] = y[iy];
iy++;
}
cout<< "Array z:" << endl;
for (int i=0; i<2*n; i++)
cout<< setw(4)<< z[i];
cout << endl;
return;
Слайд 23Основы программирования/C++/Массивы
Кстати! фрагмент программы
while (ix < n)
{
iz++;
z[iz] = x[ix];
ix++;
}
Можно написать иначе:
while (ix < n)
z[++iz]
= x[ix++];
Слайд 24Основы программирования/C++
Матрицы
Слайд 25Основы программирования/C++/Матрицы
Матрица – это двухмерный массив
У элемента матрицы два индекса
– номер строки и номер столбца
Пример матрицы 4х5:
Слайд 26Основы программирования/C++/Матрицы
Определение матрицы в программе:
тип имя [размер1][размер2];
Пример:
const int m =
4;
const int n = 5;
int a [m][n]; // Матрица
Слайд 27Основы программирования/C++/Массивы
Обычно, для последовательного перебора элементов матрицы используют два цикла
for, первый (внешний) перебирает строки, второй (вложенный) - столбцы:
for(int i=0;
i for(int j=0; j . . . //какая-то работа с a[i][j]
Слайд 28Основы программирования/C++/Матрицы
---