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

  • Для каждого пункта задания написать подпрограмму-функцию

  • РГЗ, информатика, 1 семестр. ргз хомуткин. Освоение принципов разработки программ обработки двумерных массивов


    Скачать 1.98 Mb.
    НазваниеОсвоение принципов разработки программ обработки двумерных массивов
    АнкорРГЗ, информатика, 1 семестр
    Дата03.03.2023
    Размер1.98 Mb.
    Формат файлаdocx
    Имя файларгз хомуткин.docx
    ТипРеферат
    #967159



    Федеральное агентство связи

    Федеральное государственное бюджетное учреждение образовательное

    высшего образования

    «Сибирский государственный университет телекоммуникаций и

    информатики»

    (СибГУТИ)

    Кафедра телекоммуникационных сетей и вычислительных средств
    11.03.02 Инфокоммуникационные технологии и системы связи,

    профиль Сети связи и системы коммутации

    (очная форма обучения)
    РАСЧЕТНО - ГРАФИЧЕСКАЯ РАБОТА

    по дисциплине «Информатика»

    «Освоение принципов разработки программ обработки двумерных массивов»


    Выполнил:

    студент ИТ,

    гр. АП-102 / Т. А. Коровин /

    «__»_________ 2021 г. (подпись)
    Проверил:

    Преподаватель / Л.Ф. Лебеденко /

    «__»_________ 2021 г. (подпись)
    Новосибирск 2021

    Содержание




    ВВЕДЕНИЕ


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

    Несмотря на наличие более новых языков программирования, таких как Java, и языков на платформе .NET, язык C++ остается популярным и продолжает развиваться. Более новые языки предоставляют определенные средства, такие как управление памятью за счет сбора “мусора”, реализованное в компоненте исполняющей среды, которые нравятся некоторым программистам. Однако там, где нужен подробный контроль за производительностью создаваемого приложения, эти же программисты все еще выбрали бы язык C++. Многоуровневая архитектура, где веб-сервер создается на языке C++, а пользовательская часть приложения на HTML, Java или .NET, является в настоящее время вполне обыденной.

    Целью расчетно-графического задания является освоение принципов разработки программ обработки двумерных массивов (матриц).

    Задачи работы:

    Вариант - 5

    Для каждого пункта задания написать подпрограмму-функцию

    - сформировать целочисленную матрицу А(5х6);

    - найти в матрице сумму положительных чисел;

    - удвоить отрицательные элементы матрицы.

    1. Краткая теория.



      1. Функции.

    Функции в языке C++ такие же, как и в языке С. Функции (function) — это элементы, позволяющие разделить содержимое вашего приложения на функциональные блоки, которые могут быть вызваны по вашему выбору. При вызове функция обычно возвращает значение вызывающей функции. Самая известная функция, конечно, — main (). Она распознается компилятором как отправная точка приложения C++ и должна возвратить значение типа int (т.е. целое число).

    Определение функции всегда состоит из блока операторов. Оператор return необходим, если функция не объявлена с типом возвращаемого значения void. Блок операторов (statement block) содержит операторы в фигурных скобках ({. . .}), которые выполняются при вызове функции. Применение функции называется вызовом функции. Когда функция объявлена, при вызове ей нужно передать аргументы (argument), являющиеся значениями, затребованными функцией в ее списке параметров (функция может быть объявлена несколькими параметрами).

      1. Массивы.

    Как и другие переменные в C++, массив должен быть определен перед его использованием. Как и другие определения, определение массива включает в себя тип хранящихся в нем переменных и имя массива. Но помимо этого для массива необходимо указать размер, который определяет, сколько элементов массив может содержать. В языке C++ массивы позволяют сохранить в памяти элементы данных одинакового типа в последовательном порядке.

    Таким образом, для объявления массива в языке C++ используется следующий синтаксис:

    тип_элемента имя_массива [количество_элементов] = {необязательные исходные значения}

    Так, целочисленный массив из пяти целых чисел можно инициализировать пятью разными целочисленными значениями:

    int MyNumbers [5] = {34, 56, -21, 5002, 365};

    Все элементы массива можно также инициализировать одним значением:

    int MyNumbers [5] = {100}; // инициализировать все элементы

    // значением 100

    Вы можете также инициализировать только часть элементов массива:

    int MyNumbers [5] = {34, 56}; // инициализировать первые два элемента

    Вы можете определить длину массива (т.е. количество элементов в нем) как константу и использовать ее при определении массива:

    const int ARRAY_LENGTH = 5;

    int MyNumbers [ARRAY_LENGTH] = {34, 56, -21, 5002, 365};

    Если исходное количество элементов в массиве неизвестно, можно не указывать его:

    int MyNumbers [] = {2011, 2052, -525};

    Для обращения к элементам массива можно использовать отсчитываемый от нуля индекс (index). Индексы называются отсчитываемыми от нуля потому, что первый элемент массива имеет индекс 0. Так, первое целочисленное значение, хранимое в массиве MyNumbers, — это MyNumbers [0], второе — MyNumbers [1] и т.д. Пятый элемент — MyNumbers [4]. Другими словами, индекс последнего элемента в массиве всегда на единицу меньше его длины.

      1. Многомерные массивы.

    Массив имеет размерность, следовательно, существует не только одномерные, но и двухмерные и многомерные массивы.

    Язык C++ позволяет объявлять многомерные массивы, указав количество элементов, которое необходимо зарезервировать по каждой размерности. Следовательно, двумерный массив целых чисел, можно объявить так:

    int Massiv [2][3];

    Или так:

    int Massiv [2][3] = {{0, 1, 2}, {3, 4, 5}};

    Как видите, синтаксис инициализации подобен используемому при инициализации двух одномерных массивов. Обратите внимание: это не два массива, поскольку массив двумерный, это два его ряда. Если бы этот массив состоял из трех рядов и трех столбцов, его объявления и инициализация выглядели бы следующим образом:

    int ThreeRowsThreeColumns [3][3] = {{-501, 206, 2011}, {989, 101, 206}, {303, 456, 596}};

    1. Проектирование подфункций.

    В результате при решении проектировании информационной системы по обработке матрицы, было разработано 8 подфункций.

      1. Функция void cout menu() – для вывода меню на экран.

    Блок-схема:



    Программа:

    void cout_menu()

    { cout << "\e[1;33m\t\tМеню\n\e[0m";

    cout<<"1. Сведенья о разработчике\n";

    cout<<"2. Создание матрицы\n";

    cout<<"3. Обработка матрицы\n";

    cout<<"4. Вывод матрицы\n";

    cout<<"5. Выход\n\n";

    cout<<"\e[1;34mВведите выбранный пункт> \e[0m";

    }

      1. Функция void aftor() – для вывода сведений о разработчике.

    Блок-схема:



    Программа:

    void aftor()

    {

    cout<<"ФИО: \e[1;36mКоровин Тимофей Алексеевич\n\e[0m";

    cout<<"Группа: \e[1;36mАП-102\n\e[0m";

    }

      1. Функция void vivod(int A[5][6]) – для вывода матрицы.

    Блок-схема:



    Программа:

    void vivod(int A[5][6])

    {

    int i,j;

    cout<<"\e[1;32mМатрица:\n\e[0m";

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

    {

    for(j=0;j<6;j++)

    cout<
    cout<
    }

    }

      1. Функция void form(int A[5][6]) – для формирования матрицы случайными числами.

    Блок-схема:



    Программа:

    void form(int A[5][6])

    {

    int i,j;

    srand(time(0));

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

    for(j=0;j<6;j++)

    A[i][j]=rand()%100-50+1;

    vivod(A);

    }


      1. Функция void form2(int A[5][6]) – для формирования матрицы числами от -15 до 14.

    Блок-схема:



    Программа:

    void form(int A[5][6])

    {

    int i,j;

    srand(time(0));

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

    for(j=0;j<6;j++)

    A[i][j]=rand()%100-50+1;

    vivod(A);

    }

      1. Функция void form3(int A[5][6]) – для формировании матрицы из чисел вводимых с клавиатуры.

    Блок-схема:



    Программа:

    void form3(int A[5][6])

    {

    int i,j;

    system("clear");

    cout<<"\e[1;34m*Вводится 6 чисел за раз*\n\e[0m";

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

    cout<<"Введите \e[1;36m"<<5-i<<"\e[0m раз:\n";

    for(j=0;j<6;j++)

    cin>>A[i][j];

    system("clear");}

    cout<<"\e[1;32mЭто ваша матрица:\n\e[0m";

    vivod(A);

    }

      1. Функция void obr(int A[5][6]) – для нахождения суммы положительных элементов.

    Блок-схема:



    Программа:

    void obr(int A[5][6])

    {

    int sum=0,i,j;

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

    for(j=0;j<6;j++)

    if(A[i][j]>0)

    sum+=A[i][j];

    cout<
    cout<<"Сумма = "<
    }

      1. Функция void obr2(int A[5][6]) – для удвоения отрицательных элементов матрицы.

    Блоу-схема:



    Программа:

    void obr2(int A[5][6])

    {

    int i,j;

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

    for(j=0;j<6;j++)

    if(A[i][j]<0)

    A[i][j]*=2;

    vivod(A);

    }

    1. Блок-схема функции int main().

    Для показа работы программы был разработан интерфейс типа - меню. Блок-схема функции int main() выглядит следущим образом:

    Для удобства разобьем схему на части:

    • Начало функции;

    • Выбор пункта (1 пункт);

    • Выбор пункта (2 пункт);

    • Выбор пункта (3 пункт);

    • Выбор пункта (4-5 пункт);



      1. Начало функции:





      1. Выбор пункта (1 пункт):




      1. Выбор пункта (2 пункт):







      1. Выбор пункта (3 пункт):


    нет

    да




      1. Выбор пункта (4-5 пункт)





    1. Код функции int main().



    int main()

    {

    int f=0,n=0,X[5][6];

    while(1){

    system("clear");

    cout_menu();

    cin>>n;

    cout<
    switch(n)

    {

    case 1:

    aftor();

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    case 2:

    cout<<"\e[1;32m\tКак сформировать матрицу:\n\e[0m";

    cout<<"1. Рандомные числа\n";

    cout<<"2. От -15 до 14\n";

    cout<<"3. Ввести самому\n";

    cout<<"\e[1;34m>>>> \e[0m";

    cin>>n;

    switch(n)

    {

    case 1:

    form(X); f=1;

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    case 2:

    form2(X); f=1;

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    case 3:

    form3(X); f=1;

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    default :

    cout<<"\e[1;31mНужно выбрать пункт\n\e[0m";

    getchar();

    getchar();

    }

    break;

    case 3:

    if(f==0){

    cout<<"\e[1;31mМатрица не сформирована!\n\e[0m";

    getchar();

    getchar();

    break;}

    cout<<"\e[1;32m\tКак обработать матрицу:\n\e[0m";

    cout<<"1. Найти в матрице сумму положительных чисел\n";

    cout<<"2. Удвоить отрицательные элементы матрицы\n";

    cout<<"\e[1;34m>>>> \e[0m";

    cin>>n;

    switch(n)

    {

    case 1:

    obr(X);

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    case 2:

    obr2(X);

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    default :

    cout<<"\e[1;31mНужно выбрать пункт\n\e[0m";

    getchar();

    getchar();

    }

    break;

    case 4:

    if(f==0){

    cout<<"\e[1;31mМатрица не сформирована!\n\e[0m";

    getchar();

    getchar();

    break;}

    vivod(X);

    cout<
    cout<<"\e[1;34mНажмите любую кнопку...\n\e[0m";

    getchar();

    getchar();

    break;

    case 5:

    return 0;

    default :

    cout<<"\e[1;31mВы не выбрали пункт меню\e[0m";

    getchar();

    getchar();

    }

    }

    }

    1. Результаты расчетов.

    При запуске программы появляется интерфейс в виде текстового меню:



    Выбрав 1 пункт меню, открывается сведенья о разработчике, где написано фио и группа студента:



    Выбрав 2 пункт меню, открывается подменю “Как сформировать матрицу”:



    При выборе 1 пункта, матрица генерируется из случайных чисел от -51 до 50:



    При выборе 2 пункта, матрица генерируется из чисел от -15 до 14 по порядку:



    При выборе 3 пункта, пользователь должен ввести элементы матрицы с клавиатуры; для удобства слежки вписываемых чисел, пользователь вводит строчку из 6 чисел 5 раз:







    Возвращаясь к главному меню, при выборе 4 пункта, появляется подменю “Как обработать матрицу”:



    При выборе 1 пункта, все положительные элементы матрицы суммируются, и полученная сумма выводится на экран (в данный момент используется прошлая матрица, которую вводили с клавиатуры):



    При выборе 2 пункта, все отрицательные элементы матрицы удваиваются:



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

    Но если взять матрицу, в котором находятся отрицательные элементы (например сформировав матрицу из чисел от -15 до 14 идущих по порядку), то отрицательные элементы удвоятся:



    При выборе 4 пункта из главного меню, выводится матрица:



    Также программа может реагировать на некоторые ошибки. Например если было введено число, которое не относится к пунктам меню или подменю:







    Также программа не позволит использовать 3 и 4 пункт главного меню, если не была сформирована матрица.



    При выборе 5 пункта главного меню, происходит выход из программы:


    ЗАКЛЮЧЕНИЕ


    В данной расчетно - графической работе были получены результаты по всем поставленным заданиям. Было создано 8 подфункций, каждая из которых отвечала за те или иные действия, например вывода на экран меню или формирование матрицы. При ходе разработки этих функций мы освоили основные принципы разработки программ обработки двумерных массивов (матриц), а при построение полной программы мы изучили как взаимодействуют функции, и как правильно разрабатывать и визуализировать меню (интерфейс) программы.

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

    БИБЛИОГРАФИЯ




    1. Освой самостоятельно C++ за 21 день: учебник / Сиддхартха Рао. – 7-е издание. – Москва, Санктя Петербург, Киев: SAMS, 2013. – 650 с.

    2. Объектно-ориентированное программирование в С++: учебник / Р. Лафоре. – 4-е издание. – Москва, Санкт-Петербург, Нижний Новгород, Воронеж Ростов-на-Дону, Екатеринбург, Самара, Новосибирск Киев, Харьков, Минск: SAMS, Питер, 2004. – 921 с.





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