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

лабы 1-й сем / лаба 1 / лаба оргэвм 1 (1)

.docx
Скачиваний:
6
Добавлен:
09.01.2023
Размер:
1.13 Mб
Скачать

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

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

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

ОТЧЕТ

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

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

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

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

__________________ Анисимов А.В.

Задание (вар.11):

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

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

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

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

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

#include <iostream>

#include <cstdlib>

#include <cstring>

using namespace std;

int checkLd(char *s){

char *notLd;

strtold(s, &notLd);

if (strlen(notLd) > 0) return 0;

else return 1;

}

void charToBytes(char n, bool *cBytes){

for(int i = 8; i >= 0; i--) {

cBytes[7 - i] = ((n >> i) & 1);

}

}

int ldToBytes(long double n, bool *lBytes){

int indexer = 0;

for (int i = 0;i<64;i++){

lBytes[i] = false;

}

union ld{

char z[8];

long double num;

}rs{};

rs.num = n;

for(int i = 0; i < 8; i++) {

for (int j = 0; j < 8; j++)

{

lBytes[indexer++] = ((rs.z[8 - i - 1] >> (8 - j - 1)) & 1);

}

}

return indexer;

}

char bytesToChar(bool *cBytes){

char result;

for (int i = 0; i < 8; i++){

result = result << 1;

result = result | cBytes[i];

}

return result;

}

long double bytesToLong(bool *lBytes){

char charLBytes[64];

long double result;

for (int i = 0; i < 64; i++)

charLBytes[i] = lBytes[i];

memcpy(&result, &charLBytes, sizeof(long double));

return result;

}

void mirror(bool *bytes, int len, int n, int b){

int temp = 0; // 2 - 1; 3 - 2; 4 - 2; 5 - 3; 6 - 3; 7 - 4;

n--;

b = len - b;

for(int i = b, j = (b + n), k = 0; k < ((n / 2) + (n % 2)); i++, j--, k++){

temp = bytes[i];

bytes[i] = bytes[j];

bytes[j] = temp;

}

}

int main(){

char *trash;

int counter = 0, b = 0, n = 0, key = 0;

char inp[64] = {};

bool cBytes[8] = {};

bool lBytes[64] = {};

char A = 0;

long double B = 0;

cout << "char: ";

cin >> A;

cout << "long double B: ";

cin >> inp;

while (!checkLd(inp)){

cout << "long double B: ";

cin >> inp;

}

B = strtold(inp, &trash);

charToBytes(A, cBytes);

cout << "Char representation in binary: ";

for (bool cByte : cBytes){

if (counter && (counter % 4 == 0)) cout << " ";

cout << cByte;

counter++;

}

cout << endl;

ldToBytes(B, lBytes);

counter = 0;

cout << "Long double representation in binary: ";

for (bool lByte : lBytes)

{

cout << lByte;

counter++;

if (counter % 4 == 0) cout << ' ';

}

cout << endl;

cout << "Use algorithm in..." << endl << "1 - char" << endl << "2 - long double" << endl;

while((key < 1) || (key > 2)) {

cout << "Your choice: ";

cin >> key;

}

cout << "type begin: ";

cin >> b;

cout << "type num of symbols: ";

cin >> n;

if(key == 1) {

mirror(cBytes, 8, n, b);

counter = 0;

cout << "Result: ";

for (bool cByte : cBytes){

if (counter && (counter % 4 == 0)) cout << " ";

cout << cByte;

counter++;

}

cout << endl;

}

else{

mirror(lBytes, 64, n, b);

counter = 0;

cout << "Result: ";

for (bool lByte : lBytes){

if (counter && (counter % 4 == 0)) cout << " ";

cout << lByte;

counter++;

}

cout << endl;

}

cout << endl << "char: ";

cout << bytesToChar(cBytes) << endl;

cout << endl << "long double: ";

cout << bytesToLong(lBytes) << endl;

return 0;

}

Контрольные тесты

Тест 1:

Тест 2:

Информация о программной среде

Разработка велась в интегрированной среде разработки CLion 2022, созданной компанией JetBrains.

Ссылка на загрузку IDE: https://www.jetbrains.com/clion/ (программа платная, есть бесплатный доступ для образовательных организаций и 30-дневный пробный период для физических лиц).

Процесс установки:

  1. Загрузка файла с официального сайта

  2. Открытие исполняемого файла для установки

  3. Все этапы установки (лицензионные соглашения, выбор директории и т.д.)

  4. После полной установки и первого запуска необходимо войти в свой аккаунт JetBrains для подтверждения лицензии или запуска пробного периода.

Технология работы с софтом:

  1. Нажать “New Project”

  2. Выбрать необходимый пресет для работы (в случае лаб.работ по ОЭВМиС - C++ executable)

  3. Выбрать стандарт языка

  4. Задать название проекта

  5. После создания проекта откроется окно IDE, разработка ведется в файле main.cpp, в случае, если необходимо сменить название или файл, с которым ведется работа - его также необходимо прописать в файле CMakeLists.txt в строке add_executable

Интерфейс программы:

Интерфейс выбора проекта

Интерфейс работы с проектом

Компилятор, с которым необходимо вести работу, определяется автоматически; в случае выполненной лаб.работы в качестве компилятора выступает Apple clang version 14.0.0 (clang-1400.0.29.102).

Вывод

В ходе выполнения работы было изучено, как в компьютере хранится информация о данных типа char и long double, а также были получены навыки по обработке переменных таких типов.

Соседние файлы в папке лаба 1