Лабораторная работа №7. Программирование задач обработки символьных и строковых данных. (2 часа)




Цель работы: изучить базовые операции работы со строками и файлами

 

Контрольные вопросы:

1. Является ли тип string структурированным типом данных?

2. Какое возможное максимальное количество символов может содержать строка?

3. Как при описании строкового типа указывается длина строки?

4. Если длина строки не указана при объявления переменных, то чему она равна по умолчанию?

5. Как происходить сравнение строк?

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

 

Задачи:

1. Строка содержит только цифры. Удалить все впереди стоящие нули.

2. Написать программу, которая запрашивает имя пользователя и здоровается с ним.

3. Написать программу, которая выводит на экран первую часть таблицы кодировки символов (символы имеющие коды от 0 до 127). Таблица должна состоять из восьми колонок и шестнадцати строк. В первой колонке должны быть символы, имеющие код от 0 до 15, во второй – от 16 до 31 и т.д.

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

5. Даны два различных слова, в каждом из которых от 1 до 8 строчных латинских букв и за каждым из которых – пробел. Напечатать эти слова в алфавитном порядке.

6. В заданном тексте удалить часть текста, заключенную в скобки.

7. Напечатать самое длинное слово из заданного текста.

8. Найти сколько раз в тексте встречается заданное слово.

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

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

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

12. Дан текст. Если первый символ в тексте не является малой латинской буквой, то оставить без изменения. Если же это малая латинская буква, то заменить символом «*».

13. В заданном тексте везде заменить слово А1 на слово А2.

14. Задан текст длиной 255 символов. Найти сколько раз в тексте встречаются различные буквы русского алфавита.

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

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

17. Разбить исходной текст на строки длиной не более 15 символов. Перенос на новую строку осуществлять на месте пробела (слова не переносить).

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

19. Задан текст длиной не более 255 символов. Определить сколько раз в тексте встречаются запятая и точка.

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

 

Литературы:

Основная литература:

1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.

3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.

4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.

6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.

7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.

Дополнительная литература:

1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.

2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.

3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.

4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.

5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.

6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.

 

Методические указания:

Для хранения строк (то есть последовательностей из символов) в Турбо-Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами:

1. var s: string; (максимальная длина строки — 255 символов),

2. var s: string[n]; (максимальная длина — n символов, n — константа или конкретное число).

Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами.

Приведём простейший пример со строками: программа спрашивает имя у пользователя, а затем приветствует его:

program Hello;

var s: string;

begin

write('Как Вас зовут: ');

readln(s);

write('Привет, ',s,'!');

readln;

end.

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

Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки.

Сравнение строк. Строки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны — то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: 'ананас'<'кокос', 'свинья'>'свинина', ''<'A', 'hell'<'hello'.

Склеивание (конкатенация) строк. К строкам можно применять операцию «+», при этом результатом будет строка, состоящая из последовательно записанных «слагаемых». Пример: после действия s:= 'abc'+'def'+'ghi'; переменная s будет содержать ‘abcdefghi’.

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

Наиболее часто употребляется функция:

length(s: string): integer;

После двоеточия записан тип значения, возвращаемого функцией, в нашем случае — целое число. Эта функция возвращает длину строки s.

Другие процедуры и функции приведены в таблице:

 

Процедура или функция Назначение Пример
функция Copy(s:string; start: integer;len: integer): string Возвращает вырезку из строковой переменной s, начиная с символа с номером start, длина которой len s:=’Бестолковый’; s1:=Copy(s,4,4); {в s1 станет ‘толк’}
функция Pos(s1:string;s:string):byte Ищет подстроку s1 в строке s. Если находит, то возвращает номер символа, с которого начинается первое вхождение s1 в s; если s1 не входит в s, то функция возвращает 0 n:=pos(‘министр’, ‘администратор’); {=3} n:=pos(‘abc’, ‘stuvwxyz’); {=0}
процедура Insert(s1:string; s:string; start: integer) Вставляет строку s1 в строковую переменную s начиная с символа с номером start. S:=‘кот’; insert(‘мпо’,s,3); {в s станет ‘компот’}
процедура Delete(s:string;start: integer; len:integer) Удаляет из строковой переменной s фрагмент, начинающийся с символа с номером start и длиной len s:= ‘треугольник’; delete(s,4,7); {в s останется ‘трек’}

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

Program pr1;

var ST: string [80]; {строка}

begin

writeln (‘удаление начальных пробелов строки’);

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

readln (ST);

while(pos (‘ ‘, ST)=1) and (length (ST)>0) do

delete (ST, 1, 1);

write(‘строка без начальных пробелов:’, ST);

readln;

end.

слово CONSTRUCTOR. В момент обращения к конструктору в специальное поле объекта заносится адрес нужной ТВМ, в результате чего все виртуальные методы (в том числе и унаследованные от родителей!) получают доступ к нужным полям.

Конструктор может не обращаться к виртуальному методу и даже вообще быть пустым, т.е. не иметь никаких исполняемых операторов (как в нашем примере), тем не менее, объект будет инициализирован правильно. Дело в том, что заголовок CONSTRUCTOR предписывает компилятору создать специальный набор машинных инструкций, который инициализирует ТВМ и исполняется в момент обращения к конструктору до выполнения его (конструктора) содержательной части. В объекте может быть сколько угодно конструкторов, но ни один из них не может быть виртуальным.

 

Решение задачи:

 

 



Поделиться:




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

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


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