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
Тип роботи:
Лабораторна робота
Предмет:
Алгоритмічні мови та програмування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра САПР Звіт до лабораторної роботи №10 на тему «СТРУКТУРИ ТА ОБ’ЄДНАННЯ В МОВІ ПРОГРАМУВАННЯ С» з курсу «Проблемно-орієнтовані мови програмування» ЛЬВІВ 2011 Мета роботи Навчитися використовувати структури та об’єднання для програмування на мові С. Теоретичні відомості Структури Структура - це набір з однієї або більше змінних, можливо різних типів, згрупованих під одним ім'ям для зручності обробки. (У деяких мовах, наприклад Паскаль, структури називаються “записами”). Розглянемо приклад. Уявіть собі, що на календарі сьогодні 1 січня 2009 року. Дата складається з складових таких, як день, рік та назва місяця. Ці три змінні можна об’єднати в одну структуру вигляду: struct DATE { int day; int year; char mon_name[4]; }; Опис структури, що складається з взятого в фігурні дужки списку полів, починається з ключового слова struct. Після слова struct пишеться ім'я, так звана Мітка структури (тут це DATE). Ім’я може бути відсутнє. Така мітка іменує структури цього виду і може використовуватися надалі як скорочений запис детального опису. Елементи або змінні, згадані в структурі, називаються членами (полями, компонентами). Мітки і члени структур можуть мати такі ж імена, що і звичайні змінні (тобто ті, що не є членами структур), оскільки їх імена завжди можна розрізнити по контексту. Звичайно однакові імена присвоюють тільки тісно пов'язаним об'єктам. Точно так само, як у разі будь-якого іншого базового типу, за правою фігурною дужкою, що закриває список членів, може записуватись список змінних. Оператор struct { } x, y, z; // описує struct { } синтаксично аналогічний int x, y, z; // описує int в тому сенсі, що кожен з операторів описує x, y та z в якості змінних відповідних типів і приводить до виділення для них пам’яті. Опис структури, за яким не має списку змінних, не приводить до виділення пам'яті (немає змінної); він тільки визначає шаблон або форму структури. Але, якщо в такому опису є мітка, то ця мітка може бути використана пізніше при визначенні фактичних примірників структур. Наприклад, якщо дано приведений вище опис Date, то struct DATE d; визначає змінну d як структура типу Date. Ініціалізація структур При визначенні структурних змінних можна ініціалізувати їхні поля. Ця можливість подібна ініціалізації масиву й слідує тим же правилам: ім'я_шаблона ім'я_змінної_структури = {значення1., значення2, . . .}; Компілятор присвоює значення1 першій змінній в структурі, значення2 - другій змінній й т.д., і тут необхідно додержуватися деяких правил: 1. значення, що присвоюються, повинні співпадати по типу з відповідними полями структури; 2. можна оголошувати кількість значень, що присвоюються, меншу, ніж кілкість полів. Компілятор присвоїть нулі іншим полям структури; 3. список ініціалізації послідовно присвоює значення полям структури, вкладених структур і масивів. Наприклад: struct date { іnt day, month, year; } d[5] = { {1, 3, 1980), {5, 1, 1990}, {1, 1, 1983} }; /* Проініціалізовані перші три елементи масиву */ struct person bguіr[20]={ {"Бурба","Дмитро", "Леонідович", 75., 185, 15, 1, 1980}, {"Таболич", "Юрій", "Олександрович", 70., 180, 25, 8, 1983}}; /* Проініціалізовані 2 елементи масиву структур */ Об'єднання Об’єднання подібне структурі, але в кожен момент часу може використовуватись (або є активним) тільки один з його компонентів. Тип об’єднання може задаватися записом виду union МІТКА { опис компонента а1; опис компонента а2; ……………………. опис компонента аn; }; Для кожного з цих компонентів виділяється одна і та ж область пам’яті, тобто вони перекриваються. Хоча доступ до цієї області пам’яті можливий через використання будь-якого з компонентів. Компонент для цієї мети повинен вибиратися так, щоб отриманий результат не був беззмістовним. Як вже зазначалось, об’єднання подібні структурам. Доступ до компонент об’єднання відбувається тим самим способом, що і для структур. Об’єднання застосовуються: для мінімізації об’єму пам’яті, що використовується, якщо в кожний момент часу тільки один об’єкт з багатьох є активним; для інтерпретації основного представлення об’єкта одного типу, так ніби цьому об’єкту був присвоєний другий тип. Роль об’єднання аналогічна ролі опису еквівалентності (equivalence) в Фортрані. Компоненти в об’єднанні взаємозв’язані точно так, як два об’єкта, зв’язані відношенням еквівалентності в Фортрані. В якості прикладу визначення об’єкта типу union розглянемо об’єднання shape, яке визначається наступним чином: struct position { int x; // 2 байти int y; // 2 байти }; union { float radius; // коло 4 байти float a[2]; // прямокутник 4*2=8 байт int b[3]; // трикутник 2*3=6 байт struct position p; // координата точки 2+2=4 байти } shape; Розмір об’єднання shape дорівнює не суммі всіх байтів, як у випадку структури, а розміру найбільшого поля (компоненти), тобто 8 байт. В цьому прикладі є сенс використовувати тільки той компонент, який отримав останнім своє значення. Індивідуальне завдання Знайти найхолодніший і найтепліший день квітня. В метеорологічній інформації міститься: день місяця, температура, опади. Текст програми #include <stdio.h> #include <math.h> struct temp{ int day; float temper; }; int main() { struct temp d[3]; float max,min; int i; printf("Meteorological information for April:\n"); printf("Enter day and temperature:\n"); for(i=0;i<3;i++) scanf("%d%f",&d[i].day,&d[i].temper); max=d[0].temper; min=d[0].temper; for(i=0;i<3;i++) if (max<d[i].temper) max=d[i].temper; for(i=0;i<3;i++) if (min>d[i].temper) min=d[i].temper; printf("Meteorological information for April:\n"); printf("Day Temperature\n"); for(i=0;i<3;i++) printf("%d %2.2f\n",d[i].day,d[i].temper); printf("Max temperature=%2.2f\n",max); printf("Min temperature=%2.2f\n",min); return 0; } Результати обчислень  Висновок: Я навчився використовувати структури та об’єднання для програмування на мові С.
Антиботан аватар за замовчуванням

29.05.2013 13:32

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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