DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

С, С++

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Алгоритмічні мови та програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра САПР Звіт до лабораторної роботи №11 на тему «ПОЛЯ БІТІВ У СТРУКТУРАХ. ПРОГРАМНА РЕАЛІЗАЦІЯ ОБ’ЄДНАНЬ» з курсу «Проблемно-орієнтовані мови програмування» ЛЬВІВ 2011 Мета роботи Навчитися використовувати поля бітів у структурах для роботи з бітовими константами, а також реалізовувати логічні структури на основі об’єднань. Теоретичні відомості Мови С/C++ допускають використання в структурах особливого типу полів - так званих полів бітів. Це група сусідніх (двійкових) розрядів (бітів), розташованих в області пам'яті змінної цілого типу. Використання даних полів уможливлює доступ до окремих бітів більших об'єктів, наприклад байтів або слів. Використання полів бітів доцільно в тому випадку, коли для зберігання інформації в структурі даних досить декількох бітів. Загальний синтаксис опису бітового поля: тип [ім'я]: ширина; Розглянемо кожне поле опису. Поле "тип" В C++ для визначення вмісту бітового поля дозволено використовувати будь-який тип, який інтерпретується як цілий: char, short, іnt, long (з модифікаторами sіgned або unsіgned), перерахування. У полях типу sіgned крайній лівий біт є знаковим. Наприклад, при оголошенні поля типу sіgned шириною в один біт (наприклад, sіgned а: 1;) воно буде здатне зберігати тільки -1 або 0, так як будь-яка ненульова величина буде сприйматися як (-1). Поле "ім'я" Посилання на бітове поле виконуються по імені, зазначеному в полі "ім'я". Якщо ім'я в даному полі не зазначено, то запитана кількість біт буде відведена, але доступ до них буде неможливий. Дозволяється опис поля бітів без імені і з шириною рівною 0 - у цьому випадку наступне поле буде починатися із границі цілого (див. далі). Поле "ширина" Кожному полю виділяється точно стільки бітів, скільки зазначено в полі "ширина". Даний вираз повинен мати невід’ємне ціле значення. Це значення не може перевищувати числа розрядів, необхідного для подання значення типу, зазначеного в поле "тип". Отже, оголошення структури, що містить поля бітів має такий вигляд: struct ім'я_ структури { тип [ ім'я1 ] : ширина; тип [ ім'я2 ] : ширина; тип [ім'яN ] : ширина; }; Доступ до полів бітів здійснюється так само, як і до інших елементів структурної змінної, тобто за допомогою операції вибору елемента ".". Наприклад: struct EXAMPLE { іnt a:2; unsіgned іnt b:3; unsіgned іnt c: 6 ; іnt d:l; } exam; Доступ до оголошених полів у даному прикладі відбувається наступним чином: exam.a - доступ до поля "а"; exam.b - доступ до поля "b" і т.д. Доступ до полів бітів може здійснюватися і через вказівник на структуру, у яку поля входять, використовуючи операцію доступу через вказівник "->". Наприклад, якщо для попереднього приклада записати: struct EXAMPLE *examp; examp = &exam; то доступ, наприклад, до поля "b" буде забезпечений так: examp->b. Необхідно відзначити, що хоча доступ до даних полів і здійснимо через вказівник на структуру, що містить це поле, але застосовувати операцію визначення адреси "& " до конкретного поля не можна. У зв'язку із цим визначаються правила ініціалізації полів бітів: - поле біт може бути проініціалізоване тільки безпосередньою операцією присвоювання у вигляді ім'я_структурної_змінної . ім'я_поля_біт =< вираз > ; або: ім'я_вказівника_структури -> ім'я__поля_біт =< вираз > . Причому права частина може являти собою навіть виклик функції, яка повертає деяке значення, треба тільки стежити за тим, щоб дане значення могло вміститися у відведену для поля кількість бітів. - поле бітів не може бути ініціалізовано функціями вводу типу scanf(). При роботі з бітовими полями неприпустимі: - масиви бітових полів; - вказівники на бітові поля; - функції, що повертають бітові поля. Об'єднання - це особливий тип даних мови С, який називається складеним типом. Фактично об'єднання - це змінна, котра дозволяє в різні моменти часу зберігати значення різних типів. Приміром, деяке об'єднання може розглядатися як ціле значення при виконанні однієї операції і як число із плаваючою крапкою або подвійної точності - при виконанні іншої. Об'єднання може містити й структурні змінні. Його особливістю є, то, що всі дані, включені в об'єднання, розташовуються в пам'яті з однієї й тої ж границі (адреси), тобто вони перекривають одне одного. Таким чином, в окремий момент часу об'єднання може зберігати значення тільки одного типу з описаного набору, отже - значення поточного елемента об'єднання губиться, коли присвоюється значення іншому елементу об'єднання. Контроль за тим, якого типу значення зберігається в цей момент часу в об'єднанні, покладається на програміста. Об'єднання, як правил, є частиною структури, оскільки воно припускає зберігання одного значення з деякої множини типів даних, то одним з елементів структури ( що включає в себе об'єднання), повинна бути зміннна, яка визначає тип значення, що перебуває в даний момент в об'єднанні. Набір типів значень, які можуть зберігатися в даному об'єднанні, асоціюється з ним у процесі оголошення. Окремі дані, що входять в об'єднання, надалі будемо називати полями. Як і будь-яке змінна, об'єднання повинне бути визначене. Визначення складається із двох кроків: - задання шаблона об'єднання; - властиво опис змінної-об'єднання. Надалі безпосередньо змінну-об'єднання будемо називати просто об'єднанням. Кожний шаблон має власне ім'я для того, щоб компілятор міг розрізняти шаблони. У випадку якщо у функції використовується єдиний шаблон, він може не мати імені, що задається пропуском поля < ім'я > в описі шаблона (див. нижче). Імена шаблонів повинні бути унікальними в межах їхньої області визначення, і зокрема в межах однієї функції може бути тільки один шаблон без імені. Шаблон створюється за допомогою ключового слова unіon з використанням наступного синтаксису: unіon [< ім'я >] { тип поле1; тип поле2; . . . тип полеN ; } ; Опис шаблона об'єднання вводить по суті новий тип даних. Цілком допустимо використовувати вказівник на введений тип. Як і будь-який інший вказівник інших типів даних, вказівник на об'єднання займає або два байти (near), або чотири байти (far). Опис вказівника на об'єднання не відрізняється від опису вказівників на інші типи: < тип > *< ім'я_вказівника >; де < тип > - задає ім'я шаблона об'єднання, вказівник буде даного типу; < ім'я_вказівника > - ім'я вказівника, що визначається. Індивідуальне завдання Створити об'єднання з елементами числа з плаваючою крапкою, чи текстового рядка. Вивести у файл значення розміру полів об'єднання (функцією sizeof). Текст програми #include <stdio.h> #include <math.h> #include <string.h> union example { float a; char b[20]; } exl; main() { FILE *f; f=fopen("D:\\f.txt","r+"); int d; printf("Enter float a:"); scanf("%f",&exl.a); printf("\nEnter char b:"); scanf("%s",&exl.b); if (strlen(exl.b)>sizeof(exl.a)) d=strlen(exl.b); else d=sizeof(exl.a); printf("%d",d); fprintf(f,"%d",d); fclose(f); return 0; } Результати обчислень  Висновок: Я навчився використовувати поля бітів у структурах для роботи з бітовими константами, а також реалізовувати логічні структури на основі об’єднань.
Антиботан аватар за замовчуванням

29.05.2013 13:32

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!