Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012_METODICh_POSOBIE_PASCAL.doc
Скачиваний:
18
Добавлен:
15.09.2019
Размер:
2.97 Mб
Скачать

Лабораторная работа № 6. Обработка строк с использованием операторов цикла.

При выполнении работы необходимо знать:

  • Особенности работы со строками.

  • Операторы цикла и уметь применять их при обработке строк.

  • Уметь составить схему программы (алгоритм) циклической структуры для задачи по обработке строк и записать программу по готовому алгоритму.

Теоретический минимум:

  1. Строки.

Строки – представляют собой последовательность символов, иными словами структуры, состоящие из элементов простого типа (Char).

Значение типа string представляет собой строку длиной от 0 (пустая строка) до 255 символов. При этом нулевой байт строки содержит сведения о текущей длине строки.

Примеры строковых значений:

‘12345’ ‘@#$%^’ ‘TRUE’ ‘АБВГДЕЖЗ’ ‘2007 год’

Следует помнить, что строка ‘12345’ не имеет ничего общего с числом и с ней нельзя производить арифметических действий. Строка ‘TRUE’ также вовсе не является значением типа Boolean.

Пример описания переменных строкового типа:

Var

A: string; {если длина строки не указана, то по умолчанию}

{она считается равной 255 символам}

B: string [80]; {максимальную длину строки можно указать явно}

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

Строки занимают промежуточное положение между простыми и структурированными типами данных. Строка – это структура, состоящая из элементов простого типа (Char). И в тоже время к строкам применимы некоторые действия, неприменимые к данным структурированного типа. Например, строку можно ввести с клавиатуры или вывести на экран, воспользовавшись операторами Read(A) и Write(A), где А-переменная строкового типа. Также допустимо сравнивать строки. Эти действия невозможны с другими данными структурированного типа – массивами и записями, обработка которых осуществляется только в цикле.

Обратиться к отдельному символу строки можно, указав имя строковой переменной и порядковый номер символа в строке, например:

A[5]:=’F’; {5-му символу в строке присваивается значение типа Char }

Write(A[33]); {значение 33-го символа строки выводится на экран}

Переменную типа string можно сравнить с другой переменной или константой типа string, используя знаки >, <, >=, <=, <>. Строки сравниваются посимвольно от первого символа. Если все символы строк одинаковы, то строки считаются равными. Если в одинаковых позициях строк находятся разные символы, то большей считается та строка, у которой в этой позиции находится символ с большим кодом.

К строкам применимы некоторые специальные процедуры и функции, приведенные в таблице.

Таблица 9. Стандартные строковые процедуры и функции.

Процедура или функция

Назначение

Тип результата

Length(x)

Определяет текущую длину строки х.

Целое число – количество символов строки х.

Delete(x, p, n)

Позволяет удалить часть строки х, начиная с позиции p, длиной n символов.

Строка.

Pos(x1, x)

Позволяет определить положение подстроки х1 в строке х.

Целое число, номер позиции вхождения подстроки в строку. Если подстрока не найдена, возвращает ноль.

Copy(x, p, n)

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

Строка.

Insert (x1, x, n)

Вставка подстроки х1 в строку х, начиная с позиции n.

Строка.

Val(x, p, n)

Позволяет преобразовать изображение числа х в число, р - переменная, которой присваивается полученное число, n - код ошибки.

Если строка успешно преобразована в число, то код ошибки ноль, если преобразование невозможно, то код ошибки равен номеру позиции в строке, содержащей недопустимый символ.

Для того, чтобы обработать строку посимвольно от первого символа до последнего, можно применить цикл, например:

For i:=1 to Length(x) do { переменная i перебирает номера символов строки }

If x[i]=’a’ then k:=k+1; { подсчитываем в цикле количество букв ‘а’ в строке }

Задача 6.

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

Математическая формулировка задачи:

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

Как заменить пробелы или запятые символом звездочка? Очевидно, нужно заново просмотреть строку посимвольно в цикле, и как только встретится интересующий нас символ (пробел или запятая), присвоить этому символу новое значение, то есть заменить его символом звездочка.

А лгоритм решения задачи 6:

Текст программы к задаче 6:

Program Ex_6;

Uses Crt;

Label 1;

Var

S: string; { строка }

kl, k2: integer; { количество пробелов и запятых }

i: integer; { текущий номер символа строки}

Begin

ClrScr;

Write(‘Введите строку ’);

Readln(S);

k1:=0; k2:=0;

For i:=1 to Length(S) do { переменная i перебирает номера символов строки }

Begin

If S[i]=’ ’ then k1:=k1+1;

{ подсчитываем в цикле количество пробелов в строке }

If S[i]=’,’ then k2:=k2+1;

{ подсчитываем в цикле количество запятых в строке }

End;

If k1>k2 then begin

For i:=1 to Length(S) do

If S[i]=’ ’ then S[i]:=’*’; { заменяем пробелы на * }

End

Else

If k2>k1 then begin

For i:=1 to Length(S) do

If S[i]=’, ’ then S[i]:=’*’; { заменяем запятые на * }

End

Else goto 1;

Writeln(‘Измененная строка: ’,S);

1: Readln;

End.