Без темы
<<  СЕМЬЯ и её Функции Символьные и строковые переменные в Turbo Pascal  >>
Символьные и строковые переменные
Символьные и строковые переменные
Познакомимся с типом данных, который относится к числу
Познакомимся с типом данных, который относится к числу
Символьные и строковые переменные
Символьные и строковые переменные
Стандартные функции, определенные над данными символьного типа: Chr(x)
Стандартные функции, определенные над данными символьного типа: Chr(x)
Строковая переменная описывается в разделе описания переменных: Var
Строковая переменная описывается в разделе описания переменных: Var
Операции над строками
Операции над строками
Пример 1
Пример 1
 Строковые функции и процедуры
 Строковые функции и процедуры
Функция Copy( S , Poz , N ) выделяет из строки S подстроку длиной N
Функция Copy( S , Poz , N ) выделяет из строки S подстроку длиной N
Функция Concat( S1 , S 2 , … , SN ) выполняет сцепление строк S1 , S 2
Функция Concat( S1 , S 2 , … , SN ) выполняет сцепление строк S1 , S 2
Функция Pos( S1 , S 2 ) обнаруживает первое появление в строке S 2
Функция Pos( S1 , S 2 ) обнаруживает первое появление в строке S 2
Процедура Delete( S , Poz , N) - удаление N символов из строки S ,
Процедура Delete( S , Poz , N) - удаление N символов из строки S ,
Процедура Insert( S1 , S 2, Poz ) - вставка строки S1 в строку S 2 ,
Процедура Insert( S1 , S 2, Poz ) - вставка строки S1 в строку S 2 ,
Задача 1. Из данной символьной строки s1 выбрать все цифры и
Задача 1. Из данной символьной строки s1 выбрать все цифры и
Символьные и строковые переменные
Символьные и строковые переменные
Задача 3. Составить программу, которая удаляет в начале строки пробелы
Задача 3. Составить программу, которая удаляет в начале строки пробелы
Практическое задание
Практическое задание
 Задача 3. Составить программу, заменяющую во введенной с клавиатуры
 Задача 3. Составить программу, заменяющую во введенной с клавиатуры
Практикум по решению задач
Практикум по решению задач
Проверка задач
Проверка задач
2 задача: 1 способ: program obr_word; var s: string[30]; i: byte;
2 задача: 1 способ: program obr_word; var s: string[30]; i: byte;
Проверить является ли слово палиндромом Задача: Дано произвольное
Проверить является ли слово палиндромом Задача: Дано произвольное
Практикум по решению задач
Практикум по решению задач
Проверка
Проверка
Задача: Определить, как часто встречается определенный символ в строке
Задача: Определить, как часто встречается определенный символ в строке
Программа на языке Паскаль: var s: string; c: char; n,len,i: byte;
Программа на языке Паскаль: var s: string; c: char; n,len,i: byte;
Определение наименьшего слова в строке Определить наименьшую длину
Определение наименьшего слова в строке Определить наименьшую длину
Процедуры преобразования типов в Паскале
Процедуры преобразования типов в Паскале
Тип X
Тип X
Задачи из ЕГЭ
Задачи из ЕГЭ
Решение: 1) по условию, единственная информация, которая нам нужна в
Решение: 1) по условию, единственная информация, которая нам нужна в
4) основной цикл обработки вводимых строк можно записать на псевдокоде
4) основной цикл обработки вводимых строк можно записать на псевдокоде
9) поскольку нас интересует часть после второго пробела, эти две
9) поскольку нас интересует часть после второго пробела, эти две
11) заметим, что можно избежать дублирования двух строк в теле цикла,
11) заметим, что можно избежать дублирования двух строк в теле цикла,
Program school; const LIM = 99; var c:array[1
Program school; const LIM = 99; var c:array[1

Презентация на тему: «Символьные и строковые переменные». Автор: Din. Файл: «Символьные и строковые переменные.ppt». Размер zip-архива: 2163 КБ.

Символьные и строковые переменные

содержание презентации «Символьные и строковые переменные.ppt»
СлайдТекст
1 Символьные и строковые переменные

Символьные и строковые переменные

2 Познакомимся с типом данных, который относится к числу

Познакомимся с типом данных, который относится к числу

структурированных. Это строковый тип данных (строка). Строка — это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Порядковый номер символа – это его десятичный код, который лежит в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в Pascal является то, что с ней можно работать как с массивом символов, с одной стороны, и как с единым объектом, — с другой. За счет этого обработка строк достаточно гибка и удобна.

Символьная переменная описывается в разделе описания переменных: Var <идентификатор> : char; Пример: Var Sh : char; Letter, Symbol: char;

3 Символьные и строковые переменные
4 Стандартные функции, определенные над данными символьного типа: Chr(x)

Стандартные функции, определенные над данными символьного типа: Chr(x)

- преобразует число х в символ по коду ASCII и возвращает значение символа. Пример: Chr(193)=’Б’ Ord(ch) - преобразует символ ch в его код и возвращает значение кода. Пример: Ord(‘:’)=58 Ord(‘A’)=192 Функция UpCase(ch) - преобразует строчную латинскую букву в прописную Пример: UpCase(‘d’)=’D’

5 Строковая переменная описывается в разделе описания переменных: Var

Строковая переменная описывается в разделе описания переменных: Var

<идентификатор> : string[<максимальная длина строки.>]; Например: Var Name: string[20]; В описании строки можно не указывать длину. Например: Var slovо : string; В таком случае подразумевается, что она равна максимальной величине - 255. Элементы строки идентифицируются именем строки с индексом, заключенным в квадратные скобки. Например: n[5], S[1], slovo[k+1]. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания. Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.

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

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

Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные. Пример: ‘Мама’+’ мыла’ +’ раму’=’ Мама мыла раму’. Длина результирующей строки не должна превышать 255. Операции отношения: =, <, >, <=, >=, <>. Позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.

7 Пример 1

Пример 1

‘True1’<’True2’

True

‘Mother’>’MOTHER’

True

‘Мама’<>’ Мама’

True

‘Cat’=’Cat’

True

Выражение

Результат

8  Строковые функции и процедуры

 Строковые функции и процедуры

Строковые функции и процедуры

Функция Length( S ) определяет текущую длину строки S . Результат – значение целого типа. Пример 2

Значение S

Выражение

Результат

‘test-5’

Length(S)

6

‘(A+B)*C’

Length(S)

7

9 Функция Copy( S , Poz , N ) выделяет из строки S подстроку длиной N

Функция Copy( S , Poz , N ) выделяет из строки S подстроку длиной N

символов, начиная с позиции Poz. Здесь N и Poz – целочисленные выражения. Пример 3

Значение S

Выражение

Результат

‘Мама мыла раму’

Copy( S , 6, 4 )

‘Мыла’

‘Маша ела кашу’

Copy( S , 1, 8 )

‘Маша ела’

10 Функция Concat( S1 , S 2 , … , SN ) выполняет сцепление строк S1 , S 2

Функция Concat( S1 , S 2 , … , SN ) выполняет сцепление строк S1 , S 2

, … , SN в одну строку. Пример 4

Выражение

Результат

Concat( ‘Маша‘, ‘ ела‘,’ кашу’)

‘Маша ела кашу’

11 Функция Pos( S1 , S 2 ) обнаруживает первое появление в строке S 2

Функция Pos( S1 , S 2 ) обнаруживает первое появление в строке S 2

подстроки. S1. Результат – целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S 2 подстроки S1 не обнаружено, то результат равен 0. Пример 5

Значение S2

Выражение

Результат

‘abcdef’

Pos(‘cd’,S2)

3

‘abcdcdef’

Pos(‘cd’,S2)

3

‘abcdef’

Pos(‘k’,S2)

0

12 Процедура Delete( S , Poz , N) - удаление N символов из строки S ,

Процедура Delete( S , Poz , N) - удаление N символов из строки S ,

начиная с позиции Poz . В результате выполнения процедуры уменьшается текущая длина строки в переменной S. Пример 6

Исходное значение S

Оператор

Конечное значение S

‘abcdefg’

Delete( S,3,2)

‘abefg’

‘abcdefg’

Delete( S,2,6)

‘a’

13 Процедура Insert( S1 , S 2, Poz ) - вставка строки S1 в строку S 2 ,

Процедура Insert( S1 , S 2, Poz ) - вставка строки S1 в строку S 2 ,

начиная с позиции Poz. Пример 7

Исходное значение S2

Оператор

Конечное значение S

‘Эвм pc’

‘Эвм ibm-pc’

‘Рис. 2’

‘Рис. N2’

14 Задача 1. Из данной символьной строки s1 выбрать все цифры и

Задача 1. Из данной символьной строки s1 выбрать все цифры и

сформировать другую строку из этих цифр s2, сохранив их последовательность. Решение Идея алгоритма состоит в следующем: Просматриваются все символы исходной строки и проверяется принадлежность каждого символьному интервалу от ‘0’ до ‘9’ если «да», то такой символ присоединяется к строке s2. Program Stroki; Var s1, s2: string; i: byte; begin write(‘Введите исходную строку:’); readln(s1); s2:=’ ’; for i:=1 to length(s1) do if (s1[i]>=’0’) and (s1[i]<=’9’) then s2:=s2+s1[i]; writeln(‘Результат:’,s2); end. Тест: Введите исходную строку:df56ghf789yt6u8k88w Результат:567896888

15 Символьные и строковые переменные
16 Задача 3. Составить программу, которая удаляет в начале строки пробелы

Задача 3. Составить программу, которая удаляет в начале строки пробелы

введенной с клавиатуры. Program probel; Var s: string[80]; Begin writeln(‘Удаление начальных пробелов строки.’); write(‘Введите строку:’); readln(s); while (pos(‘ ‘,s)=1) and (length(s)>0) do delete(s,1,1); write(‘Строка без начальных пробелов:’,s); readln; end.

17 Практическое задание

Практическое задание

Из слова «Математика» получить слово «тема».

18  Задача 3. Составить программу, заменяющую во введенной с клавиатуры

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

Задача 3. Составить программу, заменяющую во введенной с клавиатуры строке все слова «кит» на «кот» и наоборот. Кот плывет по океану, Кит на кухне ест сметану Program cat_kit; Var s, st: string; i: integer; begin write(‘Введите исходную строку:’); readln(s); i:=1; repeat st:=copy(s, i, 3); if st=’Кот’ then begin delete(s, i, length(‘Кот’)); insert(‘Кит’, s, i) end

else if st=’Кит’ then begin delete(s, i, length(‘Кит’)); insert(‘Кот’, s, i) end; i:=i+1 until i=length(s)-2; writeln(s); readln; end.

19 Практикум по решению задач

Практикум по решению задач

1. Составить программу, удаляющую в строке все, что заключено между фигурными (комментарными ) скобками и сами скобки. Например, 111{333}999 111999 2. Составить программу, которая обращает введенное слово, т.е. переставляет символы в слове в обратном порядке. Например, мама – амам, Петя – ятеП.

20 Проверка задач

Проверка задач

1 задача: var S : string; i, j : integer; Begin writeln(‘введите исходную строку’); readln(S); repeat i:= Pos(‘{‘,S); if i>0 then begin j:= Pos(‘}’,S); If (j>i) then delete(S,i,j-i+1) else begin writeln(‘Неверно введен комментарий’); i:=0 ; { выход из цикла } end; end; until i=0 ; Writeln(S); Readln; End.

21 2 задача: 1 способ: program obr_word; var s: string[30]; i: byte;

2 задача: 1 способ: program obr_word; var s: string[30]; i: byte;

begin writeln (‘vvedite slovo’); readln(s); for i:=length(s) downto 1 do write(s[i]); readln; end.

2 способ: {формирование нового массива из элементов старого массива} program obr_word; var s: string[30]; ch: char; i: byte; begin writeln (‘vvedite slovo’); readln(s); for i:=1 to trunc(length(s)/2) do begin ch:=s[i]; s[i]:=s[length(s)-i+1]; s[length(s)-i+1]:=ch; end; write(s); readln; end.

22 Проверить является ли слово палиндромом Задача: Дано произвольное

Проверить является ли слово палиндромом Задача: Дано произвольное

слово. Проверить является ли оно палиндромом. ( Пример: слово палиндромы- казак, шалаш, мадам). Program pol; Var S: string; i, L, m, k: integer; Begin Writeln (‘vvedite slovo’); Read (s); K:=0; L:= length (s); m:=trunc(L/2); For i:=1 to m do If s[i] <> s[L-i+1] then k:=1; if k:=1 then writeln (‘slovo’ ,s, ‘not polindrom’) else writeln (‘slovo’ ,s, ‘ polindrom’); Readln; End.

23 Практикум по решению задач

Практикум по решению задач

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

24 Проверка

Проверка

Program tire; Var s, s1, s2: string; N: integer; Begin Readln(s); N:=pos(‘-‘, s); s1:=copy(s,1, N-1); s2:=copy(s, N+1, length(s)); s:=s2+ ’-‘ + s1+ ’.’; writeln(s); End.

25 Задача: Определить, как часто встречается определенный символ в строке

Задача: Определить, как часто встречается определенный символ в строке

Описание переменных: s – строка; c – символ; n – количество найденных символов в строке; len – длина строки; freq – частота встречаемости, определяемая по формуле (n / len) * 100. Алгоритм решения задачи: Получить строку и символ. Определить длину строки. Перебрать каждый символ в строке: если очередной символ совпадает с заданным символом, то увеличить счетчик символов (n) на единицу. Вычислить значение частоты встречаемости и вывести ее на экран.

26 Программа на языке Паскаль: var s: string; c: char; n,len,i: byte;

Программа на языке Паскаль: var s: string; c: char; n,len,i: byte;

freq: real; begin write('String: '); readln(s); write('Char: '); readln(c); n := 0; len := length(s); for i:=1 to len do if s[i] = c then n := n + 1; freq := (n / len) * 100; writeln('Frequency: ',freq:5:2,‘ '); readln end.

27 Определение наименьшего слова в строке Определить наименьшую длину

Определение наименьшего слова в строке Определить наименьшую длину

слова в строке. Считать, что все слова отделены пробелами. Program zadacha; Var S: string; i, L, min, Lw: integer; Begin Writeln (‘vvedite stroky’); Read (s); Lw:=0; L:= length(s); min:=1000; for i:=1 to L do If s[i]<>’ ‘ then Lw:=Lw+1 else if (Lw<min) and (Lw>0) then begin min:=Lw; Lw:=0; End; Writeln (‘min=‘ ,min) End.

28 Процедуры преобразования типов в Паскале

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

Str(x, S) преобразует число x в строковый формат. Здесь x – любое числовое выражение, S – строковая переменная. В процедуре есть возможность задавать формат числа x. Например, str(x: 8: 3, S), где 8 – общее число знаков в числе x, а 3 – число знаков после запятой.

Оператор процедуры

Значение S

Str (sin(1):6:4, S)

‘0.0175’

Str (3456, S)

‘3456’

29 Тип X

Тип X

Оператор процедуры

Значение X

Значение kod

Real

Val(’12.34’, x, kod)

12.34

0

Integer

Val(’12.34’, x, kod)

12

3

30 Задачи из ЕГЭ

Задачи из ЕГЭ

На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат: <Фамилия> <Инициалы> <номер школы> где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки: Иванов П.С. 57 Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Turbo Pascal 7.0), которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника. Следует учитывать, что N>=1000.

31 Решение: 1) по условию, единственная информация, которая нам нужна в

Решение: 1) по условию, единственная информация, которая нам нужна в

итоге для вывода результата – это количество участников по каждой школе 2) так как номер школы состоит (по условию!) не более, чем из двух цифр, всего может быть не более 99 школ (с номерами от 1 до 99) 3) поэтому можно ввести массив C из 99 элементов; для всех k от 1 до 99 элемент C[k] будет ячейкой-счетчиком, в которой накапливается число участников от школы с номером k; сначала во все элементы этого массива записываются нуль (обнуление счетчиков): for k:=1 to 99 do C[k]:=0; во многих системах программирования на Паскале все глобальные переменные автоматически обнуляются, и таким образом, этот цикл ничего не дает; однако на всякий случай нужно продемонстрировать эксперту, который будет проверять часть С вашей работы, что вы понимаете суть дела («счетчик необходимо сначала обнулить»)

32 4) основной цикл обработки вводимых строк можно записать на псевдокоде

4) основной цикл обработки вводимых строк можно записать на псевдокоде

так: for i:=1 to N do begin { читаем очередную строку } { определяем номер школы k } c[k] := c[k] + 1; { увеличиваем счетчик k-ой школы } end; 5) поскольку данные вводятся в виде символьной строки, нужно выделить в памяти переменную s типа string 6) для чтения очередной строки будем использовать оператор readln 7) остается понять, как выделить из строки номер школы; по условию он закодирован в последней части строки, после второго пробела; значит, нужно найти этот второй пробел, вырезать из строки весь «хвост» после этого пробела, и преобразовать его из символьного формата в числовой 8) чтобы найти первый пробел и «отрезать» первую часть строки с этим пробелом, можно использовать команды p := pos(' ', s); s := copy(s, p+1, length(s)-p); первая команда определяет номер первого пробела и записывает его в целую переменную p, в вторая – записывает в строку s весь «хвост», стоящий за этим пробелом, начиная с символа с номером p+1; длина хвоста равна length(s)-p, где length(s) – длина строки;

33 9) поскольку нас интересует часть после второго пробела, эти две

9) поскольку нас интересует часть после второго пробела, эти две

строчки нужно повторить два раза, в результате в переменной s окажется символьная запись номера школы, для преобразования ее в форму числа можно использовать функцию val: val(s, k, r); эта процедура (turbo pascal) преобразует символьную строку s в числовое значение k; с помощью переменной r обнаруживается ошибка: если раскодировать число не удалось (в строке не число), в r будет записан нуль (здесь мы не будем обрабатывать эту ошибку, полагая, что все данные правильные); 10) таким образом, основной цикл выглядит так: for i:=1 to N do begin readln(s); { читаем очередную строку } { выделяем часть после второго пробела } p := pos(' ', s); s := copy(s, p+1, length(s)-p); p := pos(' ', s); s := copy(s, p+1, length(s)-p); { определяем номер школы k } val(s, k, r); c[k] := c[k] + 1; { увеличиваем счетчик k-ой школы } end;

34 11) заметим, что можно избежать дублирования двух строк в теле цикла,

11) заметим, что можно избежать дублирования двух строк в теле цикла,

«свернув» их во внутренний цикл, но это вряд ли сильно упростит запись: for k:=1 to 2 do begin p := pos(' ', s); s := copy(s, p+1, length(s)-p); end; 12) дальше стандартным алгоритмом определяем в массиве C минимальный элемент min, не учитывая нули (школы, из которых не было участников): min := N; for k:=1 to 99 do if (c[k] <> 0) and (c[k]<min) then min := c[k]; здесь интересна первая строчка, min:=n: по условию всего было N участников, поэтому минимальное значение не может быть больше N; обратите внимание, что привычный вариант (который начинается с min:=c[1]) работает неверно, если из первой школы не было ни одного участника 13) и выводим на экран номера всех школ (обратите внимание – номера!), Для которых c[k]=min: for k:=1 to 99 do if c[k] = min then writeln(k); 14) остается «собрать» программу, чтобы получилось полное решение; максимальное количество школ мы задали в виде константы LIM:

35 Program school; const LIM = 99; var c:array[1

Program school; const LIM = 99; var c:array[1

.Lim] of integer; i, p, n, k, r, min: integer; s:string; begin readln(n); for i:=1 to n do begin readln(s); { читаем очередную строку } { выделяем часть после второго пробела } p := pos(' ', s); s := copy(s, p+1, length(s)-p); p := pos(' ', s); s := copy(s, p+1, length(s)-p); { определяем номер школы k } val(s, k, r); c[k] := c[k] + 1; { увеличиваем счетчик k-ой школы } end; min := n; for k:=1 to lim do if (c[k] <> 0) and (c[k]<min) then min := c[k]; for k:=1 to lim do if c[k] = min then writeln(k); end.

«Символьные и строковые переменные»
http://900igr.net/prezentacija/algebra/simvolnye-i-strokovye-peremennye-263541.html
cсылка на страницу
Урок

Алгебра

35 тем
Слайды
900igr.net > Презентации по алгебре > Без темы > Символьные и строковые переменные