Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Результаты работы программы
Результат работы представляется в графическом режиме в виде решетчатой функции на экране терминала.
Тема 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; Нарушение авторского права страницы