ПЯВУ. Основы программирования. Лекция 6

Содержание

Слайд 2

Вопросы для повторения Назовите 4 обязательных характеристики переменной? Что определяет типа

Вопросы для повторения

Назовите 4 обязательных характеристики переменной?
Что определяет типа данных?
Зачем определены

2 числовых типа данных: int и double?
Какие операции можно выполнять над строками?
Как происходит сравнение строк?
Опишите “время жизни” переменной.
Слайд 3

Содержание Массивы. Одномерные массивы Понятие алгоритма, запись алгоритма Примеры простейших алгоритмов

Содержание

Массивы. Одномерные массивы
Понятие алгоритма, запись алгоритма
Примеры простейших алгоритмов
Поиск наибольшего/наименьшего
Поиск условного

наибольшего/наименьшего
Дополнительные операторы управления циклом (break и continue)
Массивы. Многомерные массивы
Слайд 4

Массивы Важнейшая структура данных Массив – совокупность элементов данных одного типа,

Массивы

Важнейшая структура данных
Массив – совокупность элементов данных одного типа, имеющих одно

имя, доступ к которым выполняется по номеру элемента.
Массив – новый тип данных. Абстрактный. Контейнер.
Слайд 5

Примеры int [] v = new int [16]; // 16 целых

Примеры

int [] v = new int [16]; // 16 целых
double []

a = new double [4]; // 4 double
Массивы могут быть образованы из данных любого определенного ранее типа.
В общем виде:
<тип> [] <имя массива> = new <тип>[<количество>];
Слайд 6

Доступ к элементам массива int [] v = new int [16];

Доступ к элементам массива

int [] v = new int [16];
int x

= v[3]; // чтение элемента массива
v[1] = x; // изменение элемента
Слайд 7

Нумерация элементов массива У объекта–массива имеется свойство Length. int n =

Нумерация элементов массива

У объекта–массива имеется свойство Length.
int n = v.Length; //

количество элементов
Нумерация элементов всегда начинается с 0;
//Какой тип данных напоминает?
Слайд 8

Перебор элементов double [] v = new double [16]; //Заполнение массива

Перебор элементов

double [] v = new double [16];
//Заполнение массива
for(int i =

0; i < v.Length; i++)
{
v[i] = …
}
Слайд 9

Инициализация массива Массивы можно инициализировать как и обычные переменные. int []

Инициализация массива

Массивы можно инициализировать как и обычные переменные.
int [] a =

new int[3] {1, 2, 3};
Для числовых типов, если массив не инициализирован, все его элементы равны 0;
Для логических – false;
Для строковых – пустой строке.
Слайд 10

Применения массивов Вектора в математике в программировании задаются массивами. Задача. Найти

Применения массивов

Вектора в математике в программировании задаются массивами.
Задача. Найти скалярное произведение

векторов a(0,1,1) и b(1,1,0)
double [] a = new double[3]{0,1,1};
double [] b = new double[3]{1,1,0};
double dp = 0;
for(int i = 0; i < a.Length; i++)
{
dp += a[i] * b[i];
}
//Здесь в dp содержится скалярное произведение векторов
Слайд 11

Контрольные вопросы Что такое массив? Могут ли элементы одного массива иметь

Контрольные вопросы

Что такое массив?
Могут ли элементы одного массива иметь разные типы?
Какой

номер имеет последний элемент массива v?
Чему равен элемент массива v с номером 1?
int [] v = new int [3] {1, 2, 3};
Что общего между массивом символов и строкой?
В чем различие между массивом символов и строкой?
Слайд 12

Алгоритм Алгоритм – конечная последовательность выполнимых действий, которая приводит к решению

Алгоритм
Алгоритм – конечная последовательность выполнимых действий, которая приводит к решению задачи.
Поваренная

книга - пример сборника алгоритмов: имеется задача, исходные данные, указана последовательность действий для достижения цели.
Слайд 13

Текстовая запись алгоритма Задача. Найти скалярное произведение двух векторов одинаковой размерности.

Текстовая запись алгоритма

Задача. Найти скалярное произведение двух векторов одинаковой размерности.
Обозначим вектора

имени a и b, а результат dp.
Занулить аккумулятор dp (dp = 0)
Цикл по элементам вектора a. (i-тый компонент)
Увеличить аккумулятор dp на произведение i-тых (текущих) компонентов векторов a и b.
Конец цикла 2
В dp содержится скалярное произведение a и b.
Слайд 14

Поиск наибольшего/наименьшего Задача. Найти значение наибольшего элемента массива. Обозначим наибольшее значение

Поиск наибольшего/наименьшего

Задача. Найти значение наибольшего элемента массива.
Обозначим наибольшее значение aMax, а

массив a.
Присвоим aMax значение первого элемента массива;
Цикл по элементам массива начиная со второго
Очередной элемент массива ai сравниваем с aMax
Если ai больше aMax, то присвоить значение ai в aMax
Конец цикла 2
В aMax содержится значение наибольшего элемента массива a.
Что изменится, если нужно найти наименьший?
Слайд 15

Программирование алгоритма //Присвоим aMax значение первого элемента массива double aMax =

Программирование алгоритма

//Присвоим aMax значение первого элемента массива
double aMax = a[0];
//Цикл по

элементам массива начиная со второго
for(int i = 1; i < a.Length; i++)
{
//Очередной элемент массива ai сравниваем с aMax
if(a[i] > aMax)
{
//Если ai больше aMax, то присвоить значение ai в aMax
aMax = a[i];
}
//Конец цикла 2
}
Слайд 16

Поиск наибольшего/наименьшего Задача. Найти номер первого наибольшего элемента массива. Обозначим номер

Поиск наибольшего/наименьшего

Задача. Найти номер первого наибольшего элемента массива.
Обозначим номер наибольшего элемента

iMax, а массив a.
Присвоим iMax значение 0;
Цикл по элементам массива начиная со второго
Очередной элемент массива ai сравниваем с aiMax
Если ai больше aiMax, то присвоить значение i в iMax
Конец цикла 2
В iMax содержится номер первого наибольшего элемента массива a.
Как изменится, если нужен номер последнего наибольшего?
Слайд 17

Программирование алгоритма //Присвоим iMax значение 0 int iMax = 0; //Цикл

Программирование алгоритма

//Присвоим iMax значение 0
int iMax = 0;
//Цикл по элементам массива

начиная со второго
for(int i = 1; i < a.Length; i++)
{
//Очередной элемент массива ai сравниваем с aiMax
if(a[i] > a[iMax])
{
//Если ai больше aiMax, то присвоить значение i в iMax
iMax = i;
}
//Конец цикла 2
}
Слайд 18

Усложнение задачи Задача. Найти значение наибольшего элемента массива целых, среди элементов,

Усложнение задачи

Задача. Найти значение наибольшего элемента массива целых, среди элементов, делящихся

на 3.
Исходная задача решалась так:
int aMax = a[0];
for(int i = 1; i < a.Length; i++)
{
if(a[i] > aMax)
aMax = a[i];
}
Как ее изменить?
Слайд 19

Укрупнение алгоритма Найти первый элемент массива, который делится на 3 и

Укрупнение алгоритма

Найти первый элемент массива, который делится на 3 и присвоить

его в aMax.
Применить алгоритм “поиск наибольшего” к оставшимся элементам массива, пропуская те, которые не делятся на 3.
Что произойдет, если у в массиве не будет элементов, которые делятся на 3?
Слайд 20

Уточнение алгоритма Будем искать НОМЕР элемента Поместить в iMax значение -1

Уточнение алгоритма

Будем искать НОМЕР элемента
Поместить в iMax значение -1
Найти номер первого

элемента массива, который делится на 3 и присвоить его в iMax.
Если в массиве нет будет элементов, которые делятся на 3, то iMax будет равно -1. На этом решение задачи завершено. Искомого элемента нет!
Применить алгоритм “поиск наибольшего” к последующим (iMax) элементам массива, пропуская те, которые не делятся на 3.
Если в массиве не будет элементов, которые делятся на 3, то iMax будет равно -1. Если такие элементы есть, то iMax равно номеру наибольшего элемента
Слайд 21

Реализация алгоритма int iMax = -1; for(int i = 0; i

Реализация алгоритма

int iMax = -1;
for(int i = 0; i < a.Length;

i++)
if(a[i] % 3 == 0)
{
iMax = i;
break;
}
//Здесь известен номер первого элемента, который делится на 3
if(iMax >= 0)
{
for(int i = iMax + 1; i < a.Length; i++)
if(a[i] % 3 == 0 && a[i] > a[iMax])
iMax = i;
}
// Здесь iMax или равно -1 или равно номеру наибольшего элемента массива, среди тех, которые делятся на 3.
Слайд 22

Дополнительные операторы управления циклом break – прекращает выполнение цикла continue –

Дополнительные операторы управления циклом

break – прекращает выполнение цикла
continue – переход к

следующей итерации
for(int i = 0; i < 100; i++)
{
if(i%5 == 0) continue;

}
Слайд 23

Контрольные вопросы Что такое алгоритм? Что значит: “Задача не имеет алгоритмического

Контрольные вопросы

Что такое алгоритм?
Что значит: “Задача не имеет алгоритмического решения”?
Что означает

фраза: “Степень детализации алгоритма”?
Для чего применяется ключевое слово break?
Для чего применяется ключевое слово continue?
Как будет выглядеть алгоритм задачи:
“Найти среднее арифметическое элементов массива”?
7. В чем отличие алгоритма и программы, которые вы разрабатываете для реализации алгоритма?
Слайд 24

Многомерные массивы Можно создавать массивы более чем из одной размерности. int

Многомерные массивы

Можно создавать массивы более чем из одной размерности.
int [,] m

= new int[3, 3] {{1, 2, 3}, {4,5,6}, {7,8,9}};
У такого массива свойство Length говорит об общем количестве элементов. (в примере m.Length == 9)
Чтобы узнать размер массива по одному из измерений нужно пользоваться методом GetLength(n), где n – целое число, номер измерения.
Нумеруются измерения с 0, т.е. m.GetLength(0) вернет количество строк матрицы m, а m.GetLength(1) – количество столбцов.
Элемент такого массива определяется 2-мя индексами
m[1,2] = …
int t = m[0,2]
Слайд 25

Массив массивов Элементами массива могут быть и массивы. int [][] a

Массив массивов

Элементами массива могут быть и массивы.
int [][] a = new

int [3][];
Пользоваться таким массивом еще нельзя. Нужно задать каждый из его элементов.
for(int i = 0; I < a.Length; i++)
a[i] = new int[3];
Теперь задана матрица, которая состоит из 3 строк по 3 элемента в каждой.
Слайд 26

Пример использования массива массивов У массива массивов каждый элемент-массив может иметь

Пример использования массива массивов

У массива массивов каждый элемент-массив может иметь свою

длину. Вот как можно выяснить длину каждого элемента.
for(int i = 0; i < a.Length; i++)
Console.WriteLine(“Элемент {0} имеет длину {1}.”,
i, a[i].Length);
for(int i = 0; i < a.Length; i++)
for(int j = 0; j < a[i].Length; j++)
a[i][j] = i+j;
Слайд 27

Применения многомерных массивов Матрицы в математике задаются двумерными массивами. Задача. Найти

Применения многомерных массивов

Матрицы в математике задаются двумерными массивами.
Задача. Найти сумму 2-х

матриц одинаковой размерности.
double [,] a = new double[3,3]{{0,1,1}, {1,1,1}, {0,1,1}};
double [,] b = new double[3,3]{{1,1,0}, {2,0,0}, {3,1, 0}};
double [,] ab = new double[a.GetLength(0), a.GetLength(1)];
for(int i = 0; i < a.GetLength(0); i++)
for(int j = 0; j < a.GetLength(1); j++)
ab[i, j] = a[i, j] + b[i, j];
//Здесь в ab содержится сумма двух матриц a и b.