Что будет выведено после выполнения вышеприведенного фрагмента обработчика события?




План

1. Строковые типы, объявление строки, сравнение строк.

2. Стандартные подпрограммы для работы со строками.

3. Примеры задач.

 

Строковые типы, объявление строки, сравнение строк

Для обработки текстов в Delphi используются следующие типы:

§ короткая строка ShortString или String[N], где N<=255;

§ длинная строка String;

§ широкая строка WideString;

§ нуль-терминальная строка Pchar.

Общим для этих типов является то, что каждая строка трактуется как одно­мерный массив символов, количество символов в котором может меняться в рабо­тающей программе: для String[N] длина строки меняется от 0 до N, для String и Pchar – от 0 до 2 Гбайт.

Примеры объявлений строковых типов:

var

s: String[200]; // Короткая строка длиной до 200 символов

smax: ShortString; // Короткая строка длиной до 255 символов

st: String; // Длинная строка

Здесь 200 – максимальная длина строки.

Две строки можно сравнивать между собой. Строки считаются равными, если они имеют одинаковые значения, и их текущие длины равны. Текущая длина – это фактическое количество символов в строке.

Примеры:

а) ′ABC′=′ABC′ – строки равны;

б) ′ABC′=′BAC′ – строки не равны (разные значения);

в) ′ABC′=′ABC ′ – строки не равны (разные текущие длины: в первой строке – 3 символа, во второй строке – 4 символа).

Различают строки-получатели и строки-источники. Пример:

t:=′20 лет спустя′; Здесь переменная t – получатель, строковая константа ′20 лет спустя′ – источник.

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

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

Если максимальная длина получателя (n) меньше текущей длины источника, значением получателя становятся первые n символов источника.

Стандартные подпрограммы для работы со строками

Concat (s1, s2[, …, sn]) – функция возвращает строку, представляющую собой сцепление строк-параметров s1, s2, …, sn.

Copy (st, p, n) – функция копирует из строки st с позиции p n символов.

Delete (st, p, n) – процедура удаляет из строки st с позиции p n символов.

Insert (s, st, p) – процедура вставляет подстроку s в строку st с позиции p.

Length (st) – функция возвращает текущую длину строки st.

Ord (st[0]) – функция возвращает текущую длину строки st, которая хранится в нулевой позиции.

Pos (s, st) – функция отыскивает в строке st первое вхождение подстроки s и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

Str (x[:width[:desimals]], st) – процедура преобразует число x вещественного или целого типа в строку символов st; параметры width и desimals, если они присутствуют, задают формат преобразования: width определяет общую ширину поля, выделенного под символьное представление числа x, а desimals – количество символов в дробной части (этот параметр имеет смысл, когда x – веще­ственное число).

Val (st, x, code) – процедура преобразует строку символов st во внутреннее представление целой или вещественной переменной x; пара­метр code содержит ноль, если преобразование про­шло успешно, и тогда в x помещается результат преобразования, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случае содержимое x не меняется; в строке st могут быть ведущие пробелы, ведомые пробелы недопустимы.

Выделяют:

§ процедуры (Delete, Insert, Str, Val);

§ функции (Concat, Copy, Length, Ord, Pos).

Результатом подпрограммы может быть:

§ строка (Concat, Copy, Delete, Insert, Str);

§ число (Length, Ord, Pos, Val).

Примеры:

а) Memo1.Lines.Add(copy(′Москва Смоленск Орел Тула′,17,4)); Будет выведено

Орел

б) s:=′понедельник вторник четверг′; insert(′среда ′,s,21); writeln(s); Будет выведено

понедельник вторник среда четверг

в) s:=′лиса ворона обезьяна′; delete(s,6,7); Memo1.Lines.Add(s); Будет выведено

лиса обезьяна

г) Memo1.Lines.Add(′L=′+IntToStr(length(′ромашка астра георгин′))); Будет выведено

L=21

д) s: = ′Терпение и труд все перетрут′; Memo1.Lines.Add(IntToStr(ord(s[0]))); Будет выведено

е) Memo1.Lines.Add(′P=′+IntToStr(pos(′нос′,′утконос носорог′))); Будет выведено

P=5

и) Memo1.Lines.Add(IntToStr(pos(′роса′,′росток простор′))); Будет выведено

Примеры задач

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

Обработчики событий FormActivate и bbRunClick:

Заполненная форма (результат работы приложения)

Задача 2. Сформировать строку из слов-перевертышей (слова разделены пробелом, после последнего слова – точка) и вывести ее.


 

Обработчики событий FormActivate и bbRunClick:

Заполненная форма (результат работы приложения)

Задачи для самостоятельного выполнения. Разработать обработ­чик события bbRunClick (BitBtnClick).

1. Дан текст из строчных русских букв. Подсчитать количество гласных букв в тексте.

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

Вопросы для контроля

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

2. Что является общим для строковых типов в Delphi?

3. Объявите длинную строку st в разделе описания переменных.

4. Объявите короткую строку s длиной до 100 символов в разделе описа­ния пере­менных.

5. Приведите пример строковой константы.

6. Перечислите имена процедур для обработки строк.

7. Перечислите имена функций для обработки строк.

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

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

10. Формат и назначение copy.

11. Формат и назначение delete.

12. Формат и назначение insert.

13. Формат и назначение length.

14. Формат и назначение ord.

15. Формат и назначение pos.

16. Memo1.Lines.Add(copy('Январь февраль март апрель',8,7));

Что будет выведено?

17. s:='Битва железных канцлеров'; delete(s,7,9); Memo1.Lines.Add(s);

Что будет выведено после выполнения вышеприведенного фрагмента обработчика события?

18. s:='брусника клюква черника'; insert('смородина ',s,10); Memo1.Lines.Add(s);

Что будет выведено после выполнения вышеприведенного фрагмента обработчика события?

19. s:='Достоевский Чехов Толстой'; Memo1.Lines.Add('L='+IntToStr(length(s)));

Что будет выведено?

20. Memo1.Lines.Add('P='+IntToStr(pos('фон','домофон магнитофон фон')));

Что будет выведено?

ТЕСТ

Задание. Выберите к каждому вопросу один правильный ответ.

Вопрос 1. Перечислите функции для обработки строк

1. length, ord, str, val

2. length, ord, concat, pos, copy

3. delete, insert, str, val

4. Верны ответы 2, 3

5. Нет правильного ответа

 

Вопрос 2. Эта процедура преобразует строку в число

1. val(st, x, code)

2. length(st)

3. copy(st, p, n)

4. concat(st1, st2)

5. str(x, st)

Примечание: st, st1, st2 – строки.

 

Вопрос 3.... предназначена для получения копии из строки st с позиции p n символов.

1. insert

2. copy

3. length

4. delete

5. concat

Вопрос 4. Результатом этих процедур и функций является строка

1. insert, delete

2. pos, val, length, ord

3. concat, copy, str

4. Верны ответы 1, 2

5. Верны ответы 1, 3

 

Вопрос 5. Объявление строковой переменной может быть выполнено так

1. var c:char;

2. var s:shortstring;

3. var st:string[100];

4. Верны ответы 1, 2

5. Верны ответы 2, 3

 

Вопрос 6. Перечислите процедуры для обработки строк

1. length, ord, str, val

2. length, ord, concat, pos, copy

3. delete, insert, str, val

4. Верны ответы 2, 3

5. Нет правильного ответа

Вопрос 7. Функция сцепления

1. val(st, x, code)

2. length(st)

3. copy(st, p, n)

4. concat(st1, st2)

5. str(x, st)

Примечание: st, st1, st2 – строки.

 

Вопрос 8.... предназначена для удаления из строки st с позиции p n символов.

1. insert

2. copy

3. length

4. delete

5. concat

 


Вопрос 9. Результатом этих процедур и функций является число

1. insert, delete

2. pos, val, length, ord

3. concat, copy, str

4. Верны ответы 1, 2

5. Верны ответы 1, 3

 

Вопрос 10. Вызов функция может стоять

1. В правой части оператора присваивания

2. В списке вывода, в условии (логическом выражении)

3. В операторе безусловного перехода

4. Верны ответы 1, 2

5. Верны ответы 2, 3

Вопрос 1. Общим для строковых типов в Delphi является то, что …

1. каждая строка трактуется как одномерный массив символов

2. каждая строка трактуется как двумерный массив символов

3. каждая строка трактуется как матрица символов

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

 

Вопрос 2. Объявление короткой строки s длиной до 100 символов выглядит так:

1. Var s: String[100];

2. Var s: ShortString[100];

3. Var s: PChar;

4. Var s: WideString;

 

Вопрос 3. Объявление длинной строки st в разделе описания переменных выглядит так:

1. Var st: String;

2. Var st: String[200];

3. Var st: WideString;

4. Var st: ShortString;

 

Вопрос 4. Memo1.Lines.Add(′P=′+IntToStr(pos(′ром′,′аромат ромашка ром′))); В Memo1 будет выведено

1. P=2

2. P=ром

3. P=16

4. P=8

 

Вопрос 5. s:=′гвоздика мак тюльпан′; insert(′гладиолус ′,s,14); Memo1.Lines.Add(s); В Memo1 будет выведено

1. гвоздика мак гладиолус тюльпан

2. гвоздика гладиолус мак тюльпан

3. гвоздика гладиолус тюльпан

4. гладиолус мак тюльпан

 

Вопрос 6. s:=′Днепр Дунай Рейн Висла′; delete(s,13,5); Memo1.Lines.Add(s); В Memo1 будет выведено

1. Днепр Дунай Висла

2. Днепр Дунай Рейн

3. Днепр Рейн Висла

4. Дунай Рейн Висла

 

Вопрос 7. Memo1.Lines.Add(copy(′Варшава Прага Будапешт′,9,5)); В Memo1 будет выведено

1. Прага

2. Варшава

3. Будапешт

4. Варшава Будапешт

 

Вопрос 8. s:=′Лазурит изумруд рубин аметист′; Memo1.Lines.Add(′L=′+IntToStr(length(s))); В Memo1 будет выведено ….

1. L=29

2. L=26

3. изумруд рубин

4. L=аметист

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

1. Культин Н. Б. Основы программирования в Delphi 7. – СПб.: БХВ-Петербург. 2009.

2. Немцова Т. И., Голова С. Ю., Абрамова И. В. Программирование на языке высокого уровня. Программирование на языке Object Pascal: Учебное пособие. – М.: Издательский Дом "ФОРУМ"; М.: ООО "Научно-издательский центр ИНФРА-М", 2013.

 



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-11 Нарушение авторских прав и Нарушение персональных данных


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