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

  • ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ № 1 по дисциплине

  • Цель работы


  • Тестирование

  • Исходный код программы

  • Отчет по практической работе 1 по дисциплине Структуры и алгоритмы обработки данных


    Скачать 0.8 Mb.
    НазваниеОтчет по практической работе 1 по дисциплине Структуры и алгоритмы обработки данных
    Дата02.03.2022
    Размер0.8 Mb.
    Формат файлаdocx
    Имя файлаotchet1_siaod (1).docx
    ТипОтчет
    #380547










    МИНОБРНАУКИ РОССИИ

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

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

    «МИРЭА Российский технологический университет»

    РТУ МИРЭА

    Институт Информационных технологий


    Кафедра Математического обеспечения и стандартизации информационных технологий

    ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ 1

    по дисциплине

    «Структуры и алгоритмы обработки данных»
    Тема: «Поразрядные операции и их применение»




    Выполнил студент группы ИНБО-03-20





    Зацепилина А.В.


    Принял преподаватель



    Филатов А.С.




    Лабораторная работа выполнена

    «__»_______202__ г.


    (подпись студента)











    «Зачтено»


    «__»_______202__ г.


    (подпись руководителя)

    Москва 2021
    1. Цель работы


    Получение навыков применения поразрядных операций в алгоритмах.
    1. Постановка задачи


    1. Разработать программу, которая продемонстрирует выполнение упражнений варианта 14. Результаты выполнения упражнения выводить на монитор.

    Требования к упражнениям:

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

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

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

    4. Разработать функцию, которая делит значение целочисленной переменной, введенной пользователем, на делитель, используя соответствующую поразрядную операцию.

    5. Разработать функцию, реализующую задание, в которой используются только поразрядные операции. В выражении используется маска – переменная. Маска инициализируется единицей в младшем разряде (маска 1) или единицей в старшем разряде (маска 2). Изменяемое число и n вводится с клавиатуры.

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

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

    Вариант №14. Условие задания:

    Упражнение 1

    12-ый, 14-ый, 3-ий

    Упражнение 2

    Все нечетные

    Упражнение 3

    512

    Упражнение 4

    512

    Упражнение 5

    Установить n-ый бит в 1, используя маску 2
    1. Решение


    Поразрядные операции выполняются над отдельными разрядами или битами чисел. В данных операциях в качестве операндов могут выступать только целые числа. Каждое число имеет определенное двоичное представление. Логические операции над числами представляют поразрядные операции.
    В языке программирования C/C++ используются следующие логические операции: && – логическое «И»; || – логическое «ИЛИ»; !– логическое «НЕТ». Также используются две операции поразрядного сдвига:

    << – сдвиг влево значения операнда на заданное количество бит.

    >> – сдвиг вправо значения операнда на заданное количество бит. Если в программе нужно, чтобы операция умножения/деления целочисленных операндов на 2, 4, 8 и т.д. происходила максимально быстро, то целесообразно использовать операцию сдвига влево/вправо.

    1. Заменяем 12-ый, 14-ый, 3-ий биты на 1 с помощью поразрядного ИЛИ(“|”) .

    2. Заменяем все нечетные биты на 0 с помощью поразрядного И(“&”) .

    3. Делаем сдвиг влево двоичного кода (умножение на 2n) с помощью (“<<”).

    4. Делаем сдвиг вправо двоичного кода (деление на 2n) с помощью (“>>”).

    5. Устанавливаем n-ый бит в 1 с помощью поразрядных операций (“>>”) и (“|”).









    Рис. 1 Интерфейс программы
    1. Тестирование


    Таблица 1. Рабочий прогон программы

    Входные данные

    Ожидаемый результат

    Выходные данные

    0xA21

    00000000000000000101101000101001

    00000000000000000101101000101001

    0xF22

    00000000000000000000010100000000

    00000000000000000000010100000000

    12

    00000000000000000001100000000000

    00000000000000000001100000000000

    1024

    00000000000000000000000000000010

    00000000000000000000000000000010

    123

    2

    00000000000000000000000001111111

    00000000000000000000000001111111

    Из результатов выполнения программы видно, что программа работает правильно.
    В задании 1 число А21 переводим в двоичную систему счисления 00000000000000000101101000101001. Заменяем 12-ый, 14-ый, 3-ий биты на 1 с помощью маски 00000000000000000101000000001000. Получается 00000000000000000101101000101001.



    Рис. 2 Задание 1

    В задании 2 число F22 переводим в двоичную систему счисления 00000000000000000000111100100010. Заменяем нечетные биты на 0 с помощью маски 1010101010101010101010101010101. Получается 00000000000000000000010100000000.



    Рис. 3 Задание 2

    В задании 3 поразрядная операция производится над введённым пользователем значением в десятичном виде. Посредством умножения введённого пользователем значения на 2^n происходит побитовый сдвиг влево на 9 бит.



    Рис. 4 Задание 3

    В задании 4 поразрядная операция производится над введённым пользователем значением в десятичном виде. Посредством деления введённого пользователем значения на 2^n происходит побитовый сдвиг вправо на 9 бит.



    Рис. 5 Задание 4

    В задании 5 поразрядная операция производится c введённым пользователем значением (123) в десятичном виде и номером заменяемого бита. Посредством операции логического сложения мы заменяем 2 бит на единицу.



    Рис. 6 Задание 5
    1. Вывод


    В результате выполнения работы я освоила алгоритмы работы с поразрядными операциями и их реализацию на языке программирования C++
    1. Исходный код программы


    #include

    #include

    #include
    using namespace std;
    void solve1(int &n){

    n = n | 0x5008;

    }
    void solve2(int &l){

    l = l & 0x55555555;

    }
    void solve3(unsigned int &p){

    p = (p<<9);

    }
    void solve4(unsigned int &number){

    number = (number>>9);

    }
    void solve5(unsigned int &num, unsigned int mask, int bit) {

    bit = 31 - bit;

    mask = mask >> bit;

    num = num | mask;

    }
    void print_in_bit(int n) {

    bitset<32> x(n);

    cout << x << endl;

    }
    void write(unsigned int &p){

    cout << "Введите число: ";

    cin >> p;

    }
    void changes(unsigned int &bit){

    cout << "Введите изменяемый бит: ";

    cin >> bit;

    }
    //1

    void task1() {

    int n = 0xA21;

    print_in_bit(n);

    solve1(n);

    print_in_bit(n);

    }

    //2

    void task2() {

    int l = 0xF22;

    print_in_bit(l);

    solve2(l);

    print_in_bit(l);

    }
    //3

    void task3() {

    unsigned int p;

    write(p);

    print_in_bit(p);

    solve3(p);

    print_in_bit(p);

    }

    //4

    void task4() {

    unsigned int number;

    write(number);

    print_in_bit(number);

    solve4(number);

    print_in_bit(number);

    }

    //5

    void task5() {

    unsigned int numb, bit;

    write(numb);

    print_in_bit(numb);

    changes(bit);

    unsigned int mask = 0x80000000;

    solve5(numb, mask, bit);

    print_in_bit(numb);

    }

    int main() {
    cout << "Введите номер задания" << endl << "1. Функция замены указанных битов в константе на 1 с помощью подразрядных операций" << endl << "2. Функция замены указанных битов в константе на 0 с помощью подразрядных операций" << endl << "3. Функция умножения с помощью подразрядных операций" << endl << "4. Функция деления с помощью подразрядных операций" << endl << "5. Функция установки n-го бита в 1 с помощью подразрядных операций" << endl;
            int num = 0;

            do {

                    cin.clear();

                    cout<
                    cin>>num;

                    cout<<"Номер: "<
                   

                    switch (num) {

                            case 1:

                                    task1();

                                    break;

                            case 2:

                                    task2();

                                    break;

                            case 3:

                                    task3();

                                    break;

      case 4:

                                    task4();

                                    break;

      case 5:

                                    task5();

                                    break;

    default:

                                    break;

                    }

            } while (num>0);

                    return 0;

    }




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