ОЭВМ_Лаба1
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра информационных систем
отчет
по лабораторной работе №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. Структурная схема аппаратных средств ПК