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

ОЭВМ_Лаба1

.docx
Скачиваний:
4
Добавлен:
17.06.2023
Размер:
342.19 Кб
Скачать

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

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

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

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

Кафедра информационных систем

отчет

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

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

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

Студенты гр. 9373

Заболотников М.Е. и Петрова С.В.

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

Гречухин М.Н.

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

2020

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

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

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

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

4. Блок-схема алгоритма:

Рис. 1. Основной алгоритм программы

Рис. 2. Алгоритм первой ветки: Case 1

Рис. 3. Алгоритм второй ветки: Case 2

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

#include<iostream>

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

using namespace std;

union DOUBLE

{

long double chislo;

unsigned char bits[8];

} number;

int main()

{

setlocale(LC_ALL, "Rus");

int key = true;

bool good;

do

{

do

{

system("cls");

printf("Какой тип данных будем смотреть?\n");

printf("1. unsigned char (символьный)\n");

printf("2. long double (вещественный)\n");

good = true;

key = _getch();

if (key != 49 && key != 50 && key != 27) good = false;

} while (!good);

switch (key)

{

case '1':

{

system("cls");

unsigned char symbol;

printf("Введите один символ: ");

symbol = _getch();

cout << symbol << endl;

int bit;

for (int i = 7; i >= 0; i--)

{

bit = symbol & (1 << i);

if (bit != 0) bit = 1;

cout << bit << " ";

}

int key_2 = 1;

do

{

int n;

printf("\nВведите номер бита (от 1 до 8), который хотите изменить: ");

cin >> n;

int s;

printf("\nВведите состояние бита (1 или 0): ");

cin >> s;

if (s == 0) symbol = symbol & (~(1 << (n - 1)));

if (s == 1) symbol = symbol | (1 << (n - 1));

for (int i = 7; i >= 0; i--)

{

bit = symbol & (1 << i);

if (bit != 0) bit = 1;

cout << bit << " ";

}

printf("\nВ исходном формате: %c\n", symbol);

printf("\nПродолжить? 1 - да, 0 - нет");

key_2 = _getch();

} while (key_2 == 49);

}

break;

case '2':

{

printf("Введите число: ");

cin >> number.chislo;

for (int i = 7; i >= 0; i--)

{

for (int j = 7; j >= 0; j--)

{

int a;

a = number.bits[i] & (1 << j);

if (a) a = 1;

cout << a;

}

cout << " ";

}

int key_3 = 1;

do

{

int n;

printf("\nВведите номер бита (от 1 до 64), который хотите изменить: ");

cin >> n;

int s;

printf("\nВведите состояние бита (1 или 0): ");

cin >> s;

n -= 1;

int qroups = n / 8;

int ost = n % 8;

if (s == 0) number.bits[qroups] = number.bits[qroups] & (~(1 << ost));

if (s == 1) number.bits[qroups] = number.bits[qroups] | (1 << ost);

for (int i = 7; i >= 0; i--)

{

for (int j = 7; j >= 0; j--)

{

int a;

a = number.bits[i] & (1 << j);

if (a) a = 1;

cout << a;

}

cout << " ";

}

cout << "\nЧисло в исходном формате: " << number.chislo;

printf("\nПродолжить? 1 - да, 0 - нет");

key_3 = _getch();

} while (key_3 == 49);

}

break;

}

} while (key != 27);

printf("\n\n");

system("pause");

return 0;

}

6. Примеры запуска программы:

Рис. 4. Меню программы

Рис. 5. Работа с символьным типом данных

Рис. 6. Изменение состояния заданного бита

Рис. 7. Работа с вещественным типом данных

Рис. 8. Изменение состояния битов числа (в том числе и знакового)

7. Структурная схема аппаратных средств ПК:

Рис. 9. Структурная схема аппаратных средств ПК

Соседние файлы в предмете Организация ЭВМ и вычислительных систем