Программирование на языке Паскаль. Символы и символьные строки презентация

Содержание

Строковый тип данных определяет совокупность символов произвольной длины. Для определения строкового типа используется зарезервированное слово String с указанием максимальной длины строки.

Слайд 1Программирование на языке Паскаль
Символы и
символьные строки


Слайд 2Строковый тип данных определяет совокупность символов произвольной длины. Для определения строкового типа

используется зарезервированное слово String с указанием максимальной длины строки.

Слайд 3Описание строк
В разделе var строки описываются следующим образом:
var : string[]
Максимальная длина строки - 255 символов. Нумеруются ее

компоненты начиная с 0, но этот нулевой байт хранит длину строки.
Если <длина> не указана, то считается, что в строке 255 символов. Поэтому для экономии памяти следует по возможности точно указывать длину используемых строк.


Слайд 4Примеры описаний:

var s1: string[10]; (*строка длиной 10 символов*)
s2:

string; (*строка длиной 255 символов*)

Необходимо отметить, что один символ и строка длиной в один символ
var c: char;
s: string[1];
совершенно не эквивалентны друг другу. Вне зависимости от своей реальной длины, строка относится к конструируемым структурированным типам данных, а не к базовым порядковым


Слайд 5Символ-константа и строка-константа
Неименованные константы
В тексте программы на языке Pascal последовательность любых символов,

заключенная в апострофы, воспринимается как символ или строка. Например:
c:='z'; {c: char} s:='abc'; {s: string}
Константе автоматически присваивается "минимальный" тип данных, достаточный для ее представления:
 char или string[k]. Поэтому попытка написать
c:='zzz'; {c: char}
вызовет ошибку уже на этапе компиляции.


Слайд 6Пустая строка задается двумя последовательными апострофами:
st:= '';
Если же необходимо сделать так, чтобы среди символов строки содержался и

сам апостроф, его нужно удвоить:
s:='Don''t worry about the apostrophe!';
Если теперь вывести на экран эту строку, то получится следующее:
Don't worry about the apostrophe!


Слайд 7Нетипизированные константы
Все правила задания символов и строк как неименованных констант остаются

в силе и при задании именованных нетипизированных констант в специальном разделе const. Например:
const c3 = ''''; {это один символ - апостроф!}
s3 = 'This is a string';


Слайд 8Типизированные константы
Типизированная константа, которая будет иметь тип char или string, задается в разделе const следующим образом:

const

c4: char = ''''; {это один символ - апостроф!}
s4: string[20] = 'This is a string';


Слайд 9Программа «Строка 1»


Слайд 10Действия с символами
Операции
Результатом унарной операции
#
является символ, номер которого в таблице ASCII соответствует заданному

числу. Например,
#100 = 'd‘
#39 = '''' {апостроф}
#232 = 'ш’
#1000 = 'ш' {потому что (1000 mod 256)= 232}
Кроме того, к символьным переменным, как и к значениям всех порядковых типов данных, применимы операции сравнения <, <>, >, =, результат которых также опирается на номера символов из таблицы ASCII.


Слайд 11Стандартные функции
Функция chr(k:byte):char "превращает"; номер символа в символ. Действие этой функции аналогично действию операции #. Например:
c:= chr(48);

{c: char} {c = '0'}
Обратной к функции chr() является функция ord(). Таким образом, для любого числа k и для любого символа с:
ord(chr(k)) = k и chr(ord(c)) = c


Слайд 12Стандартные процедуры и функции  pred(), succ(), inc() и dec(), определенные для значений любого порядкового

типа, применимы также и к символам (значениям порядкового типа данных char ). Например:
pred('[') = 'Z’
succ('z') = '{‘
inc('a') = 'b’
inc('c',2) = 'e’
dec('z') = 'y’
dec(#0,4) = '№' {#252}


Слайд 13Чем плох массив символов?
var B: array[1..N] of char;
Это массив символов:
каждый символ

– отдельный объект;
массив имеет длину N, которая задана при объявлении

Что нужно:
обрабатывать последовательность символов как единое целое
строка должна иметь переменную длину


Слайд 14Символьные строки
длина строки
рабочая часть
s[1]
s[2]
s[3]
s[4]
var s: string;
var s: string[20];
Длина строки:
n := length

( s );

var n: integer;



Слайд 15Строки можно рассматривать как одномерный массив символов, но в отличии от

массива длина строк может меняться. Элемент строки можно извлечь так же, как элемент массива.

Слайд 16Программа «Строка 2»


Слайд 17Символьные строки
Задача: ввести строку с клавиатуры и заменить все буквы "а"

на буквы "б".

program qq;
var s: string;
i: integer;
begin
writeln('Введите строку');
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.

readln(s);

writeln(s);

Length(s)

ввод строки

длина строки

вывод строки


Слайд 18Операции над строками
1. Сцепление строк (конкатенация).
(программа «Строка 3»)
2. Сравнение строк

( <, <=, >, >=, =, <> )
Сравнение строк происходит посимвольно. Строки равны, если имеют одинаковую длину и посимвольно эквивалентны.
(программа «Строка 4»)

Слайд 19
Задания
"4": Ввести символьную строку и заменить все буквы "а" на буквы

"б" и наоборот, как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббаассББААСС
"5": Ввести символьную строку и проверить, является ли она палиндромом (палиндром читается одинаково в обоих направлениях).
Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не палиндром. Палиндром.

Слайд 20Функции и процедуры для работы со строками
1. Функция concat(s1,_,sN:string):string  осуществляет слияние ( конкатенацию )

всех перечисленных строк или символов в указанном порядке. Если длина итоговой строки больше 255-ти символов, то произойдет отсечение "хвоста". Кроме того, даже если результат конкатенациине был усечен, но программа пытается сохранить его в переменную заведомо меньшей длины, то усечение все равно состоится:
concat('abc','3de',' ','X','yz') = 'abc3de Xyz'


Слайд 21Функции и процедуры для работы со строками
2. Функция copy(s:string;i,k:byte):string
вычленяет из строки s подстроку длиной k символов, начиная

с i -го. Если i больше длины строки, то результатом будет пустая строка. Если же k больше, чем длина оставшейся части строки, то результатом будет только ее "хвост":
copy('abc3de Xyz',2,4) = 'bc3d'
copy('abc3de Xyz',12,4) = ''
copy('abc3de Xyz',8,14) = 'Xyz'


Слайд 22Функции и процедуры для работы со строками
3. Процедура delete(s:string;i,k:byte) удаляет из строки s подстроку длиной k символов, начиная

с i -го. Если i больше длины строки, то ничего удалено не будет. Если же k больше, чем длина оставшейся части строки, то удален будет только ее "хвост":
{s = 'abc3de Xyz'} {s = 'abc3de Xyz'}
delete(s,2,3); delete(s,8,13);
{s = 'ade Xyz'} {s = 'abc3de '}



Слайд 23Функции и процедуры для работы со строками
4. Процедура insert(ss,s:string;i:byte) вставляет подстроку ss в строку s, начиная с i -го символа.

Если i выходит за конец строки, то подстрока ss припишется в конец строки s (если результат длиннее, чем допускается для строки s, произойдет его усечение):
{s = 'abc3de Xyz'} {s = 'abc3de'}
insert('xyz',s,2); insert('xyz',s,12);
{s = 'axyzbc3de Xyz'} {s = 'abc3dexyz'}


Слайд 24Функции и процедуры для работы со строками
5. Функция length(s:string):byte возвращает длину строки s:
length('abc3de Xyz') =

10

6. Функция pos(ss,s:string):byte определяет позицию, с которой начинается первое (считая слева направо) вхождение подстроки ss в строку s. Если ss не встречается в s ни разу, функция вернет 0:
pos('X', 'abc3de Xyz') = 8


Слайд 25Функции и процедуры для работы со строками
7. Процедура str(x[:w[:d]],s:string) превращает десятичное число x (можно указать,

что в этом числе w цифр, из них d дробных) в строку s. Если число короче указанных величин, то спереди и/или сзади оно будет дополнено пробелами:
str(156.4:7:2,s); {s = ' 156.4 '}

8. Процедура val(s:string;i:<арифметический_тип>;err:byte)
 превращает строку s в десятичное число i (в случае ошибки в переменную err будет записан номер первого недопустимого символа ):
{s = '15.47'} val(s,x,err); {x = 15.47}


Слайд 26Операции со строками
Объединение: добавить одну строку в конец другой.
Запись нового значения:
var

s, s1, s2: string;

s := 'Вася';

s1 := 'Привет,';
s2 := 'Вася';
s := s1 + ', ' + s2 + '!';

'Привет, Вася!'

Подстрока: выделить часть строки в другую строку.

s := '123456789';

s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );

'345678'

'456'

с 3-его символа

6 штук


Слайд 27Удаление и вставка
Удаление части строки:
Вставка в строку:
s := '123456789';
Delete ( s,

3, 6 );

с 3-его символа

6 штук

строка
меняется!

'123456789'

'129'

s := '123456789';
Insert ( 'ABC', s, 3 );
Insert ( 'Q', s, 5 );

куда вставляем

что вставляем

начиная с 3-его символа

'12ABC3456789'

'12ABQC3456789'


Слайд 28Поиск в строке
Поиск в строке:
s := 'Здесь был Вася.';
n := Pos

( 'е', s );
if n > 0 then
writeln('Буква е – это s[', n, ']')
else writeln('Не нашли');
n := Pos ( 'Вася', s );
s1 := Copy ( s, n, 4 );

var n: integer;

s[3]

3

n = 11

Особенности:
функция возвращает номер символа, с которого начинается образец в строке
если слова нет, возвращается 0
поиск с начала (находится первое слово)


Слайд 29Примеры
s := 'Вася Петя Митя';
n := Pos ( 'Петя', s );
Delete

( s, n, 4 );
Insert ( 'Лена', s, n );

'Вася Лена Митя'

s := 'Вася Петя Митя';
n := length ( s );
s1 := Copy ( s, 1, 4 );
s2 := Copy ( s, 11, 4 );
s3 := Copy ( s, 6, 4 );
s := s3 + s1 + s2;
n := length ( s );

'Вася Митя'

14

'Вася'

'Митя'

'Петя'

'ПетяВасяМитя'

12

6


Слайд 30Пример решения задачи
Задача: Ввести имя, отчество и фамилию. Преобразовать их к

формату "фамилия-инициалы".
Пример:
Введите имя, фамилию и отчество:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.

Алгоритм:
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
"сцепить" фамилию, первые буквы имени и фамилии, точки, пробелы…


Слайд 31Программа
program qq;
var s, name, otch: string;
n: integer;
begin
writeln('Введите

имя, отчество и фамилию');
readln(s);
n := Pos(' ', s);
name := Copy(s, 1, n-1); { вырезать имя }
Delete(s, 1, n);
n := Pos(' ', s);
otch := Copy(s, 1, n-1); { вырезать отчество }
Delete(s, 1, n); { осталась фамилия }
s := s + ' ' + name[1] + '.' + otch[1] + '.';
writeln(s);
end.

Слайд 32
Задания
"4": Ввести имя файла (возможно, без расширения) и изменить его расширение

на ".exe".
Пример:
Введите имя файла: Введите имя файла:
qqq qqq.com
Результат: Результат:
qqq.exe qqq.exe
"5": Ввести путь к файлу и "разобрать" его, выводя каждую вложенную папку с новой строки
Пример:
Введите путь к файлу:
C:\Мои документы\10-Б\Вася\qq.exe
Результат:
C:
Мои документы
10-Б
Вася
qq.exe

Слайд 33Программирование на языке Паскаль
Рекурсивный перебор


Слайд 34Рекурсивный перебор
Задача: Алфавит языка племени "тумба-юмба" состоит из букв Ы, Ц,

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

1

K

в каждой ячейке может быть любая из 4-х букв

4 варианта

4 варианта

4 варианта

4 варианта

Количество вариантов:


Слайд 35Рекурсивный перебор
1
K
Рекурсия: Решения задачи для слов из К букв сводится к

4-м задачам для слов из K-1 букв.

1

K

1

K

1

K


перебрать все варианты


перебрать все варианты


перебрать все варианты


перебрать все варианты


Слайд 36Процедура
procedure Rec(p: integer);
begin
if p > K then begin
writeln(s);

count := count+1;
end
else begin
s[p]:='Ы'; Rec ( p+1 );
s[p]:='Ц'; Rec ( p+1 );
s[p]:='Щ'; Rec ( p+1 );
s[p]:='О'; Rec ( p+1 );
end;
end;

1

K

p

Глобальные переменные:
var s: string;
count, K: integer;

s



p+1

рекурсивные вызовы

окончание рекурсии


Слайд 37Процедура
procedure Rec(p: integer);
const letters = 'ЫЦЩО';
var i: integer;

begin
if p > k then begin
writeln(s);
count := count+1;
end
else begin
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
end;
end;

const letters = 'ЫЦЩО';

for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;

все буквы

цикл по всем буквам

локальная переменная


Слайд 38Программа
program qq;
var s: string;
K, i, count: integer;
begin
writeln('Введите длину

слов:');
read ( K );
s := '';
for i:=1 to K do s := s + ' ';
count := 0;
Rec ( 1 );
writeln('Всего ', count, ' слов');
end.

procedure Rec(p: integer);
...
end;

процедура

s := '';
for i:=1 to K do s := s + ' ';

строка из K пробелов

глобальные переменные


Слайд 39
Задания
Алфавит языка племени "тумба-юмба" состоит из букв Ы, Ц, Щ и

О. Число K вводится с клавиатуры.

"4": Вывести на экран все слова из К букв, в которых буква Ы встречается более 1 раза, и подсчитать их количество.
"5": Вывести на экран все слова из К букв, в которых есть одинаковые буквы, стоящие рядом (например, ЫЩЩО), и подсчитать их количество.


Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика