Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Надання значення змінній-показівникуСодержание книги
Поиск на нашем сайте
Надання показівнику значення іншого показівника. За допомогою спеціальної процедури, що зв'язує з динамічною змінною область пам'яті у heap-області. NEW(var p:pointer); За допомогою безпосереднього надання показівнику припустимого значення адреси: 1) Використання оператора @ @ - унарний оператор, що повертає адресу статичної змінної, процедури чи функції, сумісну з типом NIL (тобто з любим типом показівника): a) використання для змінної - повертає адресу цієї змінної у вигляді <сегмент>:<зміщення> @<ідентифікатор змінної> <показівник> b) використання для процедури дозволяє отримати точку входу - адресу, з якої починається її виконання. Використовується для надання керування відповідній процедурі чи функції @<ідентифікатор процедури, функції> <показівник на точку входу> 2) addr(x):pointer; x - будь-яка змінна чи ідентифікатор процедури/функції. Результат - показівник на x, сумісний із всіма типами показівників. 3) ptr(<сегмент>,<зміщення>:word):pointer; функція перетворює надану у вигляді <сегмент>:<зміщення> адресу у показівник 4) seg(x):word ofs(x):word x - ідентифікатор змінної, процедури чи функції. Ці функції повертають: seg - адресу сегменту об'єкту x ofs - адресу зміщення об'єкту x 5) dseg:word; - функція повертає адресу сегменту даних (вміст регістру ds) cseg:word; - адресу сегменту коду (регістр cs) sseg:word; - адресу сегменту стеку (регістр ss). Надання показівнику значення NIL розриває зв'язок між змінною та показівником, але не знищує самої змінної у динамічній пам'яті. Місце, яке вона займає, залишається зарезервованим і не може бути використано іншими динамічними змінними. DISPOSE(var p:pointer); процедура знищує динамічну змінну, на яку посилається показівник p, та повертає пам'ять, що вона займала, до динамічної нерозподіленої пам'яті. Значення показівника р стає невизначеним. Слідкувати за звільненням динамічних змінних слід самостійно. Утворювати та визволяти динамічні змінні можна також за допомогою іншої пари процедур: getmem ~ freemem Але якщо у процедурах NEW - DISPOSE об'єм пам'яті, що виділяється під динамічну змінну, визначається базовим типом показівника, то у процедурах getmem и freemem він визначається безпосередньо, за допомогою додаткового параметра. getmem(var p:pointer;size:word); утворює динамічну змінну розміром size freemem(var p:pointer,size:word); звільнює динамічну змінну розміром size. Параметр size повинен дорівнювати відповідному параметру у процедурі getmem. Блочне визволення пам'яті Існують дві зв'язані між собою процедури, одна з яких фіксує поточний стан динамічної пам'яті (наприклад, перед викликом блоку процедури або функції), а інша відновлює цей стан (наприклад, після його виконання, звільнюючи всі динамічні змінні, які за цей час були утворені). mark(var p:pointer); записує поточний стан heap-області у змінну p (фактично записується heaptr) release(var p:pointer); повертає динамічну область до попереднього стану через показівник p (тобто heapptr надається значення p) Процедура release(heaporg); звільняє всю динамічно розподілену пам'ять. Таким чином, існує декілька засобів утворення та знищення динамічної змінної: NEW/DISPOSE NEW/MARK/RELEASE GETMEM/FREEMEM.
Опис та використання підпрограм. Реалізація базових алгоритмічних структур процедурною мовою програмування. Опис процедур та функцій процедурною мовою програмування. Реалізація рекурсивних алгоритмів процедурною мовою програмування. Модульне програмування та його реалізація в системах процедурного програмування. Базові структури алгоритмів (керуючі структури) – це способи керування процесами обробки даних. Комбінуючи керуючі структури, можна складати програми для розв’язання різноманітних задач. Виділяють три базові алгоритмічні конструкції: лінійні алгоритми (послідовне виконання); умова розгалуження; цикли. Лінійна структура (наступність) передбачає, що тіло алгоритму являє собою послідовність команд, виконуваних одна за іншою поспіль. Умова (розгалуження) – це вид керуючої структури, що передбачає можливість вибору з кількох варіантів, для кожного з яких, залежно від визначеної умови, виконується різна послідовність команд. Цикл – це вид керуючої структури, що дозволяє багаторазово повторити задану послідовність команд. Розгалуження. У мові Паскаль алгоритм із розгалуженням реалізований за допомогою умовного оператора if або case. Загальний вигляд умовного оператора if. if <вираз> then <оператор 1> або <серія 1> else <оператор 2> або <серія2> де <вираз> - будь-який вираз логічного типу (що виробляє в результаті True або False); <оператор 1> і <оператор 2> - оператори мови Паскаль, <серія 1> і <серія 1> - набір операторів мови Паскль.Якщо вираз набуде значення True, то виконується <оператор (серія) 1>, в іншому разі - <оператор (серія) 2>. Мовою блок-схем ця команда записується у наступному вигляді: Друга або скорочена форма команди розгалуження: if < умова > then begin <серія>; end; Мовою блок-схем вона записується так: У повній формі команди умовного переходу виконується <серія 1>, якщо умова істинна, і <серія 2>, якщо вона хибна. В скороченій формі - серія виконується тільки у випадку, якщо умова істинна, у протилежному випадку команда розгалуження закінчується і виконується наступний за нею оператор. Оператор служить для вибору одного з помічених варіантів дії (операторів), залежно від значення "параметра". Оператор має вигляд: Case "параметр" "список помічених операторів" Else "оператор" End; Тут "параметр" - вираз або змінна порядкового типу. З "списку помічених операторів" виконується оператор з міткою, що включає значення "параметра", інакше оператор після слова Else. Конструкція Else "оператор" може бути відсутній. Нагадаємо, що "оператор" може мати вигляд: Begin "оператори" end; Приклад операторів для визначення порядку цілого числа N від 0 до 999: case N 0..9: writeln('однозначне'); 10..99: writeln('двухначне'); 100..999: writeln('трьохзначне') else writeln('Число "N" не входить у вказаний діапазон') end; Цикли 1. Безумовний цикл Якщо заздалегідь відома кількість повторень циклу, то можна скористатися циклом із покроковою зміною аргументу. Його перевагою є стислість і простота запису. Циклічні програми з покроковою зміною аргументу мовою Паскаль реалізовані за допомогою оператора циклу for: for <лічильник циклу>: = <вираз 1> to <вираз 2> do <тіло циклу> де <лічильник циклу> - змінна будь-якого типу, <вираз 1> і <вираз 2> - вирази такого самого типу; <тіло циклу> - будь-яка послідовність операторів, що повторюється доти, доки <лічильник циклу> не набере значення <вираз 2>. <Лічильник циклу> збільшується на 1 після кожного виконання циклу. Для його зменшення на 1 зарезервоване слово to змінене на слово downto. 2. Цикл-поки (з передумовою) До нього входять як базові такі структури: блок перевірки умови Р і блок S, що називається тілом циклу. Блок перевірки умови розташований раніше тіла циклу і керує роботою циклу. Оскільки тіло циклу S розташоване після перевірки умови Р, то може статися, що за певних умов блок S не буде виконано жодного разу. Циклічні програми з передумовою мовою Паскаль реалізовані за допомогою оператора циклу while: while <вираз> do <оператор> де <вираз> - будь-який вираз логічного типу (що виробляє в результаті True або False); <оператор> - оператор (складений оператор) мови Паскаль. Якщо вираз набуде значення True, то виконується <оператор>, в іншому разі виконання циклу завершується. 3. Цикл-до (з постумовою) Характеризується тим, що перевірка умови Р стоїть після тіла циклу. Під час роботи циклу з постумовою тіло циклу S виконується принаймі один раз і буде виконуватися доти, доки не справдиться умова Р. Справдження умови Р в цьому випадку – умова закінчення циклу. Циклічні програми з постумовою мовою Паскаль реалізовані за допомогою оператора циклу repeat: repeat <тіло циклу> until де <тіло циклу> - будь-яка послідовність операторів, що повторюється доти, доки <вираз> не набере значення True.
|
||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.98.240 (0.011 с.) |