- •Методичні вказівки
- •Київ 2010 зміст
- •Прикладна архітектура процессора 8086(8088)
- •1.1. Теоретичні відомості.
- •Регістри процесора 8088(8086)
- •Порядок виконання роботи
- •Зміст звіту
- •Лабораторні роботи на мові Асемблер
- •Лабораторна робота n 1_1 Перша програма на Асемблері
- •Короткі теоретичні відомості
- •Варіанти завдань
- •Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.
- •Лабораторна робота n 2. Com-файли.
- •Лабораторна робота n 3. Визначення даних.
- •Директива equ.
- •Варіанти завдань
- •3.Визначенняподвійногослова:
- •Лабораторна робота n5. Організація циклічних процесів
- •Варіанты завдань
- •Лабораторна робота n6. Переривання
- •Лабораторна робота n7. Процедури і макрокоманди
- •Лабораторні роботи на мові с
- •Лабораторна робота n 8. Робота з символьними рядками
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання:
- •5.2. Опис методу рішення
- •5.3. Опис логічної структури
- •5.4. Дані для тестування
- •5.5. Текст програми
- •Лабораторна робота n9. Представлення у памяті масивів і матриць
- •6. Приклад вирішення задачі
- •6.3. Опис логічної структури
- •6.3.1. Загальні перемінні
- •6.3.2. Функція creat_matr
- •6.3.3. Функція close_matr
- •6.3.4. Функція read_matr
- •6.3.5. Функція wrіte_matr
- •6.3.6. Функція ch_coord
- •6.3.7. Функція lіn
- •6.4. Програма користувача
- •6.5. Тексти програмних модулів
- •Лабораторна робота n 10. Структури і зв'язні списки
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •3. Варіанти індивідуальних завдань
- •6. Приклад вирішення задачі
- •6.3.3.Функція друку списку
- •Лабораторна робота n11. Перевірка устаткування
- •5.2. Структура програми
- •5.3. Опис змінних
- •5.4. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n12. Керування клавіатурою
- •5. Приклад вирішення задачі
- •5.2.3. Опис алгоритму програми
- •5.3. Текст програми
- •5.4. Результати роботи програми
- •6. Приклад вирішення задачі
- •6.4.3. Опис алгоритму програми
- •6.5. Текст програми
- •6.6. Результати роботи програми
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання.
- •5.4. Розробка алгоритм рішення
- •5.4.1. Структура програми
- •5.4.2. Опис перемінних
- •5.4.3. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •5.1.3. Опис алгоритму програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Лабораторна робота n16 Дискові структури даних dos.
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритм програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Рекомендована_література
- •Додаток 1. Перелік тем лабораторних занять з дисципліни «Операційні системи»
5. Приклад рішення задачі
5.1. Індивідуальне завдання:
" Функція - substr(s,n,l). Призначення - виділення з рядка s подстроки, починаючи з позиції n, довжиною l.
5.2. Опис методу рішення
5.2.1. Символьний рядок у мові C представляється в пам'яті як масив символів, наприкінці якого знаходиться байт із кодом 0 - ознака кінця рядка. Рядок, як і будь-який інший масив можна обробляти або традиційним методом - як масив, з використанням операції індексації, або через покажчики, з використанням операцій адресної арифметики. При роботі з рядком як з масивом потрібно мати на увазі, що довжина рядка заздалегідь невідома, так що цикли повинні бути організовані не з лічильником, а до появи ознаки кінця рядка.
5.2.2. Функція повинна реалізовувати поставлену задачу - і нічого більш. Це означає, що функцію можна буде, наприклад, перенести без змін у будь-яку іншу програму, якщо специфікації функції задовольняють умовам задачі. Це також означає, що при помилковому завданні чи параметрів при якихось особливих випадках у їхніх значеннях функція не повинна аварийно завершувати чи програму виводити якісь повідомлення на екран, але повинна повертати якесь прогнозоване значення, по якому та функція, що викликала нашу, може зробити висновок про чи помилку про особливий випадок.
Визначимо склад параметрів функції:
іnt substr (src, dest, num, len);
де src - рядок, з яким вибираються символи;
dest - рядок, у яку записуються символи;
num - номер першого символу в рядку src, з якого починається подстрока (нумерація символів ведеться з 0);
len - довжина вихідного рядка.
Можливі значення функції, що повертаються, установимо: 1 (завдання параметрів правильне) і 0 (завдання не правильне). Ці значення при звертаннях до функції можна буде інтерпретувати як "істина" чи "неправда".
Позначимо через Lsrc довжину рядка src. Тоді можливі такі варіанти при завданні параметрів:
" num+len <= Lsrc - цілком правильне завдання;
" num+len > Lsrc; num < Lsrc - правильне завдання, але довжина вихідного рядка буде менше, ніж len;
" num >= Lsrc - неправильне завдання, вихідний рядок буде порожньою;
" num < 0 чи len <= 0 - неправильне завдання, вихідний рядок буде порожньою.
Помітимо, що інтерпретація конфігурації параметрів як правильна / неправильна і вибір реакції на неправильне завдання - справа виконавця. Але виконавець повинний строго виконувати прийняті правила. Можливий також випадок, коли вихідний рядок вийде більшої довжини, чим для неї відведене місця в пам'яті. Однак, оскільки нашої функції невідомий розмір пам'яті, відведений для рядка, функція не може розпізнати й обробити цей випадок - так само поводяться і бібліотечні функції мови C.
5.3. Опис логічної структури
5.3.1. Програма складається з одного програмного модуля - файл LAB1.C. До складу модуля входять три функції - maіn, substr_mas і subs_ptr. Загальних перемінних у програмі немає. Макроконстантою N визначена максимальна довжина рядка - 80.
5.3.2. Функція maіn є головною функцією програми, вона призначена для уведення вихідного даних, виклику інших функцій і висновку результатів. У функції визначені перемінні:
o ss і dd - вхідний і вихідний рядки відповідно;
o n - номер символу, з якого повинна починатися вихідний рядок;
o l - довжина вихідного рядка.
Функція запитує і вводить значення вхідного рядка, номера символу і довжини. Далі функція викликає функцію substr_mas, передаючи їй як параметри введені значення. Якщо функція substr_mas повертає 1, виводиться на екран вхідний і вихідний рядки, якщо 0 - виводиться повідомлення про помилку і вхідний рядок. Потім вхідний рядок робиться порожній і те ж саме виконується для функції substr_ptr.
5.3.3. Функція substr_mas виконує поставлене завдання методом масивів. Її параметри: - src і dest - вхідний і вихідний рядки відповідно, представлені у виглядімасивів невизначеного розміру; num і len. Внутрішні перемінні й і j використовуються як індекси в масивах.
Функція перевіряє значення параметрів у відповідності з випадком 4, якщо умови цього випадку виявлені, у перший елемент масиву dest записується ознака кінця рядка і функція повертає 0.
Якщо випадок 4 не виявлений, функція переглядає num перших символів вхідного рядка. Якщо при цьому буде знайдена ознака кінця рядка, це - випадок 3, при цьому в перший елемент масиву dest записується ознака кінця рядка і функція повертає 0.
Якщо ознака кінця в перших num символах не знайдений, виконується цикл, у якому індекс вхідного масиву починає мінятися від 1, а індекс вихідного - від 0. У кожній ітерації цього циклу один елемент вхідного масиву пересилається у вихідний. Якщо пересланий елемент є ознакою кінця рядка (випадок 2), то функція негайно закінчується, повертаючи 1. Якщо в циклі не зустрінеться кінець рядка, цикл завершиться після len ітерацій. У цьому випадку в кінець вихідного рядка записується ознака кінця і Функція повертає 1.
5.3.4. Функція substr_ptr виконує поставлене завдання методом покажчиків. Її параметри: - src і dest - вхідний і вихідний рядки відповідно, представлені у виглядіпокажчиків на початки рядків; num і len.
Функція перевіряє значення параметрів у відповідності з випадком 4, якщо умови цього випадку виявлені, за адресою, що задає dest, записується ознака кінця рядка і функція повертає 0, ці дії виконуються одним оператором.
Якщо випадок 4 не виявлений, функція пропускає num перших символів вхідного рядка. Це зроблено циклом whіle, умовою виходу з який є зменшення лічильника num до 0 чи поява ознаки кінця вхідного рядка. Важливо чітко представляти порядок операцій, що виконуються в цьому циклі:
o вибирається лічильник num;
o лічильник num зменшується на 1;
o якщо обране значення лічильника було 0 - цикл завершується;
o якщо обране значення було не 0 - вибирається символ, на який указує покажчик src;
o покажчик src збільшується на 1;
o якщо обране значення символу було 0, тобто, ознака кінця рядка, цикл завершується, інакше - повторюється.
Після виходу з циклу перевіряється значення лічильника num: якщо воно не 0, це означає, що вихід з циклу відбувся по ознаці кінця рядка (випадок 3), за адресою, що задає dest, записується ознака кінця рядка і функція повертає 0.
Якщо ознака кінця не знайдений, виконується цикл, подібний до першого циклу whіle, але по лічильнику len. У кожній ітерації цього циклу символ, на який показує src листується за адресою, що задається dest, після чого обидва покажчики збільшуються на 1. Цикл закінчиться, коли буде переписано len чи символів зустрінеться ознака кінця рядка. У будь-якому варіанті завершення циклу по поточному адресі, що міститься в покажчику dest, записується ознака кінця рядка і функція завершується, повертаючи 1.