Студопедия — Теми для попереднього вивчення. " Покажчики в мові C.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Теми для попереднього вивчення. " Покажчики в мові C.






" Покажчики в мові C.

" Представлення рядків.

" Функції і передача параметрів.

3. Постановка задачі

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

4. Індивідуальні завдання

№п.п Варіант
1. Функція - Copіes(s,s1,n) Призначення - копіювання рядка s у рядок s1 n раз
2. Функція - Words(s) Призначення - підрахунок слів у рядку s
3. Функція - Concat(s1,s2) Призначення - конкатенація рядків s1 і s2 (аналогічна бібліотечна функція C - strcat)
4. Функція - Parse(s,t) Призначення - поділ рядка s на двох частин: до першого входження символу t і після нього
5. Функція - Center(s1,s2,l) Призначення - центрування - розміщення рядка s1 у середині рядка s2 довжиною 1
6. Функція - Delete(s,n,l) Призначення - видалення з рядка s подстроки, починаючи з позиції n, довжиною l (аналогічна бібліотечна Функція є в Pascal)
7. Функція - Left(s,l) Призначення - вирівнювання рядка s по лівому краї до довжини l
8. Функція - Rіght(s,l) Призначення - вирівнювання рядка s по правому краї до довжини l
9. Функція - Іnsert(s,s1,n) Призначення - вставка в рядок s подстроки s1, починаючи з позиції n (аналогічна бібліотечна функція є в Pascal)
10. Функція - Reverse(s) Призначення - зміна порядку символів у рядку s на протилежний
11. Функція - Pos(s,s1) Призначення - пошук першого входження подстроки s1 у рядок s (аналогічна функція C - strstr)
12. Функція - LastPos(s,s1) Призначення - пошук останнього входження подстроки s1 у рядок s
13. Функція - Wordіndex(s,n) Призначення - визначення позиції початку в рядку s слова з номером n
14. Функція - WordLength(s,n) Призначення - визначення довжини слова з номером n у рядку s
15. Функція - SubWord(s,n,l) Призначення - виділення з рядка s l слів, починаючи зі слова з номером n
16. Функція - WordCmp(s1,s2) Призначення - порівняння рядків (з ігноруванням множинних пробілів)
17. Функція - StrSpn(s,s1) Призначення - визначення довжини тієї частини рядка s, що містить тільки символи з рядка s1
18. Функція - StrCSpn(s,s1) Призначення - визначення довжини тієї частини рядка s, що не містить символи з рядка s1
19. Функція - Overlay(s,s1,n) Призначення - перекриття частини рядка s, починаючи з позиції n, рядком s1
20. Функція - Replace(s,s1,s2) Призначення - заміна в рядку s комбінації символів s1 на s2
21. Функція - Compress(s,t) Призначення - заміна в рядку s множинних входжень символу t на одне.
22. Функція - Trіm(s) Призначення - видалення початкових і кінцевих пробілів у рядку s
23. Функція - StrSet(s,n,l,t) Призначення - установка l символів рядка s, починаючи з позиції n, у значення t
24. Функція - Space(s,l) Призначення - доведення рядка s до довжини l шляхом вставки пробілів між словами
25. Функція - Fіndwords(s,s1) Призначення - пошук входження в рядок s заданої фрази (послідовності слів) s1
26. Функція - StrType(s) Призначення - визначення типу рядка s (можливі типи - рядок букв, десяткове число, 16-ричное число, двоичное число т і)
27. Функція - Compul(s1,s2) Призначення - порівняння рядків s1 і та s2 з ігноруванням розходжень у регістрах
28. Функція - Translate(s,s1,s2) Призначення - переклад у рядку s символів, що входять в алфавіт s1, у символи, що входять в алфавіт s2
29. Функція - Word(s) Призначення - виділення першого слова з рядка s

 

Примітка: під "словом" скрізь розуміється послідовність символів, що не містить пробілів.

 

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.

 

5.4. Дані для тестування

Тестування повинне забезпечити перевірку працездатності функцій для усіх варіантів вхідних даних. Вхідні дані, на яких повинне проводитися тестування, зведені в таблицю:

 

варіант src num len dest

 

1 012345 2 2 23

012345 0 1 0

012345 0 6 012345

 

2 012345 5 3 5

012345 2 6 2345

012345 0 7 012345

 

3 012345 8 2 порожньо

 

4 012345 -1 2 порожньо

012345 5 0 порожньо

012345 5 -1 порожньо

 







Дата добавления: 2015-09-18; просмотров: 673. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Метод Фольгарда (роданометрия или тиоцианатометрия) Метод Фольгарда основан на применении в качестве осадителя титрованного раствора, содержащего роданид-ионы SCN...

Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод иссле­дования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом рас­творе...

Гальванического элемента При контакте двух любых фаз на границе их раздела возникает двойной электрический слой (ДЭС), состоящий из равных по величине, но противоположных по знаку электрических зарядов...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

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

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

Studopedia.info - Студопедия - 2014-2024 год . (0.014 сек.) русская версия | украинская версия