Главная страница

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 7 «Поразрядная обработка целых чисел». ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 7. Отчет о лабораторной работе 7 Поразрядная обработка целых чисел


Скачать 174.1 Kb.
НазваниеОтчет о лабораторной работе 7 Поразрядная обработка целых чисел
АнкорОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 7 «Поразрядная обработка целых чисел
Дата19.02.2022
Размер174.1 Kb.
Формат файлаdocx
Имя файлаОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 7.docx
ТипОтчет
#367248

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

Кафедра аэрокосмических компьютерных и программных систем (кафедра 14)


ОЦЕНКА ПРЕПОДАВАТЕЛЬ


старший преподаватель













должность, уч. степень, звание




подпись, дата




инициалы, фамилия


ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ 7
«Поразрядная обработка целых чисел»


Линейный алгоритм по ГОСТ 19.701-90


по дисциплине: “Основы программирования”


РАБОТУ ВЫПОЛНИЛ(А)


СТУДЕНТ(КА) ГР.

1043
















номер группы




подпись, дата




инициалы, фамилия


Санкт-Петербург 2021

  1. Цель работы:


Ознакомление с поразрядными операциями и сдвигами.
  1. Задание


Задача 7.16

В длинном целом числе N все серии единиц, состоящие из трёх и более

единиц, заменить на нули.
  1. Формализация задачи


На вход поступает положительное целое число, не превышающее 2147483647.

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

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

В ходе задачи мы используем ещё несколько переменных: iисходное число, i2 – изменённое число , d– результат логического умножения исходного числа на единицу. Их тип определяем как «long int».oneсчётчик единиц, two счетчик который в который записывается номер текущего бита числа, с права на лево,if3 – переменная в двоичную форму которого записываются необходимое число единиц,l счетчик для цикла for. Их тип определяем как «int», так как данные переменные имеют только целочисленные значения. Так же несколько вспомогательных массивов типа «char» для вывода двоичной формы чисел, buffer – для вывода исходного числа, buffer2 – для вывода изменённого числа. Их размерность 33.


  1. Набор тестовых примеров для проверки задачи


Таблица 1 «Тестовые примеры для проверки задачи»


Номер примера

Пример

Примечание

Результат

1

1000

11111010002

10002

2

1493

101 110101012

100000101012

3

-4783248

1001000 11111100 100100002

100100000000000100100002




На лист 2

A

На лист 2

  1. Схемы алгоритма


Из

Листа

2


Н

Рисунок 1 – схема алгоритма

На лист 2


B

if3<<1

И (d=1 или

i=1)

i!=1

C

l+1

if3|1

l

one=>1

one+1

d=1

d=i&1

two+1

“ ”

i=-i

i<0

i

НАЧАЛО


Лист 1


i2

i

А

Н

i>>1

С

if =0

i2^if3

i=1

В



Из

Листа 1

Лист 2


one-1





if3<<(two-one-1)



Из

Листа 1



d=0




one=0





На лист 1


Из

Листа 1











НАЧАЛО

Рисунок 1

  1. Листинг программы


#include

#include

#include

int main(void) {

long int i, d, i2 = 0;

int one = 0, two = 0, if3 = 0;

char buffer[33], buffer2[33];

printf("Enter a number1: ");

scanf_s("%ld", &i);

setlocale(LC_ALL, "RUS");

if (i < 0) {

printf("числобует обработанно как положительное \n");

i = -i;

}

itoa(i, buffer, 2);

i2 = i;

while (i != 0)

{

two++;

d = i & 1;

if (d == 1) {

one++;

}

if (one >= 3 && (d == 0 || i == 1 )) {

for (int l = 0; l < one; l++) {

if3 <<= 1;

if3 |= 1;

}

if (i == 1)

one--;

if3 <<= (two - one - 1);

i2 ^= if3;

if3 = 0;

}

if (d == 0) {

one = 0;

}

i >>= 1;

}

itoa(i2, buffer2, 2);

printf("binary start: %s\n", buffer);

printf("binary final: %s\n", buffer2);

}


  1. Вывод. Доказательство правильности работы





Рисунок 2 Тестовый пример 1



Рисунок 3 Тестовый пример 2


Рисунок 4 Тестовый пример 3

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

  1. Вывод


В ходе проведения лабораторной работы мы ознакомились с поразрядными операциями и сдвигами. А именно: решили типовую задачу на обнуление элементов удовлетворяющих условию, представив её в виде схемы алгоритма, предварительно описав все ограничения и тонкости в формализации. Затем перенесли данный алгоритм на язык Си, реализовав его с помощью оператора

«if», циклов «while», «for» и использования масок, получив программу и доказав ее правильность в предыдущем пункте лабораторной работы.


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