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

  • a

  • .

  • РГЗ по информатике. РГЗ.Пояснительная записка. A. Размер этого массива 16 ячеек. Рисунок 1 структура целочисленного одномерного массива a


    Скачать 342.88 Kb.
    НазваниеA. Размер этого массива 16 ячеек. Рисунок 1 структура целочисленного одномерного массива a
    АнкорРГЗ по информатике
    Дата19.05.2022
    Размер342.88 Kb.
    Формат файлаdocx
    Имя файлаРГЗ.Пояснительная записка.docx
    ТипДокументы
    #538838



    Задание к РГЗ:
    8.Транспонировать в матрице квадрат, в правом верхнем углу которого расположен самый первый ноль. Определить, сколько всего нулей в исходной матрице, и, если их больше чем количество строк в матрице, заменить нули на это количество.
    Краткая теория:


    1. Массивы

    Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для обработки большого количества однотипных данных. Отдельная ячейка данных массива называется элементом массива. В зависимости от количества измерений массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива.


      1. Одномерный массив

    Одномерный массив это массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве — это элементы массива. На рисунке 1 показана структура целочисленного одномерного массива a. Размер этого массива — 16 ячеек.


    Рисунок 1 - структура целочисленного одномерного массива a.
    Нумерация ячеек массива всегда начинается с 0. Индекс ячейки – это целое неотрицательное число, по которому можно обращаться к каждой ячейке массива и выполнять какие-либо действия над ней (ячейкой).


      1. Двумерный массив

    Двумерный массив используется очень часто, например, для работы с таблицами. В таблице есть две характеристики: количество строк и количество столбцов. Также и в двумерном массиве, кроме количества элементов массива, есть такие характеристики как, количество строк и количество столбцов двумерного массива. Визуально, двумерный массив — это обычная таблица, со строками и столбцами. Фактически двумерный массив — это одномерный массив одномерных массивов. Структура двумерного массива, с именем a, размером m на n показана на рисунке 2.



    Рисунок 2 - структура двумерного массива a.


    1. Функции

    Функция (в программировании) — это фрагмент кода или алгоритм, реализованный на каком-то языке программирования, с целью выполнения определённой последовательности операций. Функции позволяют программу разделить на несколько маленьких подпрограмм (функций), которые в совокупности выполняют поставленную задачу. В С++ можно воспользоваться не только своими(созданными), но и функциями определёнными в стандартных заголовочных файлах языка программирования С++.

    Конструкция создания функции:

    <тип данных, который будет возвращаться функцией> <имя> (<аргументы функции>) {

      < блок

        кода >

    }




      1. Тип данных функции.

    В самом начале нам нужно указать тип данных, который в конечном итоге будет передавать функция. Если мы не собираемся ничего передавать, а например, хотим просто вывести строку, то на месте <тип данных> можно указать тип void.

    Пример:

    void stroka() {

     

      cout << "Выводим строку без всяких переменных"; 
    }


      1. Имя функции.

    Нам нужно задать функции имя (исключениями являются зарезервированные слова в C++, имена начинающиеся с цифр, а также имена разделенные пробелом).Задавать имя функции лучше такое, чтобы было понятно что делает эта функция.


      1. Аргументы функции.

    Аргумент функции — это значение, которое можно передать функции при ее вызове. Если аргумент функции не один, а их несколько, то их нужно разделять запятой.
    Описание всех подзадач:


    1. Заполнение матрицы случайными значениями.

    Для работы этой функции, нам нужно подключить библиотеку , это делается для того чтобы при запуске программы случайные значения были всегда разные. Для реализации программы нам нужно просто идти последовательно по всем элементам матрицы и заполнять случайными значениями.

    • Реализация программы:

    #include

    void matrandom(float v[5][5])

    {

    srand(time(NULL));

    for (int i = 0; i < 5; i++)

    for (int j = 0; j < 5; j++)

    v[i][j] = -10 + (rand() % 20);
    }

    • Схема программы:



    Рисунок 3 – Схема функции matrandom


    1. Заполнение матрицы в ручную.

    Для реализации этой программы нам нужно аналогично предыдущей подзадачи идти по матрице и вводить значения, которые будут в ячейках.

    • Реализация программы:

    void matzapis(float v[5][5])

    {

    for (int i = 0; i < 5; i++)

    for (int j = 0; j < 5; j++)

    cin >> v[i][j];
    }


    • Схема программы:



    Рисунок 4 – Схема функции matzapis


    1. Вывод матрицы.

    Для работы этой функции, нам нужно подключить библиотеку , это делается для того чтобы сделать равные отступы. Для реализации этой программы нам нужно идти последовательно по матрице и выводить значения.

    • Реализация программы:

    void vivod(float v[5][5])

    {

    for (int i = 0; i < 5; i++)

    {

    for (int j = 0; j < 5; j++)

    {
    cout << " [" << i << "]" << "[" << j << "]" << " =" << setw(10) << setprecision(3) << v[i][j];

    }

    cout << endl;
    }

    }


    • Схема программы:



    Рисунок 5 – Схема функции vivod


    1. Транспонирование в матрице квадрат, в правом верхнем углу которого расположен самый первый ноль.

    Разделим эту подзадачу на части.

      1. Нахождение первого нуля и размера квадрата.

    Для реализации мы должны последовательно двигаться по матрице и искать первый нуль, когда мы его встретим сразу определим его индексы и найдём длину до края снизу и до левого края. Последним действием мы выравниваем значения длин по меньшей длине.

    • Реализация программы:

    void transponir(float v[5][5])

    {
    int kniz = 0, kbok = 0, e = 0, i0, j0, c;

    for (int i = 0; i < 5; i++)

    for (int j = 0; j < 5; j++)

    if (v[i][j] == 0 && e == 0)

    {

    i0 = i; j0 = j;

    for (j; j > 0; j--)

    kbok++;

    for (i; i < 4; i++)

    kniz++;

    e = 1;
    }

    if (e == 0) {

    cout << "В матрице нет нулей" << endl;

    return;

    }

    if (kniz < kbok)

    kbok = kbok - (kbok - kniz);

    if (kbok < kniz)

    kniz = kniz - (kniz - kbok);


    • Схема программы:



    Рисунок 6 – Схема нахождение первого нуля и размера квадрата.


    Рисунок 7 – Схема нахождение первого нуля и размера квадрата.


      1. Транспонирование квадрата и вывод транспонированного квадрата.

    Для реализации нам нужно переписать наш квадрат в другую матрицу, в новой матрице сделать транспонирование и вывести транспонированный квадрат

    • Реализация программы:



    float Arr[5][5], transpose[5][5];

    for (int i = i0, ki = 0; i <= i0 + kniz; i++, ki++) {

    for (int j = j0 - kbok, kj = 0; j <= j0; j++, kj++) {

    Arr[ki][kj] = v[i][j];

    }

    }
    for (int i = 0; i < 5; i++) {

    for (int j = 0; j < 5; j++) {

    transpose[i][j] = Arr[j][i];

    }

    }

    for (int i = 0; i < 5; i++) {

    for (int j = 0; j < 5; j++) {

    v[i][j] = transpose[i][j];

    }

    }

    if (v[0][0] == 0)

    cout << "Невозможно сделать квадрат из исходной матрицы";

    else

    {

    for (int i = 0; i < 5; i++)

    {

    for (int j = 0; j < 5; j++)

    if (v[i][j] >= -10 && v[i][j] <= 10)

    cout << " [" << i << "]" << "[" << j << "]" << " =" << setw(10) << setprecision(3) << v[i][j];

    cout << endl;

    }

    }

    }


    • Схема программы:



    Рисунок 8 – Схема Транспонирование квадрата и вывод транспонированного квадрата.



    Рисунок 9 – Схема Транспонирование квадрата и вывод транспонированного квадрата.


    1. Нахождение количества нулей.

    Для нахождения количества всех нулей матрицы, мы двигаемся по матрице последовательно и рассматриваем значения в ячейках, если значение = 0, то мы увеличиваем k на 1.

    • Реализация программы:

    int kolvo(float v[5][5])

    {

    int k = 0;

    for (int i = 0; i < 5; i++)

    for (int j = 0; j < 5; j++)

    if (v[i][j] == 0)

    k++;

    return k;

    }

    • Схема программы:



    Рисунок 10 – Схема Нахождение количества нулей.


    1. Замена нулей на количество нулей, если нулей больше чем количество строк матрицы.

    Если количество нулей больше количества строк, то начинаем постепенно двигаться по матрице и когда мы натыкаемся на нуль заменять его на количество строк в матрице.

    • Реализация программы:

    void zamena(float v[5][5])

    {

    int x = kolvo(v);

    if (x > 5)

    {

    for (int i = 0; i < 5; i++)

    for (int j = 0; j < 5; j++)

    if (v[i][j] == 0)

    v[i][j] = x;

    }

    }


    • Схема программы:



    Рисунок 11 – Схема Замены нулей на количество нулей, если нулей больше чем количество строк матрицы.
    Описание главной функции:
    В функции main описан главный интерфейс: ФИО, выполнившего работу, меню программы.

    Библиотеки, которые нужно подключить:

    #include

    #include

    #include

    #include

    #include "Header.h"


    • Реализация программы:

    int main()

    {

    setlocale(0, "Rus");

    float a[5][5]; int x, c = 0, b = 0;

    system("cls");

    cout << "Расчётно-графическое задание по дисциплине «Информатика»" << endl;

    cout << "Выполнил: студент ФАЭС,гр.АП - 012 Носулин.М.О." << endl << endl;

    while (c == 0)

    {

    cout << " Menu" << endl;

    cout << "Каким способом будет заполняться матрица?" << endl;

    cout << "1.Рандом" << endl;

    cout << "2.В ручную" << endl;

    cout << ">";

    cin >> x;

    switch (x)

    {

    case 1:

    system("cls");

    cout << " Menu" << endl;

    cout << " Рандомная матрица" << endl;

    matrandom(a);

    vivod(a);

    c = 1;

    break;
    case 2:

    matzapis(a);

    system("cls");

    cout << " Menu" << endl;

    cout << " Самостоятельно записанная матрица" << endl;

    vivod(a);

    c = 1;

    break;

    default:

    system("cls");

    cout << "Вы ввели не правильный символ!!!" << endl;
    break;

    }

    }

    while (b == 0)

    {

    cout << "Какие действия будут производиться над матрицей?" << endl;

    cout << "1.Подсчёт количества нулей" << endl;

    cout << "2.Замена нулей в матрице,если их больше количества строк матрицы" << endl;

    cout << "3.Транспонировать в матрице квадрат, в правом верхнем углу которого расположен самый первый ноль" << endl;

    cout << ">";

    cin >> x;

    switch (x)

    {

    case 1:

    system("cls");

    cout << " Menu" << endl;

    cout << "Исходная матрица" << endl;

    vivod(a);

    cout << " Количество нулей:" << kolvo(a);

    b = 1;

    break;
    case 2:
    system("cls");

    cout << " Menu" << endl;

    cout << "Исходная матрица" << endl;

    vivod(a);

    zamena(a);

    cout << " Изменённая матрица" << endl;

    vivod(a);

    b = 1;

    break;

    case 3:

    system("cls");

    cout << " Menu" << endl;

    cout << "Исходная матрица" << endl;

    vivod(a);

    cout << " Транспоннированный квадрат" << endl;

    transponir(a);

    b = 1;

    break;

    default:

    system("cls");

    vivod(a);

    cout << "Вы ввели не правильный символ!!!"<
    break;

    }

    }

    }
    Результаты расчетов:


    Рисунок 12 – Экран при запуске.


    Рисунок 13 – Изображение случайной матрицы и выбор действия.


    Рисунок 14 – Вывод количества 0.



    Рисунок 15 – Вывод самостоятельно-записанной матрицы и выбор действия.


    Рисунок 16 – Вывод исходной матрицы и матрицы с заменой нулей на их количество.


    Рисунок 17 – Вывод исходной матрицы и транспонированного квадрата.


    Рисунок 18 – Вывод исходной матрицы и оповещения о невозможности транспонировать квадрат.
    Вывод:
    В заключение хочу сказать, что за этот семестр я получил очень много знаний в языке C++ и все эти знания помогли мне выполнить эту расчётно-графическую работу. В этой работе я создал свою библиотеку и использовал её, также написал меню для пользователя. Научился транспонировать в матрице любой квадрат. Я получил от этого проекта много опыта: правильность оформления работы, создание меню, создание библиотеки, написание самой программы и объединение этого всего воедино.

    .






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