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

Основні алгоритми роботи з літерними величинами

Читайте также:
  1. I. Основні риси політичної системи України
  2. Автоматизация и роботизация
  3. Алгоритм роботи командирiв щодо попередження та подолання конфлiктних ситуацiй
  4. Алгоритми роботи посадових осіб щодо профілактики суїцидальних проявів
  5. АЛГОРИТМИЗАЦИИ
  6. Алгоритмизация и программирование
  7. Алгоритмизация модели и её машинная реализация
  8. Алгоритмизация процесса разработки и принятия управленческого решения
  9. Алгоритмизация решения задач на компьютере
  10. Аналіз ефективності роботи основних засобів та довгострокових інвестицій
  11. Аналіз роботи системи
  12. Б) Основні властивості операцій над множинами

Для обробки літерних величин існує ряд основних алгоритмів, які входять до складу інших алгоритмів роботи з текстом. Наведемо деякі з них:

1)підрахунок заданого символа в тексті;

2)заміна одного символа на інший;

3)викреслювання заданого символа з тексту;

4)заміна букви буквосполученням;

5)переворот тексту;

6)підрахунок заданого буквосполучення в слові;

7)пошук заданого символа в тексті;

8)пошук у тексті символів, що позначають розділові знаки.

 

1)Підрахунок заданого символа в тексті 2)Заміна одного символа на інший
АЛГ ціл ps (літ Т, В) ПОЧ ціл і, dl, k dl:=довжин(Т); k:=0 для і від 1 до dl пц якщо T[i, 1]=B то k:=k+1 все кц ps:=k КІН АЛГ літ zs (літТ, В1, В2) ПОЧ ціл і, dl dl:=довжин(Т) для і від 1 до dl пц якщо T[i, 1]=В1 тоT[i, 1]:=B2 все кц zs:=T КІН

 

Мовою Паскаль функції мають вигляд

1) Function count (S:string; B:char):byte; var i, c:byte; begin c:=0; for i:=1 to length (S) do if S[i]=b then c:=c+1; count:=c; end; 2) Function Replace (S:string; a, b:char):string; var i:byte; begin for i:=1 to length (S) do if S[i]=a then S[i]:=b; Replace:=S; end;

 

3) Викреслювання заданого символа з тексту: 4)Заміна букви буквосполученням:
АЛГ літ vs (літТ, В) ПОЧ ціл і dl, літR dl:=довжин(Т); R:=’ ‘ дляі від1 до dl пц якщо T[i, 1] B то R:+R+T[i, 1] все кц vs:=R КІН АЛГ літ zbs (літ T, B, BS) ПОЧ ціл і, dl, літ R dl:=довжин(Т); R:=’ ‘ для і від1 до dl пц якщо T[i, 1]=B то R:=R+BS інакшеR:=R+T[i, 1] все кц zbs:=R КІН  

Розв’язання мовою Паскаль:

3)Function del (S:string; b:char):string; var i:byte; begin i:=1; while i<=lengh (S) do begin ifS[i]=b then delete(S, i, 1) elsei:=i+1; end; end;   Зауважимо, що запропонований розв’язок не формує новий рядок, як у рішенні НАМ, тому він вимагає використання циклу while. Адже при вилученні символів довжина рядка зменшується, що може призвести до помилки у результаті, якщо використовувати цикл for. 4)FunctionReplace2 (S:string; b:char; BS:string):string; vari:byte; begin i:=1; while i<=lengt(S) do begin if S[i]=B then begin delete (S, i, 1); insert (BS, S, i); i:=i+length (BS); end; i:=i+1; end; Replace2:=S; end;   При заміні символа буквосполученням також використовуємо процедури, що змінюють довжину вихідного рядка (delete та insert), тому розв’язання мовою Паскаль також будується на циклі while.
5)Переворот тексту 6)Підрахунок заданого буквосполучення в слові
АЛГ літ obr (літ Т) ПОЧ ціл і, dl, літ R dl:=довжин (Т); R:=’ ‘ якщо dlSL=dlbs дляі від 1 до dl пц R:=T[i, 1]+R кц obr:=R КІН   АЛГ pbs (літ SL, BS) ПОЧ ціл і, dlSL, dlbs, m, k dlSL:=довжин(Т); dlbs:=довжин(BSk:=0; m:=dlSL+1 – dlbs) то для і від 1 до m пц якщо SL[i, dlbs]=BS то k:=k+1 все кц все pbs:=k КІН

Мовою Паскаль розв’язання мають вигляд:

5)Function Perevorot (S:string):string; var i:byte; s1:string; begin s1:=’ ‘; for i:=1 to length (S) do s1:=S[i]+s1; Perevorot:=s1; end; end; 6)Functioncount (S, BS:string):byte; var i:byte; c:byte; begin c:=0; for i:=1 to length(S) – length(BS)+1 do if copy (S, i, length(BS))=BS then c:=c+1; count:=c;  

 

Зверніть увагу, що оскільки вихідний рядок не змінюється в результаті роботи програми, можна використовувати цикл for, але кінцеве значення лічильника не повинно перевищувати різницю між довжиною даного рядка та шуканого плюс 1.

ЯКЩО ШУКАНИЙ РЯДОК МАЄ ДОВЖИНУ, БІЛЬШУ ВІД ЗАДАНОГО, РІЗНИЦЯ ДОВЖИН БУДЕ ВІД’ЄМНОЮ І ЦИКЛ for НЕ СПРАЦЮЄ. ЦЕ ДОЗВОЛЯЄ НЕ ВИКОРИСТОВУВАТИ КОМАНДУ if, ЯК У МОВІ НАМ!

 

7) Пошук заданого символа в тексті:

Т – заданий рядок. S – шуканий символ

АЛГ ціл poisks (літ T, s)

ПОЧ ціл і, р

dlt:=довжин(Т)

р:=0

поки та р=0

пц

якщо T[i, 1]=s

то р:=1

інакше і:=і+1

Все

кц

poisks:=p

КІН

 

Оскільки при виконанні пошуку заданого елемента в тексті, знайшовши елемент, не має сенсу продовжувати пошук, використовуємо цикл while. Закінчуємо роботу циклу, коли закінчиться рядоу або буде знайдено шуканий елемент.

 

ОСКІЛЬКИ ФУНКЦІЄЮ copy МОЖНА ВИДІЛИТИ НЕ ОБОВ’ЯЗКОВО ОДИН СИМВОЛ, ТО ЗАПРОПОНОВАНА ФУНКЦІЯ МОЖЕ ЗНАХОДИТИ У РЯДКУ НЕ ТІЛЬКИ ОДИН СИМВОЛ, А Й БУДЬ-ЯКУ ЗАДАНУ ПОСЛІДОВНІСТЬ СИМВОЛІВ!

 

Function Search (S, BS: string): boolean;

var dl, i: byte;

Begin

i:=1; dl:=length(S) – length(BS)+1;

while (i<=dl) and (copy (S, i, length(BS))<>BS) do i:=i+1;

if i>dl

then Search:= false

else Search:= true;

end;

 

Найчастіше цю функцію використовують, коли із знайденим елементом необхідно щось зробити, а тому зручно значення, що повертається, зробити логічного (boolean) типу. Тоді функція повертає true, якщо елемент знайдено, і false – в протилежному випадку.

Останнє розгалуження в тілі функції пояснюється таким чином: якщо цикл while закінчився завдяки першій умові (і перевищило значення dl), шуканий елемент не знайдено, у протилежному випадку – знайдено.

Використовуючи запропоновану функцію, можна розв’язати складнішу задачу: пошук у тексті розділових знаків, що зберігаються у рядку R.

Function Rozd (S: string): boolean;

var j: byte; p: boolean; R: string;

Begin

R:=’., 1:;!?-‘;

p:= true; j:=1;

while p and (j<=length(R)) do

Begin

p:=search (S, R[j]);

j:=j+1;

end;

Rozd:=p;

end;

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)