Массивы.ppt
- Количество слайдов: 43
Массивы
Массив это набор переменных, имеющих общее имя, но разный номер (индекс). X[0] – первый элемент массива, X[1] – второй элемент массива, Х[i] – (i+1)-ый элемент массива. Каждый элемент массива имеет индекс и значение. Объявление массива: int X[10]; // Массив из 10 элементов
Задание элементам массива значений 1) Инициализация при объявлении: int X[10]={0, -5, 8, 5, 2, -1, 3, 7, 0, 1}; 2) Ввод с клавиатуры: int X[10]; for(i=0; i<10; i++) cin>>X[i]);
1. Присваивание значений: a) for(i=0; i<10; i++) X[i]= 0; b) Через генератор случайных чисел: srand(time(NULL)); for(i=0; i<10; i++) X[i]= rand()%50; //случайное //целое число от 0 до 49
Вывод элементов массива 1) В строчку: for(i=0; i<10; i++) cout<<X[i]<<“ “; cout<<endl; 2) В столбик: for(i=0; i<10; i++) Cout<<X[i];
Задача 1 Найти максимальный элемент целочисленного массива и его индекс. void main() { int X[15], i, N, Max; srand(time(NULL)); for(i=0; i<15; i++) { X[i]= rand()%101 -50; //[-50, 50] cout<<X[i]<<“ “; } Max = -60; for(i=0; i<15; i++) if (X[i]>Max) { Max = X[i]; N = i; } cout<<“Максим. Х[“<<++N<<“]=“<<Max<<endl; }
Начало i = 0, 14 X[i] – случ. число от -50 до 50 Вывод X[i] Max = -60 i = 0, 14 – X[i] > Max + Max = X[i] N=i Вывод ++N, Max Конец
Задача 2 Вывести все отрицательные элементы целочисленного массива, сосчитать кол-во нулевых, просуммировать положительные элементы. #include “stdafx. h” #include <iostream> using namespace std; void main() { int X[18], i, N, S; srand(time(NULL)); for(i=0; i<18; i++) { X[i]= rand()%7 -3; //от -3 до 3 cout<<X[i]<<“ “; } S = 0; N = 0; cout<<endl<<“Отрицательные : “; for(i=0; i<18; i++) if (X[i]<0) cout<<X[i]<<“ “; else if(X[i]= =0) N++; else S+= X[i]; cout<<endl<<“Кол-во нулевых =”<<N<<endl; Cout<<“Сумма положительных =<<S<<endl; }
Задача 3 Переписать все положительные элементы массива А в массив В. void main() { int A[15], B[15], i, k; srand(time(NULL)); cout<<“Массив А : ”<<endl; for(i=0; i<15; i++) { A[i]= rand()%51 -25; cout<<A[i]<<“ “; } k = 0; // Текущий индекс в массиве B for(i=0; i<15; i++) if (A[i]>0) B[k++]=A[i]; cout<<endl<<“Массив B : “<<endl; for(i=0; i<k; i++) cout<<B[i]<<“ “; cout<<endl; }
Сортировка массива - это выстраивание массива по возрастанию или убыванию. Методы сортировки: • метод пузырька, • метод выбора, • метод обмена и т. д.
I. Метод пузырька (по возрастанию) • Попарно сравниваем элементы с 1 -го по N -1 ( N –кол-во элементов массива), • Если X[i] > X[i+1], то элементы переставляем местами, • Аналогично сравниваем попарно элементы с 1 -го по N-2, при необходимости переставляя их, • И т. д.
10 3 3 3 3 3 10 5 5 5 5 5 10 8 8 8 1 1 8 8 8 10 1 1 8 4 1 1 10 4 4 8 4 4 4 10 10 10
3 3 1 1 1 5 5 1 1 3 3 3 1 1 5 4 4 4 4 5 5 8 8 8 8 10 10
void main() { int X[20], i, k, Buf; setlocale(LC_ALL, ”Russian”); cout<<“Введите элементы массива: ”<<endl; for(i=0; i<20; i++) cin >> X[i]; for(k=18; k>=0; k--) for(i=0; i<=k; i++) if (X[i]> X[i+1]) {Buf = X[i]; X[i] = X[i+1]; Перестановка X[i+1] = Buf; } cout<<“Отсортированный массив Х : “; for(i=0; i<20; i++) cout<< X[i]<<“ “; }
II. Метод выбора( сортировка по возрастанию): • • • Ищем минимальный элемент в массиве с 1 -го по последний элемент и переставляем его с первым элементом; Ищем минимальный элемент в массиве с 2 -го по последний элемент и переставляем его со вторым элементом; И т. д. до предпоследнего элемента.
10 10 1 1 1 1 3 3 3 3 3 5 5 5 4 4 4 8 8 8 8 5 5 5 1 1 10 10 8 4 4 4 5 5 8 8 10
Задача Отсортировать вещественный массив из 20 чисел по возрастанию методом выбора.
void main() { float A[10], Buf; int i, j, Nm; cout<<“Input massiv A: ”<<endl; for(i=0; i<10; i++) cin >> A[i]; for(i=0; i<9; i++) { Nm = i; // Nm – номер минимального элемента for(j=i+1; j<10; j++) if(A[j]< A[Nm]) Nm = j; Buf = A[i]; // перестановка A[i] = A[Nm]; A[Nm] = Buf; } cout<<“Sorted massiv А : “<<endl; for(i=0; i<10; i++) cout << A[i]<<“ “; cout<<endl; }
Методы поиска в массиве
Имеется два основных метода поиска – последовательный и двоичный. Первый метод заключается в последовательном переборе элементов массива до тех пор, пока не будет найден нужный. Программная реализация первого метода: #include “stdafx. h” #include <iostream> #include <iomanip> using namespace std;
void main() {int i, p, X, a[10]; srand(time(NULL)); cout<<"Vxodnoi massiv: “<<endl; for(i=0; i<10; i++) { a[i]= rand()%21; cout << setw(4)<< a[i]; } cout<<endl; cout<<"Введите искомое целое число: "; cin>>X; i=0;
do { p=X-a[i]; i++; } while(p && i<10) ; if (p) cout<<"Элемент не найден!"); else cout<<"Найден элемент a[“<<--i<<“]”<<endl; }
Бинарный поиск в массиве: массив должен быть предварительно отсортирован по возрастанию.
Идея метода: 1. Вводится массив a и искомое число X; 2. Фиксируются начальный in и конечный ik индекс интервала поиска; 3. Интервал поиска делится пополам – находится индекс среднего элемента ic ; 4. Если X<a[ic] , то интервалом поиска становится in. . . ic ( ik =ic) 5. Если X>a[ic] , то интервалом поиска становится ic. . . ik ( in =ic) 6. Пункты 3, 4, 5 повторяем до тех пор, как X=a[ik] или X=a[in] (нашли!) или интервал поиска не сузится до двух элементов (не нашли).
#include <stdio. h> #include <conio. h> #include <stdlib. h> void main() { int i, in, ik, ic; int a[10], X; clrscr(); printf("Vxodnoi massiv: n"); for(i=0; i<10; i++) scanf("%d", &a[i]);
printf("Введите искомое целое число: "); scanf("%d", &X); in=0; //начальный индексинтервала поиска ik=9; //конечный индекс интервала поиска if(X<a[0]||X>a[9]) printf("Элемент не найден!");
else { do { ic=(in+ik)/2; if (X<a[ic]) ik=ic; if (X>a[ic]) in=ic; } while((X-a[in])&&(X-a[ik])&&(ik-in>1)); //Выход из цикла при X=a[ik] или при // X=a[in] или при ik-in<=1
if (X==a[in]) printf("Найден элемент %dn", in); else if (X==a[ik]) printf("Найден элемент %dn", ik); else printf("Элемент не найден!"); } getch(); }
Многомерные массивы
Многомерный массив — это массивов, т. е. массив, элементами которого являются массивы. Размерность массива — это количество индексов, используемых для ссылки на конкретный элемент массива.
Пример определения двухмерного массива (матрицы) с 10 строками и 30 столбцами: int array[10][30]; Пример определения трёхмерного массива: double Y[5][10][6];
Инициализация многомерного массива происходит построчно, т. е. в порядке возрастания самого правого индекса. Пример: int Х[2][2][2]={23, 54, 16, 43, 82, 12, 9, 75}; Проинициализированный массив будет выглядеть так: [0][0][0]=23; [0][0][1]=54; [0][1][0]=16; . . . [1][1][0]=9; [1][1][1]=75;
int Y[3][3]={ 34, 23, 67, 38, 56, 73, 37, 94, 28 };
Двумерные массивы (матрицы) Двумерные массивы представляют собой таблицу (матрицу). // Матрица из 3 -х строк, 4 -х столбцов : int a[3, 4]; Пример1 Упорядочить матрицу а[3][4] по возрастанию элементов по строкам, найти минимальный элемент.
#include “stdafx. h” #include <iostream> #include <stdlib. h> #include <time. h> using namespace std; void main() {int i, j, k, Min, Buf; int a[3][4]; srand(time(NULL)); cout<<Входная матрица: “<<endl;
// Присваивание элементам значений for(i=0; i<3; i++) { for(j=0; j<4; j++) {a[i][j]=rand()%51 -25; cout<<setw(7)<<a[i][j]; } cout<<endl; }
// Сортировка методом пузырька (возраст. ) for(i=0; i<3; i++) for(k=2; k>=0; k--) for(j=0; j<=k; j++) if(a[i][j]>a[i][j+1]) { Buf =a[i][j]; // Перестановка a[i][j]=a[i][j+1]; a[i][j+1]= Buf; }
// Поиск минимального элемента, вывод матрицы Min = 60; for(i=0; i<3; i++) { if(a[i][0]< Min) Min=a[i][0]; for(j=0; j<4; j++) printf("%7 d", a[i][j]); printf("n"); } printf("n. Миним. элемент =%d", Min); getch(); }
Пример 2 : Транспонировать квадратную матрицу (на том же месте), используя оператор do. . . while. void main() { int mat[20]; //Матрица целых // чисел, максимум 20*20 int size, i, j, temp;
do{ printf("n. Введите кол-во строк : “); scanf(“%d”, size); } while(size>20 || size<2); for(i=0; i<size; i++) { printf("n. Введите строку номер: %d“, i+1); for(j=0; j<size; j++) scanf(“%d”, &mat[i][j]); }
// Само транспонирование i=1; do { j=0; do { temp = mat[i][j]; // перестановка mat[i][j] = mat[j][i]; mat[j++][i] = temp; } while(j<i); } while(++i<size);
// Вывод результата for(i=0; i< size; i++) { printf("n“); for(j=0; j<size; j++ ) printf(“%4 d”, mat[i][j]); } getch(); }
При объявлении массива: (например, float mas[2][3]; ) Имя массива mas является указателем на первый элемент массива mas[0][0]; mas[i] является указателем на i-ую строку матрицы.
Массивы.ppt