ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.02.2024
Просмотров: 9
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ им. В. Г. ШУХОВА» (БГТУ им. В.Г. Шухова)
Кафедра программного обеспечения вычислительной техники и автоматизированных систем
Лабораторная работа №1
по дисциплине: Алгоритмы и структуры данных тема:
«Встроенные структуры данных (Pascal/С)»
Выполнил: ст. группы КБ-212 Каратаев Максим Сергеевич
Проверил:
Майлатова А.Ю.
Белгород 2021 г.
Встроенные структуры данных (Pascal/С)
Вариант 1
Цель работы: изучение базовых типов данных языка Pascal/C как структур данных (СД).
Задание
-
Для типов данных (см.:Варианты заданий втабл.1,2) определить:-
Абстрактный уровень представления СД:-
Характер организованности и изменчивости. -
Набор допустимых операций.
-
-
Физический уровень представления СД:-
Схему хранения. -
Объем памяти, занимаемый экземпляром СД. -
Формат внутреннего представления СД и способ его интерпретации. -
Характеристику допустимых значений. -
Тип доступа к элементам.
-
-
Логический уровень представления СД.
Способ описания СД и экземпляра СД на языке программирования.
-
-
Для заданных типов данных определить набор значений, необходимый для изучения физического уровня представления СД. -
Преобразовать значения в двоичный код. -
Преобразовать двоичный код в значение. -
Разработать и отладить программу, выдающую двоичное представление значений заданных СД.
В программе использовать процедуры PrintByte и PrintVar.
Спецификация процедуры PrintByte:
-
Заголовок: procedure PrintByte(a:byte)/void PrintByte(unsigned char a). -
Назначение: выводит на экран монитора двоичное представление переменной a типа byte/unsigned char. -
Входные параметры: a. -
Выходные параметры: нет.
Рекомендации: использовать побитовые операции сдвига и логического умножения.
Спецификация процедуры PrintVar:
-
Заголовок: procedure PrintVar(var a; size:word)/ void PrintVar(void a, unsigned int size). -
Назначение: выводит на экран монитора двоичное представление переменной a произвольного типа размером size байт. -
Входные параметры: a – переменная произвольного типа, значение которой выводится на экран в двоичном представлении (нетипизованный параметр);
size – объем памяти (в байтах) занимаемый переменной a. -
Выходные параметры: нет.
Рекомендации: нетипизованную переменную a привести к типу «массив байт», значение каждого элемента которого выводить на экран в двоичном представлении процедурой PrintByte.
-
Обработать программой значения, полученные в результате выполнения пункта 3 задания. Сделать выводы. -
Разработать и отладить программу, определяющую значение переменной по ее двоичному представлению по следующему алгоритму:
1. Ввести двоичный код в переменную S строкового типа.
2. Преобразовать Sв вектор B типа «массив байт».
3. Привести B к заданному типу. Вывести значение.
4. Конец.
-
Обработать программой значения, полученные в результате выполнения пункта 4 задания. Сделать выводы.
Задание 1:
Тип1: byte
Выполнение:
Задание 1:
Unsigned char:
Характер организованности: простейший
Набор допустимых операций: создание, изменение, удаление
Характер изменчивости: статический
Схема хранения: последовательная
Объем памяти: 1 байт
Формат представления: 10001000, где зеленый – значение
Характеристика значений: 0 … 255
Тип доступа: прямой
Способ описания на ЯП: Unsigned char a = 120;
Тип2: long double
Характер организованности: простейший
Набор допустимых операций: создание, изменение, удаление
Характер изменчивости: статический
Схема хранения: последовательная
Объем памяти: 10 байта
Формат представления: 10000000 10000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000, где желтый - знак, зеленый – экспонента, синий – мантисса
Характеристика значений: 3.8^(-4932)...1.1*10^(4932)
Тип доступа: прямой
Способ описания на ЯП: long double a = 1.01;
Тип3:
int массив [5][5]
Характер организованности: простейший
Набор допустимых операций: доступ, присваивание и инициализация
Характер изменчивости: статический
Схема хранения: последовательная
Объем памяти: 100 байт
Формат представления: 10001000 10001000 10001000 10001000, где зеленый – значение
Характеристика значений: от −2 147 483 648 до 2 147 483 647 (для каждого элемента массива)
Тип доступа: прямой
Способ описания на ЯП: int a = [5][5];
Задание 2:
unsigned char:
1. 178
2. 255
long double:
1. 56.48
2. -126.234
int массив [5][5]:
1. 24
2. 120
Задание 3:
unsigned char:
1.
178 | 2 | | | | | | | |
-178 | 89 | 2 | | | | | | |
0 | -88 | 44 | 2 | | | | | |
| 1 | -44 | 22 | 2 | | | | |
| | 0 | -22 | 11 | 2 | | | |
| | | 0 | -10 | 5 | 2 | | |
| | | | 1 | -4 | 2 | 2 | |
| | | | | 1 | -2 | 1 | |
| | | | | | 0 | | |
17810 = 1011 00102;
2.
| | | | | | | | |
255 | 2 | | | | | | | |
-254 | 127 | 2 | | | | | | |
1 | -126 | 63 | 2 | | | | | |
| 1 | -62 | 31 | 2 | | | | |
| | 1 | -30 | 15 | 2 | | | |
| | | 1 | -14 | 7 | 2 | | |
| | | | 1 | -6 | 3 | 2 | |
| | | | | 1 | -2 | 1 | |
| | | | | | 1 | | |
| | | | | | | | |
25510 = 1111 11112 ;
long double:
1. Чтобы перевести вещественное число, необходимо вначале перевести его целую, затем дробную части (возьмём точность в 6 знаков):
; ;
; ;
; ;
; ;
; ;
;
;
Полученное двоично число приведём к виду , где целая часть равна 12:
111000.01111 = 1.1100001111*25;
Получаем смещённый порядок:
5+127 = 13210 = 1000 0100;
Запишем полученное число в виде: 1й бит – знаковый, 8 бит – порядок, остальные биты – число, учитываем, что целая единица не записывается.
56.4810 = 0 1000 0100 110 0001 1110 0000 0000 00002;
2. ; ;
; ;
; 0|936;
; 1|872;
; 1|744;
; 1|488;
1111110.00111 = 1.11111000111*26;
6+127 = 13310 = 1000 01012;
-126.23410 = 1 1000 0101 111 1100 0111 0111 1100 00002;
int массив [5][5]:
10010=0110 01002
9710 = 0110 00012
10010=0110 01002
9810=0110 01002
11810=0111 01102
9910 = 0110 00112
9810=0110 01002
11810=0111 01102
9910 = 0110 00112
9810=0110 01002
11510