рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

О.Ф. Власенко, И.В. Беляева СИМВОЛЫ И СТРОКИ В ЯЗЫКЕ TURBO PASCAL

О.Ф. Власенко, И.В. Беляева СИМВОЛЫ И СТРОКИ В ЯЗЫКЕ TURBO PASCAL - раздел Программирование,   Министерство Образования Российской Федерации  ...

 

Министерство образования Российской Федерации

 

Ульяновский государственный технический университет

 

О.Ф. Власенко, И.В. Беляева

СИМВОЛЫ И СТРОКИ В ЯЗЫКЕ TURBO PASCAL

Методические указания к выполнению лабораторных работ по программированию для студентов направлений 5528 “Информатика и вычислительная техника”,…   Ульяновск 2002

Власенко О.Ф., Беляева И.В.

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

ОГЛАВЛЕНИЕ

Введение.. 4

Символьный тип.. 5

Символьный тип char. 5

Функция Ord.. 7

Функция Chr. 7

Функция Succ. 8

Функция Pred.. 8

Функция UpCase. 8

Процедура Inc. 8

Процедура Dec. 9

Примеры использования стандартных процедур и функций обработки символов 9

строки.. 11

Встроенный тип STRING.. 11

Операции над строками string.. 14

Правила сравнения двух строк. 15

Стандартные процедуры и функции для работы со строками string.. 16

Процедура Delete. 16

Процедура Insert. 17

Процедура Str. 17

Процедура Val. 17

Функция Length.. 19

Функция Concat. 19

Функция Copy.. 20

Функция Pos. 20

Примеры использования стандартных процедур и функций обработки строк. 20

Множества.. 22

Операции над множествами.. 23

Пример использования множеств. 25

пример Обработки массива строк.. 28

Задача “Поиск символов в тексте”. 28

Задача “Поиск слов в строке и удаление символов”. 33

лабораторная работа “обработка строк”. 37

Цель работы.. 37

Общее задание. 37

Простые варианты.. 37

Средние варианты.. 38

Сложные варианты.. 40

Список литературы... 43

 

Введение

 

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

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

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

 

 

Символьный тип

 

Символьный тип char

Во всех современных языках программирования имеется стандартный (встроенный) символьный тип. В языке Паскаль он называется CHAR. Переменные и… Пример:  

Функция Ord

Function Ord(C: char): LongInt; Преобразует значение C в его порядковый номер (Order - порядок). Пример:

Функция Chr

 

Function Chr(B: Byte): Char;

Преобразует число B в символ и возвращает его.

Пример использования:

B := 33; { B – это число 33}

C := Chr(B); {C = #33 = ’!’ – C – это символ с кодом 33

– т.е. символ ‘Восклицательный знак’}

Write('Chr(', x, ')=''', c, ''''); {будет выведено

Chr(33)=’!’}

 

Функция Succ

 

Function Succ(C: Char): Char;

Возвращает следующий символ, то есть символ, код которого на 1 больше кода символа C.

Пример:

C:='5'; {C хранит символ ‘5’. Его код 53}

C1 := Succ(c); {C1 хранит символ ‘6’ . Его код 54}

C2 := Succ(‘F’); {C2 хранит символ ‘G’ }

 

Функция Pred

 

Function Pred(C: Char): Char;

Возвращает предшествующий символ.

Пример:

C:='5'; {C хранит символ ‘5’. Его код 53}

C1 := Pred(c); {C1 хранит символ ‘4’ . Его код 52}

C2 := Pred(‘F’); {C2 хранит символ ‘E’ }

 

 

Функция UpCase

function UpCase(Ch: Char): Char; Преобразует символ Ch в большие буквы. Действует только на латинские буквы. … Пример:

Процедура Inc

Procedure Inc(Ch: Char [; N: LongInt] ); Увеличивает значение символа Ch на N. Используется в двух формах: 1. Усеченная форма – параметр N отсутствует. В этом случае аргумент увеличивается на 1.

Процедура Dec

Procedure Dec(Ch: Char [; N: LongInt] ); Работает аналогично Inc, только в сторону уменьшения - уменьшает значение… 1. Усеченная форма – параметр N отсутствует. В этом случае аргумент уменьшается на 1.

Примеры использования стандартных процедур и функций обработки символов

 

Пример 1. Напишем программу, которая печатает таблицу кодов символов:

 

{Вывод на экран таблицы символов

Размер таблицы 16x16}

var

i: integer; {Номер строки таблицы}

j: integer; {Номер символа в строке - номер столбца}

begin

writeln;

{Формируем таблицу из 16 строк}

for i:=0 to 15 do

begin

{В каждой строке по 16 символов}

for j:=0 to 15 do

write(chr(i*16+j):2); {Код символа получается

как произведение номера строки на 16 плюс

номер символа в строке}

writeln; {строка закончена}

end;

end.

 

 

Пример 2. Создадим функцию, которая переводит в большие буквы как латинские, так и русские.

{Функция ToUpper.

Для символа Ch возвращает переведенный в верхний регистр

символ. Работает как с латинскими, так и с русскими буквами.}

function ToUpper(Ch: char): char;

begin

{Если исходный символ Ch является маленькой латинской буквой,

то чтобы она превратилась в большую латинскую букву, ее код

требуется уменьшить на 32(смотри ASCII таблицу кодов)}

if (Ch>='a') and (Ch<='z') then Dec(Ch, 32)

{Если исходный символ Ch является маленькой русской буквой

из интервала от ‘а’ до ‘п’, то чтобы она превратилась в большую

русскую букву, ее код требуется уменьшить на 32 (смотри ASCII

таблицу кодов)}

else if (Ch>='а') and (Ch<='п') then Dec(Ch, 32)

{Если исходный символ Ch является маленькой русской буквой

из интервала от ‘р’ до ‘я’, то чтобы она превратилась в большую

русскую букву, ее код требуется уменьшить на 80 (смотри ASCII

таблицу кодов)}

else if (Ch>='р') and (Ch<='я') then Dec(Ch, 80);

{Если исходный символ Ch не является маленькой буквой, то мы его

значение не изменяем}

 

{возвращаем из функции вычисленное значение}

ToUpper := Ch;

end;

 

По аналогии можно создать функцию ToLower для перевода больших русских и латинских букв в маленькие.

 

 

Строки

 

Встроенный тип STRING

Для хранения текста в оперативной памяти в языках программирования, как правило, используются специализированные типы данных. В Turbo Pascal 7.0… В Turbo Pascal можно использовать два вида строк - строки типа string и строки…  

Операции над строками string

 

В Turbo Pascal над строками типа String определены операция сравнения и операция склеивания. Операция склеивания обозначается знаком +. Кроме этого, для строк можно использовать оператор присваивания :=.

 

Продемонстрируем использование операций на примере:

 

var

a, b, c: string; {Три строки}

name: string; {Имя – тоже строка}

begin

a := 'Ваня'; {В A занесли строку ‘Ваня’}

b := 'Ира'; {В B занесли строку ‘Ира’}

c := a + b; {В C занесена строка ‘ВаняИра’}

c := a + ' + ' + b; {В C занесена строка ‘Ваня + Ира’}

 

readln(name); {Требуется ввести имя}

if name = 'пароль' {Если имя ‘пароль’}

then writeln('Свой!!!') {Выводится сообщение}

else

begin {Иначе}

writeln('Чужак!!!!!'); {Сообщение выводится }

Halt; {И на этом программа завершает свою работу}

end;

 

readln(name); {Снова вводится имя}

if name<>'вася' {Если ввели строку, не совпадающую

со строкой ‘вася’}

then writeln('Нет, ты не Вася...') {Сообщается об этом}

else writeln('Здравствуй, Вася!!!'); {Иначе –

приветствуется Вася}

 

if a<b {Сравниваются строки ‘Ваня’ и ‘Ира’}

{Поскольку строки сравниваются не по длине, а по содержимому,

то оказывается, что строка ‘Ваня’ меньше чем строка ‘Ира’}

then writeln('''',a,'''<''',b,'''') {Будет выведено:

'Ваня'<'Ира'}

else writeln('Неправда, что ''',a,'''<''',b,'''');

 

a := 'кремний'; {В A и B заносятся новые строки}

b := 'крем';

 

if a > b {Сравниваются A и B – здесь A больше B}

then writeln('''',a,'''>''',b,'''') {Поэтому будет

выведено ‘кремний’>’крем’}

else writeln('Неправда, что ''',a,'''>''',b,'''');

 

if a <= b {‘Кремний’ явно не меньше и не равен ’крем’}

then writeln('''',a,'''<=''',b,'''')

else writeln('Неправда, что ''', a, '''<=''', b, '''');

{Следовательно, будет выведено

'Неправда, что 'кремний'<='крем'}

 

if a >= b {Поскольку ‘кремний’ больше, чем ’крем’}

then writeln('''',a,'''>=''',b,'''') {Будет выведено

‘кремний’>=’крем’}

else writeln('Неправда, что ''', a, '''>=''', b, '''');

 

end.

 

Отдельного пояснения требуют операции сравнения строк.

 

Правила сравнения двух строк

При сравнении двух строк (назовем их A и B) последовательно сравниваются соответствующие символы двух строк – первый с первым (A[1] с B[1]), второй… Пример: ‘Ложка’=’Ложка’ (все символы совпадают)

Стандартные процедуры и функции для работы со строками string

В Turbo Pascal определены 4 процедуры и 4 функции для работы со строками string.   Процедуры:

Процедура Delete

Procedure Delete(var S: string; Index, Count: Integer); Удаляет из строки S подстроку, задаваемую параметрами Index и Count. Index – номер первого удаляемого символа.

Процедура Insert

 

Procedure Insert(Source: string; var S: string;

Index:Integer);

Вставляет подстроку Source в строку S, начиная с позиции Index.

 

Пример использования:

S := 'Жаркий климат';

insert('и влажный ', s, 8);

writeln(s); {Будет выведено ‘Жаркий и влажный климат’}

 

 

Процедура Str

Procedure Str(X[:Width[:Decimal]]; var S: string); Преобразовывает число X в последовательность символов (строку) S в…  

Процедура Val

Procedure Val(S; var V; var Code: Integer); Преобразовывает символьное представление числа S в целое или вещественное…  

Функция Length

 

function Length(S: String): Integer;

Возвращает текущую длину строки.

 

Пример:

S := ’Иван Иванович’;

D := Length(S); {В строке S содержится 13 символов,

поэтому D = 13}

 

 

Функция Concat

function Concat(s1 [, s2,..., sn]: String): String; Склеивает строки s1, s2 ... sn в одну и возвращает ее.  

Функция Copy

 

function Copy(S: String; Index: Integer; Count: Integer):

String;

Возвращает подстроку строки S. Index - первый символ подстроки,

Count - длина подстроки.

 

Пример:

S1 := ’Петров Вася’;

S2 := Copy(s3, 4, 3); {В строке S2 содержится ‘ров’ }

S3 := Copy(s3, 9, 2); {В строке S3 содержится ‘ас’ }

 

 

Функция Pos

 

function Pos(Substr: String; S: String): Byte;

Ищет в строке S подстроку SubStr. Возвращает индекс первого

элемента первой найденной подстроки. Если подстрока не найдена,

возвращает 0.

 

Пример:

S1 := ’Информатика и математика’;

K := Pos(‘мат’, s1); {K = 6 – первый раз подстрока ‘мат’

в строке s1 начинается с 6-ой позиции}

 

Примеры использования стандартных процедур и функций обработки строк

 

Задача 1: Вводится строка S и два слова - W и Z. Заменить в строке S слово W на слово Z.

Замечание: Считаем, что в строке S имеется ровно одно слово W.

 

var

s : string; {Строка}

w : string; {Заменяемое слово}

z : string; {Замена}

f : integer; {Позиция первого символа слова W}

l : integer; {Длина заменяемого слова W}

begin

{Ввод строки}

write(' s= ');

readln(s);

{Ввод заменяемого слова}

write(' w= ');

readln(w);

{Ввод замены}

write(' z= ');

readln(z);

 

{Поиск позиции первого символа слова W в строке S}

F := Pos(W, S);

{Вычисление длины слова W}

L := Length(W);

{Удаление из строки S слова W}

Delete(S, F, L);

{Вставка вместо удаленного слова W слова Z}

Insert(Z, S, F);

{Вывод строки после замены слова W на слово Z}

writeln(' s= ',S);

end.

 

Множества

Термин “множество” в Turbo Pascal используется аналогично его математическому пониманию. Множества в Turbo Pascal могут включать элементы только… Общий вид определения типа множества следующий: type

Операции над множествами

 

Для множеств определены следующие операции:

 

Обозначение операции в Тurbo Pascal Обозначение в математике Действия Тип операндов Тип результата
+ È Объединение Совместимые типы множеств Множество
- Разность Совместимые типы множеств Множество
* Ç Пересечение Совместимые типы множеств Множество
= = Равенство Совместимые типы множеств Логический
< > ¹ Неравенство Совместимые типы множеств Логический
> = É Является надмножеством Совместимые типы множеств Логический
< = Ì Является подмножеством Совместимые типы множеств Логический
In Î Принадлежность Левый операнд - любой порядковый тип. Правый операнд –совместимый левому операнду тип множества. Логический

 

 

Применение операций над множествами продемонстрируем на примере с множествами символов.

 

Var

a, b, c, d, e, f : Set of char; {Множества символов}

begin

a := ['A' .. 'D']; {Множество A содержит 4 элемента - ‘A’,’B’,’C’,’D’}

b := ['C', 'D', 'R', 'W']; {Множество B содержит 4 элемента -

‘C’,’D’,’R’,’W’}

c := ['C', 'D']; {Множество C содержит 2 элемента – ’C’,’D’}

 

d := a + b; {ОБЪЕДИНЕНИЕ: множество D содержит все элементы множества A и все элементы множества B. Все элементы содержатся только по одному разу, т.е. множество D содержит 6 элементов - ‘A’,’B’,‘C’,’D’,’R’,’W’}

 

e := a - b; { РАЗНОСТЬ: множество E содержит те элементы множества A, которых нет в множестве B. Т.е. в множество E скопированы все элементы множества A, за исключением тех, которые были и в A и в B. Множество E теперь содержит 2 элемента - ‘A’,’B’ }

 

f := a * b; {ПЕРЕСЕЧЕНИЕ: множество F содержит те элементы множества A, которые есть и в множестве B. Множество F теперь содержит 2 элемента - ‘C’,’D’ }

 

if a = b {РАВЕНСТВО: сравниваются множества A и B. Если оба они содержат одинаковые элементы, то результат True, в противном случае – False. В данном случае A не равен B, т.к. A=[‘A’..’D’], а B=['C','D','R','W'], т.е. A=B - False}

then writeln('A=B')

else writeln('A<>B'); {Будет выведена строка ‘A<>B’}

 

if c <> a * b {НЕРАВЕНСТВО: сравниваются множества A и B. Если они отличаются друг от друга хотя бы одним элементом, то результат True, в противном случае – False. В данном случае C=[‘C’,’D’], и A*B=['C','D'] - т.е. в данном случае C равен A*B, следовательно, c<>a*b - False}

then writeln('C<>A*B')

else writeln('C=A*B'); {Будет выведена строка ‘C=A*B’}

 

if a >= c {ЯВЛЯЕТСЯ НАДМНОЖЕСТВОМ: сравниваются множества A и C. Если в множестве A содержатся все элементы множества C (причем в множестве A, кроме элементов множества C, могут быть и любые другие элементы), то результат True, в противном случае – False. В данном случае A=[‘A’..’D’], а С=['C','D'], т.е. множество A содержит все элементы множества C, следовательно, a>=c - True}

then writeln('A>=C') {Будет выведена строка ‘A>=C’}

else writeln('not A>=C');

 

if a<=b {ЯВЛЯЕТСЯ ПОДМНОЖЕСТВОМ: сравниваются множества A и B. Если все элементы множества A содержатся в множестве B (причем в множестве B, кроме элементов множества A, могут быть и любые другие элементы), то результат True, в противном случае – False. В данном случае A=[‘A’..’D’], а B=['C','D',’R’,’W’], т.е. все элементы множества A не содержатся в множестве B, следовательно, a<=b - False}

then writeln('A<=B')

else writeln('not A<=B'); {Будет выведена строка ‘not A<=B’}

 

if 'A' in A {ПРИНАДЛЕЖНОСТЬ: проверяется, содержит ли множество A элемент ‘A’. Если содержит, то результат True, в противном случае – False. В данном случае A=[‘A’..’D’], следовательно, ‘A’ содержится в множестве A. Значит, ‘A’ in A - True}

then writeln('''A'' in A') {Будет выведена строка ‘ ‘A’ in A’}

else writeln('''A'' NOT in A')

end.

 

 

Пример использования множеств

 

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

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

Замечание: в записи шестнадцатеричных чисел могут быть использованы цифры от ‘0’ до ‘9’ и латинские буквы – либо большие (от ‘A’ до ‘F’), либо маленькие (от ‘a’ до ‘f’).

Программа:

 

Program digitsOfHex;

Type

SetChar = set of char; {Множество символов}

Var

S: string; {Вводимая строка}

I: integer; {Счетчик цикла}

 

HexSymb: SetChar; {Множество всех шестнадцатеричных цифр}

InputSymb: SetChar; {Множество всех введенных символов}

TrueSymb: SetChar; {Множество правильно введенных символов}

ErrSymb: SetChar; {Множество ошибочно введенных символов}

MissSymb: SetChar; {Множество забытых символов}

 

{Процедура вывода символов, содержащихся в множестве S, на экран.

S - множество, Message - строка, выводимая перед выводом множества}

procedure WriteSetChar(message: string; S: SetChar);

var

C: char; {Выводимый символ}

begin

Write(message); {Вывод сообщения}

{Проход по всем мыслимым символам}

For c := #0 to #255 do

If c in S {Если символ C присутствует в множестве S}

then write(c,' '); {То этот символ выводится на экран}

Writeln;

end;

 

Begin

{Инициализация множеств}

HexSymb := ['0'..'9','a'..'f','A'..'F'];{Все возможные

шестнадцатеричные цифры}

InputSymb := []; {Множество введенных символов вначале пустое}

 

{Ввод строки с цифрами}

Writeln;

Writeln('Введите в одну строку все символы,’);

Writeln('используемые для записи шестнадцатеричных’);

Write (’ чисел: ');

ReadLn(s);

 

{Формирование множества всех введенных символов}

For I := 1 to length(s) do

InputSymb := InputSymb + [s[i]]; {Проходим в цикле по

всем символам введенной строки, добавляя

каждый символ в множество InputSymb}

 

{Формирование множества правильно введенных символов}

TrueSymb := InputSymb * HexSymb; {Правильно введенные

символы - это те символы из введенных, которые есть в

множестве шестнадцатеричных цифр}

 

{Формирование множества неправильно введенных символов}

ErrSymb := InputSymb - HexSymb; {Неправильно введенные

символы - это те символы из введенных, которых

нет в множестве шестнадцатеричных цифр}

 

{Формирование множества забытых (пропущенных) символов}

MissSymb := HexSymb - TrueSymb; {Пропущенные символы -

это те символы из множества шестнадцатеричных цифр,

которых нет в множестве правильно введенных}

 

 

{Вывод результатов}

Writeln;

 

{Проверка, ввел ли пользователь хотя бы один правильный символ}

If TrueSymb <> []

Then {Если ввел, то выводим все их на экран}

WriteSetChar('Вы ввели следующие правильные символы :',

TrueSymb)

Else {Если не ввел ни одного правильного, выдаем сообщение}

Writeln('Вы не ввели ни одного правильного символа!');

 

{Проверка, ввел ли пользователь хотя бы один неправильный

символ}

If ErrSymb <> []

Then {Если ввел, то выводим все их на экран}

WriteSetChar('Вы ввели следующие неправильные символы:',

ErrSymb)

Else {Если не ввел ни одного неправильного, выдаем сообщение}

Writeln('Вы не ввели ни одного неправильного’,

’ символа!!!');

 

{Проверка, забыл ли пользователь ввести хотя бы один правильный

символ}

If MissSymb <> []

Then {Если забыл, то выводим все забытые на экран}

WriteSetChar('Вы забыли ввести следующие символы :',

MissSymb)

Else {Если не забыл, выдаем сообщение}

Writeln('Вы ввели все возможные шестнадцатеричные’,

’ цифры!!!');

 

End.

 

Попытайтесь решить эту задачу без использования множеств, и тогда вы почувствуете, насколько эффективны множества…

 

 

Пример Обработки массива строк

 

Задача “Поиск символов в тексте”

 

Рассмотрим обработку строк на примере следующей задачи:

С клавиатуры вводится n строк (n<=10). Каждая строка содержит не более 70 символов. Необходимо найти и вывести все гласные буквы (без повторений), которые встретились в этих строках.

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

В результате анализа задачи в ней были выделены следующие процедуры:

1. Ввод массива строк - ReadStrings.

2. Вывод массива строк - PrintStrings.

3. Определение множества символов в массиве строк - GetAllChars.

4. Вывод массива строк с подсветкой символов, входящих в указанное множество - PrintColorStrings.

5. Вывод множества символов - WriteSetChar.

6. Ожидание нажатия любой клавиши - WaitPressed.

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

 

Программа:

{

Вводится не более 10 строк.

Ищутся и выводятся на экран гласные буквы, находящиеся

во введенных строках.

}

 

uses crt; {В программе будут использоваться средства

консольного ввода-вывода, в том числе процедуры

textcolor и clrscr, и функции readkey}

 

Const

MaxLengthString = 70; {Максимальная длина строки}

MaxNumberStrings = 10; {Максимальное количество строк}

 

Type

TString = string[MaxLengthString]; {Строка, в которой может

храниться не более MaxLengthString символов}

SetChar = Set of char; {Множество символов}

 

ArrayTString = array [1..MaxNumberStrings] of TString;

{Массив строк}

 

 

{Процедура ReadString.

Ввод строк в массив str. N - количество реально введенных строк.}

procedure ReadStrings(var str: ArrayTString;

var N: Integer );

var

s : TString; {Строка для ввода}

begin

clrscr; {Очистка экрана}

 

{Вывод приглашения к вводу}

textcolor(LightGray); {Установка цвета для выводимого

на экран текста}

writeln;

writeln('Введите не более ', MaxNumberStrings,

' строк.');

writeln('Конец ввода - пустая строка:');

 

{Ввод строк}

n:=0; {Вначале введенных строк нет}

repeat

{Вывод номера вводимой строки}

textcolor(DarkGray); {Установка темно-серого цвета}

write(n+1,'> '); {Вывод номера - темно-серым цветом}

 

{Ввод строки}

textcolor(LightGray); {Установка серого цвета}

readln(s); {Ввод строки - серым цветом}

if s <> '' then {Если введена непустая строка}

begin

inc(n); {То вписываем ее в массив SS}

str[n] := s;

end;

until (n = MaxNumberStrings) or (s = ''); {Выход из цикла

ввода либо после ввода 10 строк,

либо после ввода пустой строки}

end;

 

{Процедура PrintStrings.

Выводятся на экран строки из массива str.

N - количество строк в массиве str.}

procedure PrintStrings(const str: ArrayTString;

N: Integer );

var

i: integer;

begin

clrscr; {Очистка экрана}

textcolor(LightBlue); {Цвет вывода - голубой}

writeln;

writeln('Вы ввели ', n, ' строк(у,и). Вот они:');

for i := 1 to n do

begin

{Номер строки выводится голубым цветом}

textcolor(LightBlue);

write(i:2, '> ');

{Сама строка выводится серым цветом}

textcolor(LightGray);

writeln( str[i] );

end;

end;

 

{Процедура GetAllChars.

Получаем все символы.

Заносит все символы, встретившиеся в массиве строк str,

в множество AllChars. N - количество строк в массиве str.}

procedure GetAllChars(const str: ArrayTString; N: Integer;

var AllChars: SetChar);

var

i, j : integer;

begin

AllChars := []; {Инициализация множества}

for i := 1 to n do {Для всех введенных строк}

for j := 1 to length( str[i] ) do {Для всех символов

i-ой строки}

AllChars := AllChars + [ str[i,j] ]; {Добавляем по

очереди все символы к множеству AllChars}

 

end;

 

 

{Процедура PrintColorStrings.

Выводятся на экран строки из массива str.

N - количество строк в массиве str.

При выводе строк ЦВЕТОМ помечаются те символы,

которые есть в множестве S. }

procedure PrintColorStrings(const str: ArrayTString;

N: Integer;

var S: SetChar );

var

i, j: integer;

begin

writeln;

textcolor(LightBlue); {Цвет - голубой}

writeln('Гласные буквы выделены цветом');

 

{Проход по всем строкам массива str}

for I := 1 to n do

begin

{Вывод номера строки голубым цветом}

textcolor(LightBlue);

write(i:2,'> ');

 

{Проход по всем символам i-ой строки}

for j := 1 to length(str[i]) do {Length(str[i]) - количество

символов в строке str[i]}

begin

if str[i,j] in S {Если j-ый символ i-ой строки

имеется в множестве S}

then textcolor(LightGreen) {Тогда он выводится

светло-зеленым }

else textcolor(DarkGray); {Иначе – темно-серым}

write(str[i,j]); {Выводится символ}

end;

 

writeln; {После вывода всех символов i-ой строки

переходим на следующую строку}

end; {Заканчивается цикл по строкам}

end;

 

{Процедура WriteSetChar.

Процедура выводит символы, содержащиеся в множестве S,

на экран.

S – множество.

Message - строка, выводимая перед выводом множества.

ColorMessage - цвет текста сообщения Message.

ColorSet - цвет символов множества S}.

procedure WriteSetChar( message: string; S: SetChar;

ColorMessage, ColorSet: Integer);

var

C: char; {Выводимый символ}

begin

{Вывод сообщения}

textcolor(ColorMessage); {Цвет текста сообщения}

Write(message);

{Вывод символов, хранящихся в множестве}

textcolor(ColorSet); {Цвет символов множества}

For c := #0 to #255 do

{Если символ есть в множестве, он выводится}

If c in S then write(c, ' ');

Writeln;

end;

 

{Процедура WaitPressed.

Выводит сообщение message на экран.

ColorMessage - цвет символов сообщения.

После вывода сообщения ждет нажатия любой клавиши. }

procedure WaitPressed( message: string;

ColorMessage: Integer);

begin

textcolor(ColorMessage); {Установить цвет текста}

write(message); {Вывод сообщения}

readkey; {Ожидание нажатия любой клавиши}

writeln;

end;

 

 

const

{Множество всех гласных букв}

AllGlasn : SetChar = ['а', 'я', 'у', 'ю', 'э', 'е', 'о',

'ё', 'и', 'ы',

'А', 'Я', 'У', 'Ю', 'Э', 'Е', 'О',

'Ё', 'И', 'Ы' ];

 

var

ArrayStr : ArrayTString; {Массив строк}

N : integer; {Количество введенных строк}

FoundChars : SetChar; {Все найденные в ArrayStr символы }

FoundGlasn : SetChar; {Все найденные в ArrayStr

ГЛАСНЫЕ символы }

 

 

begin {Начало тела программы}

 

{Ввод строк}

ReadStrings(ArrayStr, N );

 

{Вывод строк}

PrintStrings(ArrayStr, N );

 

{Получение всех символов, введенных в строки ArrayStr}

GetAllChars(ArrayStr, N, FoundChars);

 

{Получаем все гласные символы, находящиеся в строках ArrayStr }

FoundGlasn := FoundChars * AllGlasn;

 

{Печатаем введенные символы с выделением гласных букв}

PrintColorStrings(ArrayStr, N, FoundGlasn);

 

{Печатаем гласные буквы, встречающиеся в строках ArrayStr}

WriteSetChar('Во введенных строках присутствуют' +

' гласные буквы: ',

FoundGlasn, Red, LightRed);

 

{Ждем нажатия любой клавиши}

WaitPressed('Для завершения работы программы нажмите' +

' любую клавишу...', LightBlue);

 

end. {Конец программы}

 

 

Задача “Поиск слов в строке и удаление символов”

 

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

 

 

{

Пример обработки строки.

Удаляются все гласные буквы в словах, которые начинаются

с двух согласных букв

}

 

 

{=====================================================}

{Функция IsLetter.

Возвращает TRUE, если Ch является русской буквой.

Иначе возвращает False.}

function IsLetter(Ch: char): boolean;

begin

IsLetter := ch in ['А'..'Я','а'..'п','р'..'я','ё','Ё'];

end;

 

 

{=====================================================}

{Функция IsSoglasn.

Возвращает TRUE, если Ch является русской согласной буквой.

Иначе возвращает False.}

function IsSoglasn(ch:char):boolean;

begin

IsSoglasn := ch in ['б','в','г','д','ж','з','й','к','л',

'м','н','п','р','с','т','ф','х','ц',

'ч','ш','щ','ъ','ь',

'Б','В','Г','Д','Ж','З','Й','К','Л',

'М','Н','П','Р','С','Т','Ф','Х','Ц',

'Ч','Ш','Щ','Ъ','Ь'];

end;

 

 

{=====================================================}

{Функция IsGlasn.

Возвращает TRUE, если Ch является русской гласной буквой.

Иначе возвращает False.}

function IsGlasn(ch:char):boolean;

begin

IsGlasn := ch in

['а','е','ё','и','о','у','ы','э','ю','я',

'А','Е','Ё','И','О','У','Ы','Э','Ю','Я'];

end;

 

{=====================================================}

{Функция FindNextWord.

Ищет в строке S следующее слово, начиная с символа Start.

Если слово найдено, то возвращается True

и возвращается индекс первого символа слова (через BeginWord)

и его длина (через LengthWord).

Если слово не найдено, возвращается False.}

function FindNextWord( const S : String;

Start : Integer;

var BeginWord : Byte;

var LengthWord : Byte) : Boolean;

var

i : Integer; {Индекс может выйти за границы 255,

поэтому Byte использовать нельзя!}

Len : Byte; {Длина строки}

Begin

{Вычисляем длину строки}

Len := length(s);

{Ищем начало слова, начиная со стартового символа строки}

i := Start;

{В цикле продвигаем i вперед по строке до тех пор,

пока не встретится буква или пока не кончится строка }

while not isLetter( S[i] ) and (i <= Len ) do

inc( i );

{Сейчас i указывает на первый символ найденного слова}

BeginWord := i;

{Ищем конец слова}

{Для этого продвигаем i вперед до тех пор, пока не встретится

НЕ БУКВА или пока i не выйдет за пределы строки}

while isLetter(S[i]) and ( i <= Len ) do

inc( i );

 

{Сейчас i указывает на первый символ-разделитель, следующий

за словом (или i указывает на символ за пределами границ

строки).

Длину слова вычисляем как разность между индексами его

последнего и первого символов }

LengthWord := i - BeginWord;

 

{Если вычисленная длина слова больше 0, значит, слово в строке

найдено. Возвращаем True.

Иначе - слова в строке нет. Возвращаем False.}

if LengthWord > 0

then FindNextWord := true

else FindNextWord := false;

end;

 

{=====================================================}

{Функция StringWithoutGlasn.

Возвращает строку, созданную из строки

S путем удаления всех гласных букв.}

function StringWithoutGlasn(const s:string):string;

var

res : string; {Результат}

i : integer;

begin

res := ''; {Сначала результирующая строка пустая}

for i := 1 to length(s) do {Затем все символы}

if not IsGlasn(s[i]) then, {Которые не являются}

res := res + s[i]; {Гласными буквами,

добавляются к строке}

WordWithoutGlasn := res; {Получившаяся строка возвращается}

end;

 

 

{=====================================================}

{Функция DeleteGlasn.

В строке S во всех словах, начинающихся на две согласные буквы, удаляются гласные буквы.

Полученная строка возвращается.}

function DeleteGlasn(const s:String):String;

var

newstr : string; {Новая строка}

i : integer; {Счетчик}

beg : byte; {Индекс начала слова}

len : byte; {Длина слова}

w : string; {Выделенное слово}

begin

newstr := ''; {новая строка вначале пустая}

{В строке S ищем все слова по очереди}

I := 1;

while FindNextWord( S, i, beg, len) do {Ищем очередное

слово}

begin

{К новой строке прицепляем все разделители,

стоящие перед очередным словом}

newstr := newstr + Copy(S, i, beg-i);

{Найденное слово копируем в W}

w:=Copy(s,beg,len);

{Если первые две буквы слова являются согласными}

if IsSoglasn(w[1]) and IsSoglasn(w[2]) then

newstr := newstr + WordWithoutGlasn(w) {К строке

прицепляем слово без гласных букв}

else

newstr := newstr + w; {Иначе - прицепляем

неизмененное слово}

 

I := beg + len; {Поиск очередного слова начнем

с символа, следующего за концом этого слова}

end;

DeleteGlasn := newstr; {Возвращаем созданную новую строку}

end;

 

{Тело программы}

var

s : string; {трока}

begin

s := 'В словах удалить все гласные буквы';

s := DeleteGlasn(s);

writeln(s); {Будет выведено 'В слвх удалить вс глсн буквы'}

end.

 

 

лабораторная работа “обработка строк”

 

Цель работы

 

Изучить работу с символами и строками. Ознакомиться с использованием множеств.

 

Общее задание

 

Необходимо разработать программу, обеспечивающую обработку массива строк. Программа после запуска выводит на экран заставку (с описанием реализованных функций и ФИО автора) и просит ввести строки. После ввода строк производится их обработка. Результат обработки выводится на экран.

Вводимые строки содержат 0, 1, 2 или больше слов, разделенных любым количеством разделителей – пробелов и знаков препинания.

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

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

 

 

Простые варианты

 

 

Вариант A1

Все большие буквы заменить символом ‘#’.

 

Вариант A2

Все маленькие буквы заменить символом ‘#’.

 

Вариант A3

Все гласные буквы заменить символом ‘&’.

 

Вариант A4

Все согласные буквы заменить символом ‘&’.

 

Вариант A5

Все гласные большие буквы заменить символом ‘$’.

 

Вариант A6

Все гласные маленькие буквы заменить символом ‘@’.

 

Вариант A7

Все цифры заменить символом ‘X’.

 

Вариант A8

Все латинские буквы сделать большими.

 

Вариант A9

За исключением русских и латинских букв, все символы заменить символом ‘_’ (подчеркивание).

 

Вариант A10

Все русские буквы сделать большими.

 

Вариант A11

Все русские гласные буквы сделать большими.

 

Вариант A12

Все русские согласные буквы сделать большими.

 

Вариант A13

Все большие русские согласные буквы сделать маленькими.

 

Вариант A14

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

 

Вариант A15

Все большие буквы сделать маленькими.

 

Вариант A16

Все маленькие буквы сделать большими.

 

Вариант A17

Все большие буквы сделать маленькими, а все маленькие буквы сделать большими.

 

Вариант A18

Все гласные буквы, стоящие между согласными, сделать маленькими.

 

Вариант A19

Все согласные буквы, стоящие между гласными, сделать маленькими.

 

Вариант A20

Если подряд идут две или более согласных букв, то сделать их маленькими.

 

 

Средние варианты

 

Вариант B1

Сделать большими все буквы в тех словах, в которых согласных букв меньше гласных.

 

Вариант B2

Сделать маленькими все буквы в тех словах, в которых согласных букв больше гласных.

 

Вариант B3

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

 

Вариант B4

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

 

Вариант B5

Изменить регистр букв в словах, в которых есть твердый или мягкий знак.

 

Вариант B6

Сделать большими все буквы в тех словах, длина которых меньше половины длины самого длинного слова строки.

 

Вариант B7

Сделать маленькими первую и последнюю буквы в тех словах, длина которых меньше половины длины самого длинного слова строки.

 

Вариант B8

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

 

Вариант B9

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

 

Вариант B10

Заменить маленькие буквы большими в словах, содержащих две и более подряд идущих одинаковых букв.

 

Вариант B11

Заменить большие буквы маленькими в словах, содержащих две и более подряд идущих одинаковых букв.

 

Вариант B12

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

 

Вариант B13

Заменить регистр букв в каждом слове, содержащем две и более одинаковые гласные буквы.

 

Вариант B14

Сделать маленькими все буквы в тех словах, которые содержат две подряд идущие гласные или две подряд идущие согласные буквы.

 

Вариант B15

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

 

Вариант B16

В словах-палиндромах (например, "шабаш", "казак") первую и последнюю букву сделать большими.

 

Вариант B17

Сделать маленькими все буквы в тех словах, которые содержат более двух различных гласных букв.

 

Вариант B18

Сделать большими все согласные буквы в тех словах, которые содержат более двух различных гласных букв.

 

Вариант B19

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

 

Вариант B20

Сделать маленькими все буквы в тех словах, которые содержат не более трех разных букв (например, "зараза", "папа", "окорок", но не слова “нога”, “арбуз”).

 

 

Сложные варианты

 

Вариант C1

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

 

Вариант C2

Удалить из каждой четной строки слово, содержащее наибольшее количество разных согласных букв.

 

Вариант C3

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

 

Вариант C4

Удалить из каждой нечетной строки слово, содержащее наибольшее количество гласных букв.

 

Вариант C5

Удалить из всего текста одно слово, содержащее наибольшее количество разных согласных букв.

 

Вариант C6

Удалить из всего текста три слова, содержащих наибольшее количество разных согласных букв.

 

Вариант C7

Удалить из всего текста самое короткое слово.

 

Вариант C8

Вывести все гласные буквы, содержащиеся в слове наибольшей длины, и вывести число повторений каждой этой буквы. Это слово удалить.

 

Вариант C9

Подсчитать количество символов во всех словах массива, отличных от заглавных латинских букв. Слова, содержащие более четырех различных символов, удалить.

 

Вариант C10

Удалить в самом длинном слове массива все символы, отличные от заглавных латинских букв.

 

Вариант C11

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

 

Вариант C12

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

 

Вариант C13

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

 

Вариант C14

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

 

Вариант C15

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

 

Вариант C16

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

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

 

Вариант C17

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

 

Вариант C18

Вывести слова исходного текста в обратном порядке.

 

Вариант C19

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

 

Вариант C20

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

 

 

Список литературы

 

1. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. – М.: Бином Универсал, К.: ЮНИОР, 1997. – 496 с.

2. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. – М.: “ДИАЛОГ-МИФИ”, 1998. – 367с.

3. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. – М.: “Нолидж”, 1999. – 616 с.

4. Турбо Паскаль в примерах: Методические указания для студентов (в 2-х частях). Часть 1/ Составитель Афанасьева Т.В. – Ульяновск, 1997.

5. Семенов А.И. Сборник задач по языку Паскаль. – Абакан: Изд-во Хакасского государственного университета им. Н.Ф.Катанова, 2001. – 72 с.

6. Юркин А.Г. Задачник по программированию. – СПб.: Питер, 2002. – 192с.


 

Власенко Олег Федосович

Беляева Ирина Владимировна

 

 

СИМВОЛЫ И СТРОКИ В ЯЗЫКЕ TURBO PASCAL

методические указания к выполнению лабораторных работ по программированию для студентов направлений 5528 “Информатика и вычислительная техника”,…    

– Конец работы –

Используемые теги: Власенко, Беляева, символы, строки, языке, Turbo, Pascal0.101

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: О.Ф. Власенко, И.В. Беляева СИМВОЛЫ И СТРОКИ В ЯЗЫКЕ TURBO PASCAL

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Понятие алгоритма, его свойства. Описание алгоритмов с помощью блок схем на языке Turbo Pascal
Каким же образом компьютер решает сложнейшие задачи обработки информации Для решения этих задач программист должен составить подробное описание… В разных ситуациях в роли исполнителя может выступать электронное или… Составление алгоритмов и вопросы их существования являются предметом серьзных математических исследований. Свойства…

Понятие литературный язык. Место литературного языка среди других форм существования языка
Литературный язык это язык государственных и культурных учреждений школьного обучения радио и телевидения науки публицистики художественной... Современный литературный язык многофункционален Он используется в различных... Основные сферы использования литературного языка телевидение и кино наука и образование печать и радио...

Два объекта истории русского языка: живой язык диалектный и литературный язык
Новые общественные функции приобретает русский язык по мере сложения новой исторической общности советского народа он становится межнациональным... Современный период... Горшкова Хабургаев ИГРЯ...

Лекция 1. Интегрированная Среда и Состав языка Object Pascal. Состав языка
Содержание... Лекция Интегрированная Среда и Состав языка Object Pascal... Работа с окнами Редактирование в Object Pascal...

Алфавит языка Turbo Pascal
На сайте allrefs.net читайте: Алфавит языка Turbo Pascal. УДК...

Обучение начальных курсов методам программирования на языке Turbo Pascal
К идентификатору строкового типа и к ссылке на переменную строкового типа можно применять стандартные функции Low и High. В этом случае функция Low… Параметр-переменная, описанная с помощью идентификатора OpenString и ключевого… Открытые строковые параметры позволяют передавать одной и той же процедуре или функции строковые переменные…

Билет 1. Понятие старославянского языка. Судьба старославянской традиции в славянском мире. Значение ССЯ для русского литературного языка
Билет Склонение существительных с древнейшими основами на согласный и на Происхождение чередований в основах И Билет Склонение... Билет Происхождение ССЯ Деятельность Константина Кирилла и Мефодия И... Билет Грамматическая противопоставленность личных и неличных местоимений Склонение личных и возвратного...

Языки программирования: Кобол, С, Фортран, Basic, Pascal и др
Билет... Компьютер это универсальный прибор для работы с информацией... Компьютеры бывают настольные desktop портативные laptop и notebook и карманные palmtop...

ИНОСТРАННЫЙ ЯЗЫК: АНГЛИЙСКИЙ ЯЗЫК
высшего профессионального образования... Алтайская государственная академия культуры и искусств... Факультет информационных ресурсов и дизайна...

Русский Язык - Язык мира вольных людей
На сайте allrefs.net читайте: "Русский Язык - Язык мира вольных людей"

0.031
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам