Similar presentations:
Массивы. Тема №6
1.
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙИМЕНИ МУХАММАДА АЛ-ХОРАЗМИЙ
ПРОГРАММИРОВАНИЕ 1
SWD1316
ТЕМА
06
Массивы
АБДУЛЛАЕВА ЗАМИРА
ШАМШАДДИНОВНА
Доцент кафедры Основы
информатики
1
2.
Содержание1. Определение массива;
2. Одномерный массив;
3. Двухмерный массив;
4. Массивы и функции;
5. Заключение;
П РО Г РА М М И РО ВА Н И Е 1
2
3.
Понятие массивов• Массив – это комплекс однотипных элементов, имеет общее
название и памяти.
• Свойства:
• Все элементы относятся одному типу
• Массив имеет одно название
• Все элементы находятся в памяти последовательно
• Примеры:
• Список преподавателей, Квартиры в многоэтажных домах,
Городские университеты, Годовая температура погоды
П РО Г РА М М И РО ВА Н И Е 1
3
4.
МассивыA
Номер элемента
массива
массив
(index)
0
1
5
10
A[0]
22
15
15
3
4
20
25
A[1] Значение
A[2]элемента
A[3]
A[4]
массива
Значение элемента
массива: 15
!
A[2]
Номер элемента
массива (index) : 2
В С++ элементы массива начинаются с НУЛЯ!
П РО Г РА М М И РО ВА Н И Е 1
4
5.
Объявление массивовДля чего объявляются массивы?
• Для определения названия массива
• Для определения типа массива
• Для определения количество массива
• Для выделения место в памяти
Размер массива
(количество
Типы
Пример:
элементов)
элементов
Название
int
A [ 5 ];
Ввод размерности с помощью констант:
П РО Г РА М М И РО ВА Н И Е 1
const int N = 5;
int A [ N ];
5
6.
Объявление массивовПримеры:
int X[10], Y[10];
float zz, A[20];
char s[80];
Задавать начальные значения:
int A[4] = { 8, -3, 4, 6 }; Остальные
нули
float B[2] = { 1. };
char C[3] = { 'A', '1', 'Ю' };
! Если не заданы начальные значения, то элементы
принимают любые значения!
П РО Г РА М М И РО ВА Н И Е 1
6
7.
Найти ошибкуconst int
int N = 10;
float A[N];
int A[10];
A[10] = 0;
float X[5];
int n = 1;
X[n-2] = 4.5;
X[n+8] = 12.;
int X[4.5];
Выход из границы
массива
(информация удалена из
памяти)
int X[4];
X[2] = 4.5;
Отбрасывается
дробная часть
(Нет ошибки)
float
int
A[2] = { 1, 3.8 };
float B[2] = { 1., 3.8, 5.5 };
П РО Г РА М М И РО ВА Н И Е 1
7
8.
Объявлениеconst int N = 5;
Объявление:
int A[N], i;
Ввод с клавиатуры:
cout<<“Введите 5 элементов
массива:\n”;
for( i=0; i < N; i++ ) {
cout<<"A[i] = “ ;
cin>> A[i] ;
Задачи
} с элементами:
П РО Г РА М М И РО ВА Н И Е 1
A[0] = 5
A[1] = 12
A[2] = 34
A[3] = 56
A[4] = 13
8
9.
ОбъявлениеЗадачи с элементами:
for( i=0; i < N; i++ ) A[i] = A[i]*2;
Результат:
10 24 68 112 26
Вывод на экран: cout<<“Результат:\n”;
for( i=0; i < N; i++ )
cout<< A[i]<<“ ”;
П РО Г РА М М И РО ВА Н И Е 1
9
10.
ПрограммаЗадача: Ввести 5 элементов через клавиатуру и
умножить все элементы на 2 и вывести результат.
#include <stdio.h>
#include <conio.h>
main()
{const int N = 5;
int A[N], i;
// Ввод элементов массива
// Обработка массивов
// Вывод результатов
getch();
}
П РО Г РА М М И РО ВА Н И Е 1
10
11.
Самый большой элементЗадача: Найти максимальный элемент массива.
Псевдокод:
// Возьмем A[0] как максимальный
for ( i=1; i < N; i++ )
Почему цикл начинается с i=1?
?
if ( A[i] > максимума)
// A[i] станет максимальным элементом
П РО Г РА М М И РО ВА Н И Е 1
11
12.
Самый большой элементДополнение: как найти максимальный элемент?
max = A[0]; // пока A[0]– максимальный
iMax = 0;
for ( i=1; i < N; i++ )//проверка остальных
if ( A[i] > max ) { // нахождение нового
max = A[i];
//A[i] сохраняется
iMax = i; }
// i сохраняется
?
Как можно оптимизировать код?
Можно взять вместо элемента iMax значение
A[iMax]. Поэтому все max заменяем на A[iMax] и
уберем перемменную max.
П РО Г РА М М И РО ВА Н И Е 1
12
13.
Заполнение массивовfor (int i = 0; i < size of values; i++)
{
values[i] = 0;
}
Заполним массив квадратов числами 0, 1, 4, 9, 16
и т.д. Обратите внимание, что 0 индексный элемент
принимает 0, 1 индексный элемент 1 и так далее.
for (int i = 0; i < size of squares; i++)
{
squares[i] = i * i;
}
П РО Г РА М М И РО ВА Н И Е 1
13
14.
Копирование элементовРассмотрим два массива:
int squares[5] = { 0, 1, 4, 9, 16 };
int lucky_numbers[5];
Допустим, что вы хотите переписать все элементы первого
массива на второй. Следующее выражение будет ошибочной:
lucky_numbers = squares; // Error На C++ нельзя копировать
элементы одного массива на другой. Для этого мы будем
использовать цикл:
for (int i = 0; i < 5; i++)
{
lucky_numbers[i] = squares[i];
}
П РО Г РА М М И РО ВА Н И Е 1
14
15.
Удаление элементовРассмотрим массив с известным размеров и известными
значениями. Допустим, что вы хотите удалить элемент массива под
индексом pos. Если элементы не упорядочены, то это действие будет
легко. Потому что, последний элемент заменим на удаляемый. После,
уменьшаем размерность массива.
values[pos] = values[current_size - 1];
current_size--;
Если порядок элементов будет зависеть от удаления, то задача
усложнится. Для этого мы все элементы должны заменить на один
нижние элементы массива. После этого уменьшаем размерность
массива.
П РО Г РА М М И РО ВА Н И Е 1
15
16.
Заполнение случайными числами#include <stdlib.h>
RAND_MAX – максимальное случайное число
(обычно RAND_MAX = 32767)
[0,RAND_MAX] целые числа в интервале
x = rand(); // первое число
x = rand(); // теперь другое
Ввод начального значения последовательности:
srand ( 345 ); // начинается с 345
П РО Г РА М М И РО ВА Н И Е 1
16
17.
Целые числа в заданном интервалеЦелые числа в интервале [0,N-1]:
int random(int N) {
return rand()% N;}
Примеры:
x = random ( 100 ); // [0,99] interval
x = random ( z ); // [0,z-1] interval
числа в интервале [a,b] :
x = random ( z ) + a; // [a,z-1+a] interval
x = random (b – a + 1) + a; // [a,b] interval
П РО Г РА М М И РО ВА Н И Е 1
17
18.
Заполнение случайными числами#include <stdio.h>
#include <stdlib.h>
int random(int N)
{ return rand() % N; }
main()
{const int N = 10;
int A[N], i;
printf(“Massiv:\n");
for (i = 0; i < N; i++ ) {
A[i] = random(100) + 50;
cout<<A[i]; }...}
П РО Г РА М М И РО ВА Н И Е 1
Функция выводит
случайные числа от 0
до N-1
? Какой интервал?
18
19.
Запись элементов массива в обратном порядкеЗадача: Вывести элементы массива в обратном порядке
(используя инверсию).
0
1
…
0
N-2 N-1
N-2 N-1
N-1 сумма индексов
A[0] и A[N-1], A[1] и A[N-2], …
/ 2 ; i++ )
for ( i = 0; i < N N
// Замена A[i] и A[N-1-i]
П РО Г РА М М И РО ВА Н И Е 1
…
7 9 … 5 3
3 5 … 9 7
Алгоритм:
Заменяем
Псевдокод:
1
? Что неправильно?
19
20.
Как можно заменять?Задача: Поменять
местами содержание
двух пиялушек.
2
Задача: Заменить две ячейки памяти.
y
x
x = y;
y = x;
c = x;
x = y;
y = c;
П РО Г РА М М И РО ВА Н И Е 1
4
6
2
6
4
4
?
20
21.
Программаmain()
{ const int N = 10;
int A[N], i, c;
// Заполнение массива
// Ввод элементов массива
for ( i = 0; i < N/2; i++ ) {
c = A[i];
A[i] = A[N-1-i];
A[N-1-i] = c;
}
// Вывести полученный массив }
П РО Г РА М М И РО ВА Н И Е 1
21
22.
Циклический сдвигЗадача: Сдвиньте элементы массива на одну ячейку в
лево, первый элемент должен стать последним.
0
1
2
3
…
N-2 N-1
3 5 8 1 … 9 7
5 8 1 … 9 7 3
Алгоритм:
A[0]=A[1]; A[1]=A[2];… A[N-2]=A[N-1];
Цикл:
Почему не N?
for ( i = 0; i < N-1; i ++)
Что
неправильно?
?
A[i] = A[i+1];
П РО Г РА М М И РО ВА Н И Е 1
22
23.
Программаmain()
{ const int N = 10;
int A[N], i, c;
// Введите массив
// Вывод текущего массива
c = A[0];
for ( i = 0; i < N-1; i ++)
A[i] = A[i+1];
A[N-1] = c;
// Вывод измененного массива
}
П РО Г РА М М И РО ВА Н И Е 1
23
24.
Многомерные статические массивыНа языке C++ нет ограничения для типов элементов
массива, но эти типы должны быть ограниченным размерностью
объектов. Потому что компилятор должен вычислять место
занимаемой в памяти для массивов. В общем, компонентом
массива может быть сам массив («вектор-векторов»), в
результате появится двухмерный массив называемым
матрицей.
Если элемент матрицы будет вектором, то получиться куб
называемым трехмерным массивом. Этим способом можно
создавать массивы любых размерностей.
Синтаксис двухмерного массива выглядит следующим
образом:
П РО Г РА М М И РО ВА Н И Е 1
24
25.
Определение двухмерного массиваТип элемента Строки Столбцы
Список начальных
значений
Название
П РО Г РА М М И РО ВА Н И Е 1
25
26.
Многомерные статические массивы<тип> <название> [<кол. строк >] [<кол. столбцов>]
Например, объявление массива вещественных чисел:
float a[10][20];
Объявление матрицы A выглядит следующим образом.
1
П РО Г РА М М И РО ВА Н И Е 1
26
27.
Ввод и вывод элементовВвод двухмерного массива похож на ввод
одномерного массива, но отличие в том, что в
двухмерном массиве вводятся данные по нескольким
строкам:
int value = counts[3][1];
Двухмерный массив состоит из двух циклов, один
цикл для строк и другой для столбцов. Например,
следующий цикл выводит все элементы матрицы.
П РО Г РА М М И РО ВА Н И Е 1
27
28.
Ввод и вывод элементовИндекс строк
Индекс
столбцов
П РО Г РА М М И РО ВА Н И Е 1
28
29.
Функции и массивыИспользуется фиксированная размерность при случаи, когда в качестве
параметра функции не используется строка. Если мы будем
использовать функцию с параметром, в котором размерность массива
любое. Пример:
П РО Г РА М М И РО ВА Н И Е 1
29
30.
Функции и массивыНазвание массива является указателем поэтому элементы массива
можно изменять и эти изменения сохраняться и после выхода из
функции.
П РО Г РА М М И РО ВА Н И Е 1
30
31.
Функция и массивыРабота с многомерными массивами несколько
сложна, потому что хранение элементов массива в
памяти может быть различна. Например, нельзя
записать матрицу действительного типа x[n][n] так,как
float sum(float x[n][n]).
Решение проблемы – это в том, что размерность
массива нужно задавать в качестве параметра функции
и сама функция будет такой:
float sum(int n,float x[][]);
П РО Г РА М М И РО ВА Н И Е 1
31
32.
Функции и массивыМожно использовать несколько методов для использования
многомерного массива в качестве параметра:
1-метод. Можно указать вторую размерность массива
неизменяемым выражением (числом) :
П РО Г РА М М И РО ВА Н И Е 1
32
33.
Функции и массивы2-метод. При задания двухмерного массива как массив
указателей:
П РО Г РА М М И РО ВА Н И Е 1
33
34.
Функции и массивы3-метод. При использовании
указанных как двойной указатель:
П РО Г РА М М И РО ВА Н И Е 1
динамических
массивов
34
35.
Заключение• Массивы предназначены для хранения последовательности
однозначных значений. Например: массивы предназначенные для
результатов тестов показывают исчерпывающие результаты:
int scores[NUMBER_OF_SCORES количество баллов];
• Но выражение double personal_data[3]; не удовлетворительный
сохраняющей массив с парными личными информациями [3] в
позициях 0, 1 и 2, то есть по возрасту человека, банковскому
счету и росту. Для программиста сложно запомнить их где
хранится массив, такие значения информации. В таком случаи
лучшее использовать 3 разные переменные.
П РО Г РА М М И РО ВА Н И Е 1
35
36.
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙИМЕНИ МУХАММАДА АЛ-ХОРАЗМИЙ
СПАСИБО ЗА ВНИМАНИЕ!
АБДУЛЛАЕВА ЗАМИРА
ШАМШАДДИНОВНА
Доцент кафедры Основы
информатики
36