Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бабалова Алгоритмизация задач и структурирование программ 2013

.pdf
Скачиваний:
2
Добавлен:
12.11.2022
Размер:
1.29 Mб
Скачать

Слияние строк Function Concat(s1, s2, ..,sn):String; s3: = Concat(s1, s2);

s1=‘ my’, s2=’ home’, s3=’my home’.

Рассмотрим наиболее часто используемые функции для обработки строк. Задана строка S=’ abcdefgh’

Функция

Пример

K:=Length(s)

Длина строки k будет равна 9

Delete(s,4,1)

Строка s будет равна

 

‘ abdefgh’

Insert(s,’a’,3)

Строка s будет равна

 

‘ aabcdefgh’

Trim(s)

Строка s будет равна ‘abcdefgh’

K:=Pos(‘d’,s)

Позиция символа d в исходной строке

 

равна 5

S1:=Copy(s,5,2)

Новая строка s1 будет равна’de’

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

Решение этой задачи возможно с помощью предлагаемого алгоритма инверсии строки. Алгоритм решения задачи приводится на рис. 15.

Рис. 15. Структура программы и алгоритм инверсии строки

31

Графическая иллюстрация способа преобразования строки показана на рис. 16.

Рис. 16 Результат перестановки символов строки

Решение задачи в визуальной среде Delphi: unit Unit1_revers_string;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls; type

TForm1 = class(TForm) Edit1: TEdit;

Edit2: TEdit; Button1: TButton; Button2: TButton; Button3: TButton;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

s=string[60];

var

Form1: TForm1; s1:s;

implementation {$R *.dfm}

Procedure Revers(var ss:s;n:integer);

32

var t:char; begin

if n>length(ss) div 2 then begin

t:=ss[n]; ss[n]:=ss[length(ss)-n+1] ; ss[length(ss)-n+1]:=t; Revers(ss,n-1);

end;

end;// Метод инверсии строки

procedure TForm1.Button1Click(Sender: TObject); begin

s1:=edit1.text;

end; // Ввод строки из окна

procedure TForm1.Button2Click(Sender: TObject); var t:char;

r:integer; begin

r:=length(s1);

revers(s1,r); Edit2.Text :=s1;

end; // Событие, обеспечивающее вызов метода // преобразования строки

procedure TForm1.Button3Click(Sender: TObject); begin

close; end; end.

Рис. 17. Пример решения задачи

33

Пример 2.2. Дана строка, в которой слова разделены произвольным количеством пробелов. Удалить все лишние пробелы, кроме одного. Вывести исходную строку и результат ее обработки.

Алгоритм удаления пробелов в строке показан на рис. 18. Логическая переменная b введена в алгоритм для того, чтобы избежать лишних просмотров символов строки. Решение задачи приведено в консольном приложении. Результат решения задачи дан на рис. 19.

Рис. 18. Алгоритм удаления пробелов в строке

program Number_2; {$APPTYPE CONSOLE} uses

SysUtils;

var s:string[80]; i,n:integer; ch:char; b:boolean;

begin

writeln('Работает программа - пример на обработку строк'); repeat

writeln('Введите исходную строку'); readln(s);

34

writeln('Исходная строка = ',s); n:=length(s);{Определяем длину введенной строки} i:=1;

while (i<=n-1) do begin

if s[i]=' ' then begin

repeat

if s[i+1]=' ' then begin delete(s,i,1); n:=n-1; b:=false; end

else b:=true; until b;

end;

i:=i+1;

end;

writeln('Результат преобразования = ',s); writeln('Будете еще преобразовывать строки? ');

readln(ch); until ch='n';

end.

Рис. 19. Результаты удаления пробелов в строках

35

Задачи для самостоятельной работы

2.1. Дана строка, состоящая из 0 и 1. Длина строки любая. Определить количество подряд стоящих единиц Li и номера позиций Ki, занимаемых первыми единицами каждой группы.

2.2.Дана строка из слов, разделенных пробелами. В каждом слове поменять порядок букв на обратный.

2.3.Дана строка из английских слов. Расположить слова в строке по возрастанию количества гласных в слове.

2.4.Строка представляет английское предложение. Выделить все гласные и согласные буквы в этом предложении и расположить их в алфавитном порядке.

2.5.Дана строка из произвольных слов. Найти все одинаковые слова и удалить все повторения слов.

2.6.Вводится строка. В строке записана последовательность слов, разделенных хотя бы одним пробелом. Расположить в строке слова по возрастанию их длины.

2.7.Дана строка, длиной не более 80 символов. Подсчитать количество повторений каждой встречающейся в строке буквы. Напечатать результат обработки в форме:

<буква > < количество повторений > < исходная строка>

2.8.Дана строка символов. Удалить из строки все повторяющиеся символы, вывести исходную строку и результат обработки.

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

2.10.Дана последовательность слов в виде некоторого текста. К каждому слогу в словах текста добавить по новому слогу ”NO”. Слова в исходном тексте разделяются, по крайней мере, одним пробелом. Вывести исходный текст и результат обработки текста.

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

2.12.Дана строка из N букв. Разбить строку на слова по m букв

вкаждом слове. Вывести исходную строку и результат обработки строки.

36

2.13.Дана строка из неизвестного количества символов. Исключить из последовательности K-й элемент, сжать строку. Вставить за M-ым элементом новый элемент. Количество удалений и вставок – любое. Вывести исходную строку и все результаты преобразований.

2.14.“Это я знаю и помню прекрасно пи многие знаки мне лишни напрасны”. Ввести фразу и напечатать полученное значение

числа π. Проверить работоспособность программы на произвольном тексте. Вывести исходный текст и результат вычислений.

2.15. Заданная строка символов должна быть преобразована вычеркиванием всех символов, стоящих до первой точки в строке и после последней точки с запятой. Вывести исходную строку и результат обработки строки.

2.17.Дана строка из N букв. Разбить строку на K слов, в каждом из которых не более m букв. Вывести исходную строку и результат обработки строки.

2.18.Дан текст из некоторого количества предложений. Предложения разделяются знаком точка с запятой. Разделить текст на отдельные предложения. Вывести исходный текст, результат обработки текста и длину каждого полученного предложения.

2.19.Вводится произвольное количество строк. Определить сколько раз в каждой строке повторяются одинаковые буквы. Вывести исходные строки и результат обработки строк.

2.20.Вводится произвольный текст из неизвестного количества строк. Разделить текст на строки и упорядочить по 1-й букве строки. Конец каждой строки может быть любым из символов “. , ;”. Вывести исходный текст и результат обработки.

2.21.Дан текст из слов, разделенных пробелами. Выделить из текста слова, состоящие из 4, 5, 6 букв и оставшиеся слова. Напечатать исходный текст и результат его обработки.

2.22.Задан текст из латинских букв. Вывести в алфавитном порядке все буквы, встречающиеся в тексте только один раз. Вывод исходного текста обязателен.

2.23.Дана строка из K символов. Преобразовать строку, заменив все не одиночные пробелы одним пробелом, все точки – точкой с запятой, все многоточия – одной точкой. Вывести исходную строку

ирезультат ее обработки.

37

2.24.Вводится последовательность строк. Определить для каждой строки количество слов разной длины. Например, в i-й строке 5 слов длины 4 буквы, 3 слова длины 8 букв и т.д. Вывести на экран исходный текст и результат его обработки.

2.25.Вводится текст, разбитый на две строки знаком “;”. Удалить из этой пары строк все повторяющиеся символы. Вывести на экран исходный текст и результат его преобразования.

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

2.27.Вводится произвольный текст из некоторого количества строк. Обеспечить выравнивание текста по количеству символов в строке за счет размещения дополнительных пробелов в строках. Количество символов в строке перед каждой операцией выравнивания задается с клавиатуры. Вывести исходный текст и результат его обработки.

2.28.Каждая строка текста содержит цифры десятичной системы счисления и символы – знаки “+” или “–“. Строка заканчивается знаком “=“, пробелы в строке должны игнорироваться. Получить числовое значение вводимого выражения. Пример: 9+5–3=11. Вывести исходный текст и результат его обработки.

2.29.Вводится некоторая последовательность строк. В каждой строке слова переставить в обратном порядке. Пример: строка fdc, ads, 2.5cx, hjkl преобразуется в hjkl, 2.5cx, ads,fdc. Вывести исходный текст и результат его обработки.

2.30.Вводится произвольный текст, разбитый на строки знаком

; “. Слова в строке разделены, по крайней мере, одним пробелом. Выделить в каждой строке слова, в которых: а) первые буквы слов совпадают; б) длина слова – наибольшая в строке. Вывести исходный текст и результат его обработки.

2.31.Дана строка из английских слов. Выделить из строки подстроки из согласных букв, у которых и справа и слева стоят гласные буквы. Вывести исходную строку и результат ее обработки.

2.32.Дана строка длиной не более 80 символов. Строка представляет запись некоторой математической формулы. Проверить правильность записи формулы по открывающим “(” и закрывающим “)” скобкам.

38

2.33.Дана строка из некоторого количества слов. Слова разделены в строке знаками “, ”, “ пробел”. Вставить произвольное новое слово в строку за i-м словом. Вывести исходную строку и результат

еепреобразования.

2.34.Вводится строка произвольной длины. Определить количество одинаковых подряд стоящих символов. Вывести исходную строку и результат обработки строки.

2.35.Задана строка из некоторого количества слов. Слова записаны в строке через запятую. Найти в строке слова – палиндромы (перевертыши), например, шалаш или оно.

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

2.37.Строка является записью математической формулы с многократно вложенными круглыми скобками для определения порядка вычисления этого выражения. Заменить в записи выражения все круглые скобки, кроме первого уровня, соответственно на квадратные и фигурные скобки. Пример:

S=a0+(a1+x* ( a2+x* (a3+x*a4)))

S=a0+{a1+x* [ a2+x* (a3+x*a4)]}

2.38.Дана строка из букв и цифр. Найти самую длинную последовательность цифр в записи строки. Вывести исходную строку и результат ее обработки.

2.39.Дана строка из произвольного количества слов. Слова записаны через запятую. Закодировать все слова в строке, поменяв местами первую и последнюю буквы каждого слова. Вывести исходную строку и результат ее преобразования. Обеспечить декодирование слов.

2.40.Дана строка символов s. Найти все вхождения подстроки ss

висходную строку s. Выделенные подстроки надо инвертировать и поставить на свои места в исходную строку. Например:

s=asddfgasdddsf,

ss=asd.

Результат: dsadfgdsaddsf.

39

Тема 3. СТРУКТУРИРОВАНИЕ ПРОГРАММ. ФУНКЦИИ И ПРОЦЕДУРЫ

Структурное проектирование программ позволяет создавать программы из отдельных хорошо структурированных компонент – подпрограмм (ПП). ПП имеют в языке программирования два варианта записи структур – функции и процедуры.

Назначение процедур и функций – структурирование программ в соответствии с теми действиями, которые используются для решения задачи. Многократно повторяющиеся действия описываются один раз с помощью ПП, а затем исполняются с разными аргументами любое число раз.

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

Синтаксис процедур и функций в языке. Заголовок: procedure Swap( var x,y : integer);

function Min( N: integer; var a: massiv ): real;

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

иопределяющие результат решения, который возвращается в основную программу.

Взаголовке функции обязательно указывается тип получаемого результата. Тип – это простой или ранее определенный в основной программе тип данных разработчика программы (запись, элемент списка, файловая переменная).

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

40