- •Содержание
- •1 Группа
- •1. Організація адресації ат286 в захищеному режимі.
- •2. Архітектура мп 80386.
- •3. Архітектура мп 80486.
- •4. Регістри стану й керування і486.
- •5. Архітектура та функціональні можливості Pentium.
- •6. Провести порівняльний аналіз архітектур мікропроцесорів фірми Intel.
- •7. Risc-процесори.
- •8. Архітектура сигнального мікропроцесора adsp.
- •9. Описати роботу системного таймера ibm-сумісного комп'ютера.
- •10. Класифікація мікропроцесорних наборів.
- •11. Класифікація мікропроцесорних наборів за числом віс.
- •12. Режими роботи таймерів однокристальної мікро еом Intel 8051.
- •13. Архітектура пам’яті процесорів adsp-2100.
- •14. Система команд і регістри процесорів сімейства adsp-2100.
- •15. Динамічні зп з довільною вибіркою.
- •16. Стекова адресація. Польський зворотній запис.
- •If (число)
- •17. Перетворення віртуальних адресів у фізичні.
- •18. Адресний простір еом. Способи адресації операндів.
- •19. Оперативна пам’ять. Організація та принципи управління.
- •20. Система переривань та її характеристики.
- •21. Формування фізичної адреси з логічної у реальному режимі.
- •22. Формування фізичної адреси з логічної у 386 захищеному режимі.
- •23. Підсистема керування оперативної пам’яті. Організація та принципи управління.
- •1. Динамическое распределение памяти.
- •2. Разделение памяти на страницы.
- •3. Использование связанных списков.
- •4. Сегментация памяти.
- •5. Свопинг памяти.
- •6. Организация виртуальной памяти.
- •24. Динамічний розподіл пам’яті. Організація віртуальної пам’яті.
- •25. Загальні принципи будування багатопроцесорних обчислювальних комплексів..
- •26. Загальні принципи будування багатомашинних обчислювальних комплексів.
- •27. Конвеєрні, векторні та матричні багатопроцесорні комплекси.
- •28. Асоціативні системи та системи зі структурою, що перебудовується.
- •29. Принципи будування високонадійних обчислювальних систем - кластерів.
- •30. Принципи побудови систем з симетрично-паралельною обробкою даних. Переваги та недоліки таких систем
- •31. Страницы jsp. Теги и встроенные объекты jsp
- •32. Архитектура распределенных приложений. Web – сервисы
- •33. Soap
- •34. Java rmi Достоинства и недостатки Java rmi
- •35. Распределенные компьютерные системы. Промежуточное программное обеспечение распределенных компьютерных систем
- •36. Виртуальная машина jvm
- •37. Пространства и схемы xml
- •38. Corba. Достоинтсва и недостатки corba
- •39. Сервлет-технология Java
- •40.Xml. Структура xml-документа
- •2 Группа
- •1 Класифікація операційних систем
- •2 Мультизадачність, її розновиди
- •3. Процеси, потоки та їх взаємодія
- •4. Стани процесів
- •5. Розподіл оперативної пам'яті фіксованими розділами
- •6. Розподіл оперативної пам'яті зміними розділами, алгоритми завантаження нових процесів
- •7. Пошук фізичної адреси у реальному режимі
- •8.Пошук фізичної адреси у захищеному режимі
- •9. Пошук фізичної адреси при сторінковій адресації
- •10.Сегментна та сторінкова організація віртуальної пам’яті, алгоритми заміщення сегментів
- •11. Системи введення-виведення, основні режими, базові таблиці
- •12.Файлові системи fat (fat-16, fat-32, vfat).
- •Vfat и длинные имена файлов
- •13.Файлова система hpfs.
- •14.Файлова система ntfs.
- •15.Файлова система UfS.
- •16. Структура жорсткого магнитного диску
- •1.Каждый жесткий диск обслуживают несколько головок, в зависимости от количества круглых пластинок, покрытых магнитным материалом, из которых состоит диск.
- •2.Информация записывается и читается блоками, поэтому все дорожки как бы разбиты на секторы (обычно по 512 байт).
- •3.В операциях чтения или записи на физическом уровне необходимо указывать номер головки (0,1,...), дорожки или цилиндра (0,1,...), сектора (1,2,...).
- •17 Класифікація системного програмного забезпечення
- •18 Мікроядерні та монолітні операційні системи, їх особливості
- •19 Сервісні системи (інтерфейсні системи, оболонки, утілити)
- •20 Інструментальні системи
- •21 Системи програмування, їх основні типи.
- •22 Системи штучного інтелекту
- •23 Асемблери, алгоритм двохпрохідного асемблера
- •24 Завантажувачі
- •25 Макропроцесори
- •26 Компілятори
- •27 Призначення та структура головної функції вікна.
- •Реєстрація класу вікна, параметри, які підлягають реєстрації.
- •29 Етапи створення вікна. Які функції задіяно на кожному етапі?
- •30 Ініціалізація dll-бібліотеки у середовищі Microsoft Windows nt/2000/xp.
- •31 Експорт та імпорт функцій при використанні dll-бібліотек.
- •32 Динамічний імпорт функцій при використанні dll-бібліотек.
- •33 Структура простої прикладної програми з бібліотекою динамічної компоновки. Послідовність дій при компіляції.
- •If(!strcmp((lpstr)lParam, szBuf)) // Сравниваем заголовок со строкой, адрес которой передан в функцию EnumWindowsProc
- •3 Группа
- •Void main ()
- •Void main ()
- •Void main ()
- •Int n; scanf("%d",&n); //число элементов в массиве
- •Void main()
- •Int n; scanf("%d",&n); //число элементов в массиве
- •Int main()
- •Int n,m; scanf("%d%d",&n,&m); //число элементов строк и элементов в строке
- •Int main()
- •Int n,m; scanf("%d%d",&n,&m); //число элементов строк и элементов в строке
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int mul(double X,double y)
- •Int main()
- •Int main()
- •Void func(a);
- •Int fclose(file *имя);
- •Void perror(const char *s);
- •Int fputc(int ch, file *fp);
- •Int fgetc(file *fp);
- •Int fputs(char* string, file *fp);
- •Int fprintf(file *fp, char *format [,аргумент]…);
- •Int fscanf(file *fp, char *format [,указатель]…);
- •Int n; float f; long l; int a[5]; float m[5];
- •Int fwrite(void *ptr, int size, int n, file *fp);
- •Int fread(void *ptr,int size,int n,file *fp);
- •16 Ооп. Визначення класу. Компоненти класу. Спеціфікатори доступу до компонентів класу. Різниця між методами класу, визначеними в класі та поза межами класу.
- •Void define(double re,double im)
- •Void display()
- •X.Define(1,2);
- •Void set(int);
- •Void myclass::set(int c)
- •Int myclass::get()
- •17 Ооп. Визначення класу. Конструктор, перевантажені конструктори, деструктор.
- •Void main()
- •Void main()
- •Void main()
- •18 Ооп. Поняття дружніх функціїй. Різниця між дружньою функцією - членом класу та не членом класу.
- •19 Ооп. Поняття перевантаження операцій. Правила її використання.
- •20 Ооп. Наслідування. Поняття базового та похідного класів. Спеціфікатори доступу до членів класів.
- •21 Моделювання. Визначення моделі та призначення моделювання. Види моделей.
- •22 Моделювання. Загальносистемна модель функціонування систем. Моделі систем: безперервна, лінійна, безперервна лінійна, дискретна.
- •23 Моделювання. Узагальнена модель систем масового обслуговування (смо). Типи смо
- •24 Моделювання. Позначений граф станів системи. Рівняння Колмогорова для ймовірностей стану системи. Фінальні ймовірності станів системи.
- •25 Асемблер. Регістри та біти ознак процесора Intel 8086. (регістри загального вжитку та сегментні регістри, їх призначення; ознаки cf, of, sf, pf, af, zf)
- •26 Асемблер. Структура програми (директиви сегментування segment та з використанням директиви model; директиви assume; моделі пам’яті; ініціалізація сегментних регістрів)
- •Int 21h ;вызов прерывания с номером 21h
- •28 Асемблер. Арифметичні операції додавання та віднімання чисел зі знаком та беззнакових, з урахуванням ознаки переносу, інкрементування й декрементування
- •Vich_1 dd 2 dup (0)
- •Vich_2 dd 2 dup (0)
- •Inc ax ;увеличить значение в ax на 1
- •29 Асемблер. Арифметичні операції множення та ділення чисел зі знаком та беззнакових
- •Imul eax,bx,8
- •Idiv (Integer diVide) Деление целочисленное со знаком
- •Idiv делитель
- •Idiv bx ;частное в ax, остаток в dx
- •30 Асемблер. Команди безумовної передачі керування. (прямі короткі; прямі; непрямі)
- •31 Асемблер. Організація циклів за допомогою команд jcxz; loop, loopz та loopnz
- •32 Асемблер. Команди умовного передавання керування. (операція cmp; операції умовного передавання керування jcxz, jc, jo, jz, jc, je, jl, jg, ja, jb)
- •Int 21h ;Вызов системной функции
- •33 Асемблер. Макроси (опис, розташування, використання)
- •4 Группа
- •1,2 Общая характеристика модели osi
- •3 Понятие «открытая система»
- •4 Стандартные стеки коммуникационных протоколов (osi , ipx/spx, NetBios/smb)
- •5 Стек tcp/ip
- •6 Общая структура телекоммуникационной сети
- •7 Корпоративные сети
- •8,9 Сети операторов связи
- •10 Классификация линий связи: первичные сети, линии и каналы связи; физ.Среда пердачи аднных
- •11 Классификация линий связи: аппаратура передачи данных
- •12 Структурированная кабельная система
- •13 Безпровідна лінія зв'язку, діапазони електромагнітного спектру
- •14 Безпровідне середовище передачі даних: розповсюдження електромагнітних хвиль, ліцензування
- •15 Общая характеристика протоколов локальных сетей: стандартная топология и разделяемая среда, стек протоклов локальных сетей.
- •16 Протокол mac. Адресация mac-уровня.
- •17 Структура стандартов ieee 802.X
- •18 Спецификация физической среды Ethernet ( общая характеристика стандартов 10Мбит/мек,Домен коллизий)
- •19 Спецификация физической среды Ethernet ( Стандарт 10Base-5, 10Base-5)
- •20 Спецификация физической среды Ethernet ( Стандарт 10Base-т)
- •21 Спецификация физической среды Ethernet ( Оптоволоконная сеть Ethernet)
- •22 Технология Fast Ethernet (Физический уровень технологии Fast Ethernet)
- •23 Технология Fast Ethernet (спецификация 100Base-fx/тх/т4)
- •24 Правила построения сегментов Fast Ethernet при наличии повторителей
- •25. Gigabit Ethernet
- •26. Технология Token Ring
- •27 Загальна характеристика безпровідних локальних мереж
- •28 Мережі Стек протоколів ieee 802.11, безпека безпровідних локальних мереж
- •29 Мережі Топології безпровідних локальних мереж стандарту 802.11, розподілений та централізований режими доступу до розділеного середовища
- •30 Мережі Особливості персональних мереж, архітектура Bluetooth
- •31 Мережі Стек протоколів Bluetooth, кадри Bluetooth.
- •32 Мережі Основні функції мережних адаптерів
- •33 Мережі Основні и додаткові функції концентраторів
- •34 Мережі Багатосегментні концентратори
- •35 Мережі Основні характеристики та особливості комутаторів. Неблокуючі комутатори
- •36 Мережі Функції комутаторів (боротьба з перевантаженнями трансляція протоколів канального рівня, фільтрація трафіку)
- •37 Мережі Характеристики продуктивності комутаторів
- •38 Мережі Поняття та призначення віртуальних мереж
- •39 Мережі Створення віртуальніх мереж на базі одного та декількох комутаторів
- •40 Мережі Якість обслуговування в віртуальних мережах
- •41 Мережі Типи адрес стеку tcp/ip (локальні адреси, мережні ip-адреси, доменні імена).
- •42 Мережі Протокол dhcp
- •43 Мережі Протоколи транспортного рівня tcp и udp (загальна характеристика, порти)
- •44 Мережі Протокол транспортного рівня udp
- •45 Мережі Протокол транспортного рівня tcp (формат tcp - сегмента, логічне з‘єднання, послідовний та затверджений номер)
- •47 Мережі Класифікація протоколів маршрутизації, маршрутизація без таблиць, адаптивна маршрутизація
- •48 Мережі Використання декількох протоколів маршрутизації, зовнішні та внутрішні шлюзні протоколи
- •49 Мережі Протокол bgp
- •50 Мережі Поняття, типи icmp-повідомлень
- •51 Мережі Протокол icmp (формат ехо – запитання /ехо - відповідь и утиліта ping; формат повідомлення про помилку та утиліта traceroute)
- •5 Группа
- •1 Трьохрівнева модель субд
- •2 Моделі даних
- •3 Реляційна модель даних
- •4 Ключі відношень. Визначення, різновиди, призначення. Умови цілісності даних
- •5 Інфологічне моделювання предметної області. Модель “Сутність – зв’язок”
- •6 Види зв’яку між сутностями. Навести приклади
- •7 Нормалізація відношень. Призначення. Послідовність виконання нормалізації.
- •8 Нормалізація відношень. 1 та 2 нормальні форми.
- •9 Нормалізація відношень. 3 нормальна форма та нормальна форма Бойса-Кодда. Навести приклади
- •10 Функціональні залежності атрибутів у відношеннях.
- •11 Реляційна алгебра. Основні операції реляційної алгебри.
- •12 Оператор Select. Речення From . Синтаксис. Використання. Навести приклади.
- •13 Відбирання рядків у запитах. Синтаксис. Навести приклад.
- •14 Відбирання груп у запитах. Синтаксис. Навести приклад.
- •15 Групування та сортування записів у запиті. Навести приклад
- •16 Вкладені запити. Різновиди. Синтаксис. Навести приклади.
- •17 Використання агрегатних функцій у запитах.
- •18 Фізична модель даних. Структура записів на носії.
- •21. Рівні та задачі проектування електронних пристроїв от.
- •22. Математичне моделювання електронних пристроїв от: переваги та недоліки.
- •23. Математичні моделі елементів електронних пристроїв. Визначення і класифікація, методи розробки.
- •24. Задачі схемотехнічного проектування електронних пристроїв от.
- •25. Структура та можливості програм моделювання електронних схем.
- •26. Типова структура і засоби розробки макромоделей інтегральних мікросхем.
- •27. Імітаційне моделювання електронних пристроїв от: процес, подія, активність.
- •28. Методи функціонального моделювання аналогових і цифрових пристроїв.
- •29. Методи логічного моделювання цифрових пристроїв.
- •30. Тестування цифрових пристроїв: контролюючі та діагностичні тести. Засоби їх отримання.
- •31 Моделювання на рівні регістрових передач
- •32 Функціональне моделювання за допомогою програм моделювання аналогових схем.
- •33 Математические методы и модели на разных уровнях проетирования
- •6 Группа
- •1 Властивості інформації. Класифікація загроз інформації.
- •2 Уровни защиты информации в компьютерных системах
- •3 Законодательний рівень захисту інформації
- •4. Організаційно-адміністративний рівень захисту інформації
- •5. Фізико-технічні засоби захисту інформації в компьютерних системах
- •6. Криптографічний захист інформації
- •7. Стандарти симетричного шифрування даних
- •8. Криптосистеми з відкритим ключем
- •9. Канали несанкціонованого доступу до інформації
- •10, Системи захисту від несанкціонованого доступу
- •11. Аутентифікація електронних даних: імітоприкладка, електронний цифровий підпис
- •3. Проверка подписи
- •1. Генерация ключей
- •2. Подписание документа
- •3. Проверка подписи
- •12. Системи ідентифікації та аутентифікації користувачів
- •13. Взаємна аутентифікація користувачів
- •1. «Запрос-ответ»
- •2. «Временной штемпель»
- •3. Процедура рукопожатия
- •4. Протокол аутентификации с нулевым разглашением знаний
- •14. Парольная система. Требования к паролям.
- •15. Захист від віддалених мережевих атак
- •27. Перетворення спектра при дискретизації сигналів. Теорема Котельникова
- •28. Швидке перетворення Фур'є з проріджуванням за часом. Структурна схема "метелика" з проріджуванням за часом.
- •29. Поняття цифрового фільтра. Рекурсивні та нерекурсивні фільтри. Чотири основні форми реалізації фільтрів.
- •30. Операції над зображеннями. Поняття околу (4-точечний, 8-точечний окіл). Вікно, опорна точка вікна.
- •31. Лінійна фільтрація зображень. Рівняння лінійної фільтрації
- •7 Группа
- •2 За допомогою методики розрахунка конфігурації мережі Ethernet, підтвердіть правило 4-х хабів.
- •8 Наведіть обмеження для мереж, що побудовані на основі комутаторів
- •11 Яку максимальну кількість підмереж можливо організувати для мережі класа с? Приведіть значення маски
- •20 Проаналізуйте можливості та характеристики сучасних принтерів
- •21 Проведіть логічне тестування і відновлення інформації на гнучкому магнітному диску
- •22 Структура та принцип роботи сучасного модема, блок-схема передавача та приймача
- •23 Реалізація функцій скремблювання та ехоподавлення в сучасних модемах
- •24 Сучасні жорсткі диски. Проаналізуйте їх характеристики
- •25 Сучасні сканери, Проаналізуйте їх функції та характеристики
- •26 Джерела безперервного живлення. Проаналізуйте їх основні характеристики
- •27 Дайте визначення та наведіть робочі формули основних показників надійності. Приведіть та роз'ясніть графік інтенсивності відмов для обчислювальних пристроїв.
- •28 Приведіть формулу ймовірності безвідмовної роботи Pc(t) системи з навантаженим загальним резервом. Приведіть графік залежності нароботки до відказу від кратності резерву.
- •17 Розробіть на мові асемблер програму для обчислення суми чисел масиву з 10 елементів типу байт у процедурі з передаванням аргументів через регістри.
- •18 Розробіть на мові асемблер фрагмент програми, в якій знаходиться максимальний елемент масиву з 10 чисел типу слово (з використанням команди jcxz).
- •19 Розробіть на мові асемблер фрагмент програми для обчислення номеру мінімального елементу в масиві з 10 чисел типу слово (за допомогою команди loop)
- •20 Розробіть на мові асемблер фрагмент програми, що порівнює значення двох змінних введених з клавіатури й відображає результат у вигляді: рівні або нерівні.
- •21 Розробіть на мові асемблер фрагмент програми, в якій додаються та множаться два байтові числа, визначається парний чи непарний результат суми та дво- чи чотирьохбайтовий результат добутку.
- •26 Приведіть методи підвищення ефективності роботи з жорстким диском по переміщенню голівок
- •31 Проаналізуйте структуру драйверу ms dos. Його частини. Завантаження драйверу та робота з ним.
- •33 Наведіть характеристики режимів відеосистеми. Характеристики, які не змінюються, які змінюються з використанням фізичних методів. Характеристики, які змінюються програмно.
- •34 Проаналізувати методи створення розділів диску. Скільки розділів та логічних дисків можливо встановити на одному фізичному диску?
Int n,m; scanf("%d%d",&n,&m); //число элементов строк и элементов в строке
тип **имя; // определение указателя на указатель
имя=new тип*[n];//запрос памяти для указателей на строки
for(int i=0;i<m;i++)
имя[i]=new тип[n];//запрос памяти для элементов в строке
...
for(i=0;i<m;i++) delete имя[i]; //освобождение памяти для элементов в строке
delete[]имя;); //освобождение памяти для указателей на строки
В следующем примере при создании двумерного массива вначале создается массив из m указателей типа double*, а затем для каждого из них в цикле запрашивается память, равная длине строки n.
Пример
#include <stdio.h>
#include <stdlib.h>
Int main()
{ double **dm;
int m,n,i,j;
puts("Введите размеры матрицы");
scanf("%d%d",&m,&n);
dm=new double* [m];
if(dm==NULL)
{ printf("Ошибка выделения памяти!\n");
return -1; }
for(i=0;i<m;i++)
{dm[i]=new double[n];
if(dm[i]==NULL)
{ printf("Ошибка выделения памяти!\n");
delete [] dm; return -1; }
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ dm[i][j]=double(i+j);
printf("dm[%d][%d]=%lf\n",i,j,*(dm[i]+j));
}
for(i=0;i<m;i++)
delete[]dm[i];
delete []dm;
return 0;
}
8 С++. Структури даних: опис, визначення, ініціалізация, доступ до елементів структури, розташування елементів структури у пам’яті. Вкладені структури.
Структуры ‑ это совокупность поименованных объектов в общем случае разных типов. Каждая структура включает в себя один или несколько объектов (переменных, массивов, указателей, структур), называемых элементами структуры..
Структурный тип определяет, сколько элементов и какого типа, входят в структуру. Объявление структуры начинается со служебного слова struct, за которым помещаются описания входящих в структуру элементов, заключенные в фигурные скобки. Элементы структуры могут быть базового и производного типа, в том числе структурами и массивами. Объявление структуры иногда называют созданием структурного типа или шаблона структуры. Шаблон структуры имеет права типа.
Синтаксис объявления шаблона структуры следующий:
struct имя_структурного_типа{type_1 элемент_1;
type_2 элемент_2;
. . . . . . ;
type_n элемент_n;
};
После объявления структурного типа с его помощью можно определить конкретные структуры следующим образом: имя_структурного_типа имя_структуры; Например:
struct STR {char ch;
float f;
int a[3];};
STR rec1, rec2, rec3[2];
Здесь объявлен структурный тип STR с элементами char ch, float f,int a[3] и определены две структуры: rec1 и rec2, а также массив из 2-х структур rec3.
Каждая из определенных структур rec1, rec2, rec3[2] содержит в качестве элементов свои собственные данные, состав которых определяется структурным типом с именем STR, то есть все структуры имеют в данном случае одинаковое внутреннее строение и у каждой их них имеются поля char ch, float f,int a[3].
Для обращения (доступа) к элементам структуры используются уточненные имена. Используется следующая конструкция языка: имя_структуры.имя_элемента_структуры. Например:
rec1.ch=’z’; rec1.f=3.2;
rec1.a[0]=1; rec2.ch=’w’;
rec2.f=4.5; rec2.a[1]=10;
rec3[0].ch=’d’; rec3[1].a[2]=100;
Выделение памяти под структурную переменную осуществляется по шаблону. Например, для структур rec1, rec2 распределение памяти следующее:
1 б. |
2 б. |
3 б. |
4 б. |
5 б. |
6 б. |
7 б. |
8 б. |
9 б. |
10 б. |
11 б. |
ch |
f |
a[0] |
a[1] |
a[2] |
Например, для структур rec3 распределение памяти следующее:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
||||||
ch |
f |
a[0] |
a[1] |
a[2] |
ch |
f |
a[0] |
a[1] |
a[2] |
|
|||||||||||||||||
rec3[0] |
rec3[1] |
|
Размер структуры можно определить с помощью оператора sizeof().
int n1= sizeof(rec1); // 11 байт
int n2= sizeof(STR); // 11 байт
При определении структуры возможна её инициализация, она по синтаксису аналогична инициализации массивов:
struct STR{ char ch;
float f;
int a[3];};
STR r1={‘a’,1.1,1,2,3};
Если определен массив структур, то инициализация осуществляется следующим образом:
STR r3[2]={{‘w’,6.6,10,20,30},{‘v’,7.7,40,50,60}};
Можно создавать указатели структурного типа. Если создан указатель структурного типа, то память выделяется только под указатель (4 байта). Поэтому необходимо указатель на структуру проинициализировать адресом (или присвоить адрес) уже объявленной структуры этого же типа.
STR *pst1=&rec2,*pst2;
pst2=&rec2;
После такого определения доступ к элементам структуры выполняется через разыменование указателя:
(*pts1).f=8.8; (*pts2).a[0]=100;
Еще одна возможность доступа к элементам структуры с помощью операции ’->’.
pts2->f=9.9; pts1->a[0]=1000;
В языке С (С++) определена операция по созданию и уничтожению объектов с динамической продолжительностью существования. Для этого используются соответственно либо функции malloc() и free(), либо операции new и delete.
#include <alloc.h>
struct STD{char name[20];float rating;};
STD *st;
st=(STD*)malloc(sizeof(STD));//Запрос памяти
gets(st->name);
st->rating=4.5;
free(st);//освобождение памяти
Аналогично можно воспользоваться операциями new и delete:
Можно создать массив структур с динамической продолжительностью существования:
MYSTR *b; int N;
puts(“Ведите размер массива”);
scanf(“%d”,&N);
b=new MYSTR[N];//Запрос памяти
for (int i=0; i<N; i++)
scanf("%s%d",b[i].name, &b[i].age);
for (int i=0; i<N; i++)
printf("%s\n%d\n",b[i].name,b[i].age);
delete [] b;//освобождение памяти
9 С++. Об'єднання даних: визначення, ініціалізация, доступ до елементів об'єднання, відображення елементів об'єднання у пам’яті
Объединение – это совокупность объектов различных типов, все члены которой начинаются с одного адреса. Этот тип объектов вводится с помощью служебного слова union.
В отличие от структуры, в которой все элементы расположены последовательно, объединение совмещает в себе несколько различных типов. При этом компилятор выделяет под объединение память, равную размеру максимального элемента объединения.
Синтаксис определения объединения подобен синтаксису определения структуры. Сначала определяем тип объединения, а затем – объединение:
union имя_типа_объединения {type_1 поле_1;
type_2 поле_2;
. . . . . . ;
type_n поле_n;};
имя_типа_объединения имя_объединения;
Рассмотрим этот тип на примерах:
union UN1{int a;char ch;long b;};
UN1 un1;
union UN2{double d;float f[3];};
UN2 un2;
Компилятор выделит под объединение un1 память, равную длине элемента типа long.
1 байт |
1 байт |
1 байт |
1 байт |
ch |
|
|
|
a |
|
|
|
b |
Компилятор выделит под объединение un2 память, равную длине массива f типа float.
4 байта |
4 байта |
4 байта |
f[0] |
f[1] |
f[2] |
d |
|
Для обращения к элементам объединения используются уточненные имена. Например:
un1.a=10; un1.ch=’k’; un1.b=100L;
un2.f[0]=1.2; un2.f[1]=3.2; un2.f[2]=4.5; un2.d=7.4;
Необходимо помнить, что в каждый момент памяти в объединении храниться только одно значение. Поэтому после таких присвоений для объединения un1 в памяти будет находиться только un1.b=100, а переменные un1.a, un1.ch будут равняться. Для объединения un2 в памяти будут находиться un2.d=7.4 и un2.f[2]=4.5, а переменные un2.f[0], un2.f[1] свои значения изменят.
При определении объединений их можно инициализировать, но в отличие от структур инициализируется только первый элемент. Например:
union{int i;char ch;} un7={200};
union UN3{char c[4];int a[2];long g;};
union UN4{ int a[2];long g; char c[4];};
UN3 un8 ={“abc”}; UN4 un9={8,9};
Так как элементы объединения охватывают один и тот же участок памяти, то они могут использоваться для различных трактовок одного и того же кода:
union COM{int a;char c[2];};
COM common={24930}; //инициализация объединения common 24930=0х6162
printf("%c %c\n",common.c[0],common.c[1]);
На печать выведутся символы b и а, так как их коды в согласно ASCII–таблице соответственно 62 и 61. В дампе памяти числа 61 и 62 будут записаны в обратном порядке. Таким образом, переменная а будет выведена на экран в виде двух символов. Схема размещения элементов объединения в двух соседних ячейках памяти приведена ниже:
a |
c[0] |
Aдрес |
0x62 |
c[1] |
Aдрес+1 |
0x61 |
Заносить значения в участок памяти, выделенный для объединения, можно с помощью любого из его элементов. И доступ возможен так же с помощью любого из его элементов:
union{float pi; long l;}upi;
union{float exp;long l;}uex;
upi.pi=3.141593;
printf("l=%ld\n",upi.l); //l=1078530012
uex.l=1076754517L;
printf("e=%f\n",uex.exp); //e=2.718282
10 С++. Призначення функції. Опис, визначення, виклик функції. Передача даних за значенням та за покажчиком.
Каждая программа представляет собой либо одну главную функцию, обозначаемую main(), либо функцию main()и любое количество других дополнительных функций, предназначенных для выполнения определенных действий (вычислений, обмена данными с внешними устройствами и т.д.). Функция main() обеспечивает точку входа в откомпилированную программу.
Всем именам функций по умолчанию присваивается класс памяти extern, т.е. они имеют внешний вид компоновки и статическую продолжительность существования. Kаждая функция глобальна, и поэтому доступна во всех модулях программы.
Любая функция, кроме главной функции main(), должна быть определена или, по крайней мере, описана до её использования (вызова) в конкретном модуле.
Определение функции имеет следующий синтаксис
тип_функции имя_функции(спецификация_формальных параметров)
{ тело функции}
Тип функции – это тип возвращаемого функцией значения, т.е. базовый (например, int, float, т.д.) или производный тип вычисленного в функции значения (например, тип структуры или объединения). Если функция ничего не возвращает, например, обеспечивает вывод на экран или изменяет значения массива и т.п., то тип функции обозначается void.
Имя функции – это любой уникальный допустимый идентификатор, например, myfunc.
Спецификация формальных параметров (или сигнатура функции) – это пусто или void, если в функцию не передаются никакие параметры, либо список спецификаций отдельных параметров с указанием типов и имен. В конце списка может быть поставлено многоточие (…). Спецификация формальных параметров имеет вид:
тип имя_параметра или тип имя_параметра=умалчиваемое_значение
Первая строка функции называется заголовком функции.
Тело функции – это последовательность определений, описаний переменных и операторов, заключенных в фигурные скобки. Когда функция вызывается, управление передается в начало тела функции. Возврат в точку вызова функции выполняется оператором return выражение.
В теле функции может быть несколько операторов return. Это означает, что в зависимости от операторов тела функции выход из функции может быть осуществлен в нескольких точках.
Если функция не возвращает никакого значения, т.е. имеет тип void, то выражение в операторе return может отсутствовать, а сам оператор return может отсутствовать.
Пример. Функция вычисляет сумма трех переменных типа int. Функция имеет три формальных параметра и один оператор return.
int sum(int a,int b,int c)
{int S=a+b+c;
return S;}
Обращение к функции
Обращение к функции (вызов функции) – это выражение с операцией круглые скобки(). Для вызова функции указывается имя функции и список фактических параметров:
Имя_функции (список фактических параметров);
Результатом выражения является возвращаемое значение, тип которого соответствует типу функции.
Соответствие между формальными и фактическими параметрами устанавливается по их взаимному расположению в списках. При обращении к функции формальные параметры заменяются фактическими параметрами в строгом соответствии с типами параметров. Фактические параметры передаются из вызывающей программы в функцию по значению, т.е. вычисляется значение каждого выражения, представляющего аргумент, и затем подставляется вместо соответствующего формального параметра.
Понятие прототипа функции
До первого обращения к функции в файле (модуле) должно быть помещено либо описание, либо определение функции.
Функции должны быть определены вне главной функции main(), т.е. перед функцией main(), после функции main() или в другом файле. Если функция определена после функции main() или в другом файле, то до первого обращения к функции она должна быть описана. Описание функции называется прототипом. Это необходимо для проверки компилятором соответствия типов передаваемых в функцию параметров и возвращаемых значений. В прототипе необязательно указывать имена формальных параметров. В конце прототипа обязательна точка с запятой.
Примеры прототипов:
int sum(int a,int b,int c);
int max(int, int y);
float mult(double *, char);
Передача параметров в функции по значению
В языке С(C++) передача параметров (кроме указателей и массивов) в функции при их вызове осуществляется по значению. Это означает, что для передаваемых (фактических) параметров в функции создаются копии этих параметров. Действия, производимые с этими параметрами (копиями) в функции не влияют на переменные вне функции, т.е. на фактические переменные.. Для формальных параметров выделяется своя область памяти, в которую заносятся значения фактических параметров. При выходе из функции выделенная память высвобождается.
Передача параметров в функции по указателю
Для изменения значений различных объектов действиями, выполняемыми в функциях, используются указатели. Если в функцию передать не значение параметра, а его адрес, то в теле функции будет известно, где располагается объект, и, следовательно, этот объект может быть доступен. В функции в этом случае создаются копии не самих переменных, а их адресов.
11 С++. Функції з параметрами, що замовчуються, зі зміними параметрами
Спецификация формальных параметров может содержать так называемое умалчиваемое значение. При этом спецификация формальных параметров имеет вид:
тип имя_параметра=умалчиваемое_значение
При вызове такой функции умалчиваемый параметр может быть опущен.
В функциях с умалчиваемыми значениями параметров действует следующее правило: если параметр имеет умалчиваемое значение, то все параметры справа от него должны быть так же с умалчиваемыми значениями.
Пример 3.1
#include <stdio.h>
int def(int a, int b=3, int c=4)
{return a*b+c;}