Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная_работа_1_ЭВМ

.docx
Скачиваний:
0
Добавлен:
28.12.2024
Размер:
73.87 Кб
Скачать

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

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №1

по дисциплине «Организация ЭВМ и систем»

Тема: Исследование внутреннего представления различных

форматов данных

Студент гр.

Преподаватель

Ельчанинов М.Н.

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

2022

Цель работы.

Знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке.

Задание на лабораторную работу.

1. Разработать алгоритм ввода с клавиатуры типов данных float и long и показать на экране их внутреннее представление в двоичной системе счисления. 

2. Написать и отладить программу на языке С++, реализующую разработанный алгоритм. 

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

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

Схема алгоритма:

Текст программы:

#include <iostream>

#include <conio.h>

#include <locale.h>

#include <math.h>

#include <bitset>

#include <limits>

#include <climits>

#include <iterator>

#include <algorithm>

#include <string>

#include <Windows.h>

#include <vector>

#undef max

using namespace std;

int key;

int main() {

setlocale(LC_ALL, "rus");

while (key != 27) {

cout << "Выберите тип данных: 1 - float, 2 - long " << endl;

key = _getch();

if (key == '1') {

union

{

float input; // assumes sizeof(float) == sizeof(int)

int output;

} data{};

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

for (;;) {

if ((std::cin >> data.input).good()) break;

if (std::cin.fail()) {

cin.clear();

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cout << "Неверный ввод, повторите.\n";

}

}

std::bitset<sizeof(float)* CHAR_BIT> bits(data.output);

cout << "Двоичное представление вашего числа: " << bits << endl;

cout << "Введите количество бит в группе: ";

int size_group;

cin >> size_group;

cout << "Введите номер младшего бита в 1 группе: ";

int bit_1;

cin >> bit_1;

cout << "Введите номер младшего бита в 2 группе: ";

int bit_2;

cin >> bit_2;

int num = sizeof(bits) / sizeof(bits[0]);

//reverse(bits, num);

string string_bits = bits.to_string();

//string string_bits = "1101101";

string swap_bit_1;

string swap_bit_2;

std::reverse(string_bits.begin(), string_bits.end());

swap_bit_1 = string_bits.substr(bit_1, size_group);

swap_bit_2 = string_bits.substr(bit_2, size_group);

string temp = swap_bit_1;

swap_bit_1 = swap_bit_2;

swap_bit_2 = temp;

string_bits.replace(bit_1, size_group, swap_bit_1);

string_bits.replace(bit_2, size_group, swap_bit_2);

std::reverse(string_bits.begin(), string_bits.end());

cout << "Ваше число и результат работы: " << endl;

cout << bits << endl;

cout << string_bits << endl;

cout << "Чтобы вернуться, нажмите 0 " << endl;

key = _getch();

if (key == 0) {

system("cls");

break;

}

}

if (key == '2') {

long data;

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

for (;;) {

if ((std::cin >> data).good()) break;

if (std::cin.fail()) {

cin.clear();

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cout << "Неверный ввод, повторите.\n";

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

}

}

std::bitset<16> bits(data);

//std::cout << bits << std::endl;

cout << "Двоичное представление вашего числа: " << bits << endl;

cout << "Введите количество бит в группе: ";

int size_group;

cin >> size_group;

cout << "Введите номер младшего бита в 1 группе: ";

int bit_1;

cin >> bit_1;

cout << "Введите номер младшего бита в 2 группе: ";

int bit_2;

cin >> bit_2;

//reverse(bits, num);

string string_bits = bits.to_string();

//string string_bits = "1101101";

string swap_bit_1;

string swap_bit_2;

std::reverse(string_bits.begin(), string_bits.end());

swap_bit_1 = string_bits.substr(bit_1, size_group);

swap_bit_2 = string_bits.substr(bit_2, size_group);

string temp = swap_bit_1;

swap_bit_1 = swap_bit_2;

swap_bit_2 = temp;

string_bits.replace(bit_1, size_group, swap_bit_1);

string_bits.replace(bit_2, size_group, swap_bit_2);

std::reverse(string_bits.begin(), string_bits.end());

cout << "Ваше число и результат работы: " << endl;

cout << bits << endl;

cout << string_bits << endl;

cout << "Чтобы вернуться, нажмите 0 " << endl;

key = _getch();

if (key == 0) {

system("cls");

break;

}

}

}

return 0;

}