Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Результаты работы программы



Результат работы представляется в графическом режиме в виде решетчатой функции на экране терминала.

 

Тема 4 Управление памятью в операционных системах

Программирование работы с символьными переменными. Получение практических навыков в работе с массивами и указателями языка С, обеспечение функциональной модульности.

Цель работы: Получение практических навыков в работе с массивами и указателями языка С, обеспечение функциональной модульности.

Постановка задачи

По индивидуальному заданию создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции. Предусмотреть обработку ошибок в задании параметров и особые случаи. Разработать два варианта заданной функции - используя традиционную обработку массивов и используя адресную арифметику.

Индивидуальные задания

1. Функция Compress(s,t) Назначение: замена в строке s множественных вхождений символа t на одно

2. Функция Words(s) Назначение: подсчет слов в строке s

3. Функция Concat(s1,s2) Назначение: конкатенация строк s1 и s2 (аналогичная библиотечная функция С - strcat)

4. Функция Parse(s,t) Назначение: разделение строки s на две части: до первого вхождения символа t и после него

5. Функция Center(s1,s2,k) Назначение: центрирование -размещение строки s1 в середине строки s2 длиной k

6. Функция Delete(s,n,k) Назначение: удаление из строки s подстроки, начиная с позиции n, длиной k (аналогичная библиотечная Функция есть в Pascal).

7. Функция Left(s,k) Назначение: выравнивание строки s по левому краю до длины k.

8. Функция Rlght(s,k) Назначение: выравнивание строки s по правому краю до длины k.

9. Функция Insert(s,s1,n) Назначение: вставка в строку s подстроки s1, начиная с позиции n (аналогичная библиотечная функция есть в Pascal).

10. Функция Reverse(s) Назначение: изменение порядка символов в строке s на противоположный.

11. Функция Pos(s,s1) Назначение: поиск первого вхождения подстроки s1 в строку s (аналогичная функция С - strstr).

12. Функция LastPos(s,s1) Назначение: поиск последнего вхождения подстроки s1 в строку s.

13. Функция Wordlndex(s,n) Назначение: определение позиции начала в строке s слова с номером n.

14. Функция WordLength(s,n) Назначение: определение длины слова с номером n в строке s.

15. Функция SubWord(s,n,kl). Назначение: выделение из строки s k слов, начиная со слова с номером n.

16. Функция WordCmp(s1,s2) Назначение: сравнение строк (с игнорированием множественных пробелов).

17. Функция StrSpn(s,s1) Назначение: определение длины той части строки s, которая содержит только символы из строки s1.

18. Функция StrCSpn(s,s1) Назначение: определение длины той части строки 8, которая не содержит символы из строки 81.

19. Функция Overlay(s,s1,n) Назначение: перекрытие части строки s, начиная с позиции n, строкой s1.

20. Функция Replace(s,s1,s2) Назначение: замена в строке s комбинации символов s1 на s2.

Пример решения задачи

Функция substr(s,n,l) Назначение: выделение из строки s подстроки, начиная с позиции n, длиной 1.

Описание метода решения

Символьная строка в языке С представляется в памяти как массив символов, в конце которого находится байт с кодом 0 - признак конца строки. Строку, как и любой другой массив можно обрабатывать либо традиционным методом - как массив, с использованием операции индексации, либо через указатели, с использованием операций адресной арифметики. При работе со строкой как с массивом нужно иметь в виду, что длина строки заранее неизвестна, так что циклы должны быть организованы не со счетчиком, а до появления признака конца строки.

Функция должна реализовывать поставленную задачу - и ничего более. Это означает, что функцию можно будет, например, перенести без изменений в любую другую программу, если спецификации функции удовлетворяют условиям задачи. Это также означает, что при ошибочном задании параметров или при каких-то особых случаях в их значениях функция не должна аварийно завершать программу или выводить какие-то сообщения на экран, но должна возвращать какое-то прогнозируемое значение, по которому та функция, которая вызвала нашу, может сделать вывод об ошибке или об особом случае.

Определим состав параметров функции: int substr (src, dest, num, len);

где:      

src - строка, с которой выбираются символы;

dest - строка, в которую записываются символы;

num - номер первого символа в строке src, с которого начинается подстрока

(нумерация символов ведется с 0);

len - длина выходной строки.

Возможные возвращаемые значения функции установим: 1 (задание параметров правильное) и 0 (задание не правильное). эти значения при обращениях к функции можно будет интерпретировать как «истина»или «ложь».

Обозначим через Lsrc длину строки src. Тoгдa возможны такие варианты при задании параметров:

num+len <= Lsrc - полностью правильное задание;

num+len> Lsrc; num < Lsrc - правильное задание, но длина выходной строки будет меньше, чем len;

num >= Lsrc - неправильное задание, выходная строка будет пустой;

num < 0 или len <= 0 - правильное задание, выходная строка будет пустой.

Заметим, что интерпретация конфигурации параметров как правильная/неправильная и выбор реакции на неправильное задание - дело исполнителя. Но исполнитель должен строго выполнять пpинятыe правила. Возможен также случай, Кoгдa выходная строка выйдет большей длины, чем для нее отведено места в памяти. Однако, поскольку нашей функции неизвестен размер памяти, отведенный для строки, функция не может распознать и обработать этот случай - так же ведут себя и библиотечные функции языка С.


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 393; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.011 с.)
Главная | Случайная страница | Обратная связь