Главная страница
Навигация по странице:

  • Работа с матрицами

  • Пример 1.

  • Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов


    Скачать 222.5 Kb.
    НазваниеЛабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
    АнкорЛабораторная № 3 Програмирование
    Дата29.09.2022
    Размер222.5 Kb.
    Формат файлаdoc
    Имя файлаЛаб3(2021).doc
    ТипЛабораторная работа
    #704511
    страница3 из 8
    1   2   3   4   5   6   7   8

    Алгоритм поиска максимального элемента.


    Фрагмент соответствующей программы на языке С++:

    ...

    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]);
    1   2   3   4   5   6   7   8


    написать администратору сайта