Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
Скачать 222.5 Kb.
|
Алгоритм поиска максимального элемента.Фрагмент соответствующей программы на языке С++: ... float max; max=A[0]; for (i=1; i if (A[i]>max) max=A[i]; cout<<"Max="< ... Операция сдвига элементов массива.Пусть в массиве А[20] заполнены первые К мест, где 1 <= K < 20. а) Требуется ввести новое значение в поле переменной B и вставить его в начало массива. Решение задачи будет состоять из двух этапов - сдвиг и вставка. Вначале сдвигаем массив А на 1 позицию вправо. "Формула" сдвига вправо запишется следующим оператором присвоения A[i+1]= A[i], где i меняется от k-1 до 0 с шагом -1. После сдвига массива элемент A0 будет равен элементу A1, необходимо выполнить вставку значения B в нулевую позицию массива. На C++ алгоритм запишется в виде: for (i=n-1;i>=0;i--) A[i+1]=A[i]; A[0]= B; // после сдвига массива элемент A[0] получит значение B n=n+1; Если необходимо вставить новый элемент в позицию с номером j, то запись на C++ будет следующей: for (i=n-1;i>=j;i--) A[i+1]=A[i]; A[j]= BB; n=n+1; Обычно при сдвиге количество элементов не меняется: при циклическом сдвиге вправо последний элемент становится первым, при обычном – последний элемент теряется, первый становится равен 0. Сортировка массива.Представим алгоритм сортировки массива базовым методом «пузырька»: int temp; // временная переменная для обмена элементов местами // Сортировка массива пузырьком for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (A[j] > A[j + 1]) { // меняем элементы местами temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; } } } Как видно из примера, обмен элементами производится в три шага. С использованием встроенной функции С++ swap обмен можно произвести за раз. Вместо temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; следует написать: swap(A[j],A[j+1]); Приведенный алгоритм сортировки можно оптимизировать. Работа с матрицамиМатрица представляет собой двумерную таблицу, на пересечении строк и столбцов которой находятся элементы, задаваемые индексами (номером строки и столбца): M00 M01 M02 M03…. M0m M10 M11 M12 M13…. M0m M20 M21 M22 M23…. M0m … Mn0 Mn1 Mn2 Mn3…. Mnm Пример 1. Пусть задана матрица M(n,m) целого типа. Организовать ввод и вывод матрицы. #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); int M[10][10]; int n,m,i,j; cout <<"Введите количество строк матрицы, n: "; cin >>n; cout <<"Введите количество столбцов матрицы, m: "; cin >>m; for (i=0; i for (j=0; j { cout<<"M["< cin>>M[i][j]; } cout < cout <<<<"Введенная матрица"; for (i=0; i { for (j=0; j { cout.width(7);// выравниваем числа по7 позиций cout< } cout< } return 0; } Пример 2. Для той же матрицы подсчитать в каждой строке сумму элементов, имеющих отрицательное значение. Т.к. в матрице M количество строк равно n, то по условию задачи будет выдано n чисел – сумм отрицательных элементов в каждой строке. Создадим одномерный массив K с количеством элементов n, который будет хранить значения сумм отрицательных элементов в каждой строке матрицы. #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); int M[10][10]; int K[10]; int n,m,i,j; cout <<"Input n: "; cin >>n; cout <<"Input m: "; cin >>m; for (i=0; i for (j=0; j { cout<<"M["< cin>>M[i][j]; } cout < for (i=0; i { for (j=0; j { cout.width(7); cout< } cout< } for (i=0; i { K[i]=0; for (j=0; j { if (M[i][j]<0) K[i]=K[i]+M[i][j]; } cout< } for (i=0; i cout<<"Сумма отрицательных элементов в строке" < return 0; } Пример 3. Транспонирование квадратной матрицы A[n,n]. Фрагмент программы. Пропустим операторы ввода матрицы. for (i=0; i // элементы главной диагонали не переставляются j>i for (j=i+1; j swap(M[i][j],M[j][i]); |