Слайд 2
Строковые переменные
Тип данных (string) определяет строки с максимальной
длиной 255 символов. Длину строки можно регулировать в секции
описаний.
Например,
var
MaxLine : string; //длина строки до 255
City : string[30]; // длина строки до 30 символов
Для переменных типа string выделяют память, на 1 байт больше максимальной длины строки.
Начальный байт с номером 0 отводится для хранения количества записанных в строку символов.
Встроенная функция Length возвращает фактическое количество литер в записанных в строку.
Слайд 3
Операции над строками.
Выражения, в которых операндами служат строки,
называются строковыми.
Над строками определены два вида операций:
1. Операция сцепления
(конкатенации) обозначают как (+) .
Например:
SumStr := ‘Язык'+‘ программирования'+‘ Pascal'
2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, где первый несовпадающий символ имеет больший номер в таблице ASCII.
Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True
Если строки имеют различную длину, но в общей части символы совпадают, считается, что короткая строка меньше, чем длинная.
Строки равны, если последовательность символов в них совпадает.
Слайд 4
Изменение строковых переменных
Для изменения строковой переменной используется оператор
присваивания (:=) или оператор ввода данных.
Например:
Name:=‘Михаил’;
Write (‘Укажите Вашу
фамилию’);
Read (fam);
Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.
Слайд 5
Обращение к отдельным символам строки
К символам строки можно
обратиться по номеру (индексу) символа в строке.
Например, чтобы
обратиться к третьему символу строки SumStr надо записать SumStr[3].
Запись SumStr[0] возвращает значение текущей длины строки.
Что выведет на экран следующий фрагмент программы?
Var StrRama:string[20];
Begin
StrRama:=‘МАМА МЫЛА РАМУ’;
WRITE (StrRama[14]+ StrRama[11]+ StrRama[2]+ StrRama[8], ord(StrRama[0]));
End.
Слайд 6
Функции для обработки строк
Delete (Str,Poz,N) - удаление N
символов строки Str, начиная с позиции Poz.
Insert (What,Where,Poz) -
вставка строки What в строку Where, начиная с позиции Poz.
Copy (Str,Poz,Nstr) - строка длиной Nstr, начиная с позиции Poz, из строки Str.
Concat (Str1,Str2,...,StrN) - сцепление строк в указанном порядке.
Poz (What,Where) - обнаруживает появление подстроки What в строке Where.
UpCase (Ch) - преобразует строчную букву в прописную.
Str (Number,Stroka) - преобразует число в строку.
Val (Stroka,Number,Code) - преобразует строку в число и выдает код правильности преобразования.
Слайд 7
Функция Length
Встроенная функция Length (длина) позволяет определить фактическую
длину текстовой строки, хранящейся в указанной переменной (а не
величину предельного размера строки, установленную при декларации):
Program DemoFunctionLength;
Var
Word : string;
Begin
write ('Введите слово :');
readln(Word);
writeln('Это слово состоит из ',Length (Word),' букв');
End.
Примечание. При подсчете фактической длины строки учитываются все входящие в нее символы, в том числе и пробелы.
Слайд 8
Функция Upcase
Функция Upcase позволяет преобразовывать символ любой литеры
из строчного в прописной.
Эта функция рассчитана на обработку
отдельного символа. Поэтому для обработки строки символов с помощью этой функции приходится организовывать цикл.
Program DemoFunctionUpcase;
Var
Word : string;
i : integer;
Begin
Word := 'фирма Microsoft';
for i := 6 to Length (Word) do
Word[i] := UpCase (Word[i]);
writeln(Word);
End.
В результате работы программы на терминал выдается строка, содержащая большие английские буквы и маленькие русские.
Слайд 9
Функция Copy
Функция Copy позволяет копировать фрагмент некоторой строки
из одной переменной в другую. Вызывая эту функцию нужно
указать следующие параметры:
имя строки, из которой должен извлекаться копируемый фрагмент,
позицию в строке, начиная с которой будет копироваться фрагмент,
число копируемых символов.
Program DemoFunctionCopy;
Var
Word : string;
Word1 : string[20];
Begin
Word := ‘Кадетский корпус';
writeln(Word);
Word1 := Copy (Word,11,6);
writeln(Word1);
End.
Примечание. Если начальная или конечная позиции копируемого текста находятся вне пределов исходной строки символов, то сообщение об ошибке не выдается. Результатом выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент от начальной позиции копирования до конца исходной строки.
Слайд 10
Функция Pos
Функция Pos осуществляет поиск фрагмента в строке.
Если
заданный фрагмент в строке присутствует, то функция возвращает номер
позиции, с которой он начинается.
Если фрагмент не найден, то функция возвращает нуль.
Program DemoFunctionPos;
Var
Word : string;
SearchWord : string[20];
Position : integer;
Begin
Word := ‘Кадетский корпус';
writeln(Word);
SearchWord:=‘детский’;
Position := Pos(SearchWord, Word);
if Position <> 0 then
begin
write ('Фрагмент <',SearchWord,'> содержится в строке <',Word);
writeln ('>, начиная с позиции ',Position );
end
else
writeln('Фрагмент <',SearchWord,'> не содержится в строке <',Word);
End.
Слайд 11
Функция Concat
Функция Concat (Str1,Str2,...,StrN) выполняет конкатенацию (или сцепление)
строк Str1,Str2,...,StrN в том порядке, в каком они указаны
в списке параметров.
Сумма символов сцепленных строк не должна превышать 255.
Program DemoFunctionConcat;
Var
Word : string;
Word1, Word2 : string[20];
Begin
Word1 := ‘кадетского';
Word2 := ‘корпуса';
Word := Concat('Кадеты ',Word1,Word2);
writeln(Word);
end.
Слайд 12
Задание на самоподготовку
Посчитайте количество цифр в веденной строке
символов.
Проверьте правописание “жи” и “ши” в тексте. Выведите
на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.
Выясните, сколько раз встречается каждая буква алфавита в предложенном тексте.
В заданном тексте найти и распечатать слово максимальной длины.
Заданы разделенные пробелами фамилия, имя и отчество учащегося и три оценки за экзамены. Напечатайте его фамилию и инициалы и средний балл. Применяйте подпрограммы.
Слайд 13
Program cifra;
Var
Word : string;
i,k : integer;
Begin
cls;
word:='1 t $
45nnfft623456kugтра5234626ктор 122';
k:=0;
for i:=1 to Length(word) do
if (word[i]>='0') And (word[i]
then k:=k+1;
writeln(Word,' ', 'число цифр',k);
end.
Задание на самоподготовку
Посчитайте количество цифр в введенной строке символов.
Слайд 14
Задание на самоподготовку
Проверьте правописание “жи” и “ши” в
тексте. Выведите на экран количество сделанных ошибок и исправленную
строку. Применяйте подпрограммы.
Program cifra;
Var
Word : string;
i,osh : integer;
procedure zhi_shi (var Word : string;var i,osh : integer);
begin
if word[i+1]='ы' then begin osh:=osh+1; word[i+1]:='и'; end;
end;
Begin
cls;
word:='Тишына, камышы. Шыпит костер. Жыдкий свет разливается живым золотом';
writeln(Word,' всего символов',Length(word));
osh:=0;
for i:=1 to Length (word) do
Begin
if (word[i]='ж')or (word[i]='Ж') then zhi_shi(Word,i,osh);
if (word[i]='ш')or (word[i]='Ш') then zhi_shi(Word,i,osh)
end;
writeln(Word,' число ошибок',osh);
end.
Слайд 15
Задание на самоподготовку
Выясните, сколько раз встречается каждая буква
алфавита в предложенном тексте.
programm chislo_simbol;
var
i,k,simbol: integer;
Word
: string;
begin
cls;
word:='Мороз и солнце; день чудесный! Еще ты дремлешь, друг прелестный...';
writeln(Word,' ','всего символов',Length(word));
for i:=192 to 192+31 do
begin
simbol:=0;
write (chr(i),chr(i+32));
for k:=1 to Length (word) do
if (word[k]=chr(i))or (word[k]=chr(i+32)) then simbol:=simbol+1;
writeln (' ', simbol)
end;
end.
Слайд 16
Задание на самоподготовку
В заданном тексте найти и распечатать
слово максимальной длины.
program maxi_slovo;
var
k,max,nach,pmax:integer;
Word: string;
begin
cls;
word:='У
лукоморья дуб зеленый; златая цепь на дубе том...';
writeln(Word,' ','всего символов',Length(word));
max:=1; //длинна слова максимальной длинны
nach:=1; //начало текущего слова
for k:=1 to Length(word) do
if word[k]=' ' then
begin
if k-nach>max then begin max:=k-nach;pmax:=nach; end;
nach:=k
end;
write(copy(word,pmax,max)); //pmax начало максимального слова
end.
Слайд 17
Задание на самоподготовку
Заданы разделенные пробелами фамилия, имя и
отчество учащегося и три оценки за экзамены. Напечатайте его
фамилию и инициалы и средний балл.
program familia;
var
i,k,simbol,oc1,oc2,oc3,c: integer;
Word : string;
srball: real;
p: array [1..5] of integer;
begin
cls;
word:='Фархутдинов Исмаил Бархударович 3 4 4';
Writeln (Word,' ','всего символов',Length (word));
i:=1;
for k:=1 to Length(word) do
if word[k]=' ' then begin p[i]:=k;i:=i+1;write (' ',p[i-1]) end; //массив с позициями пробелов p[i]
writeln;
write (copy(word,1,p[1]),copy(word,p[1]+1,1)+'. ',copy(word,p[2]+1,1)+'. ');//печать Фамилия И.О.
val(copy(word,p[3]+1,1),oc1,c); // преобразование оценки в число
val(copy(word,p[4]+1,1),oc2,c);
val(copy(word,p[5]+1,1),oc3,c);
srball:=(oc1+oc2+oc3)/3;
write (' средний балл ',srball:5:2);
end.
Слайд 18
Процедура Insert
Процедура Insert вставляет в исходную строку, начиная
с указанной позиции, другую строку.
Процедура Insert (Word1,Word2,5) вставляет
строку Word1 в строку Word2, начиная с 5-ой позиции.
Program DemoFunctionConcat;
Var
Word1, Word2 : string;
Begin
Word1 := ‘ кадетский ';
Word2 := ‘Санкт-Петербургский корпус';
Insert(Word1,Word2,21);
writeln(Word2);
end.
Слайд 19
Процедура Delete
Процедура Delete удаляет в строке фрагмент определенной
длины, начиная с указанной позиции. Так, оператор Delete(Word1,2,3) удаляет
из указанной строки фрагмент, длиной в три символа, начиная со второго.
Слайд 20
Процедура Str
Общий вид Str(Chislo,Stroka)
Процедура Str преобразует числовое значение
переменной Chislo в строковую переменную Stroka. После первого параметра
может указываться формат, аналогичный формату вывода.
Program DemoProcedureStr;
Var
Word : string;
Chislo : integer;
Begin
Chislo := 1560;
Str(Chislo:8, Word);
writeln(Word);
End.
Слайд 21
Процедура Val
Общий вид Val(Stroka,Chislo,Code)
Процедура Val преобразует строку Stroka
в величину целочисленного или вещественного типа и помещает результат
в Chislo.
Строка Stroka не должна содержать пробелов в начале и в конце.
Code целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно нулю, если же ошибка обнаружена, Code будет содержать номер позиции первого ошибочного символа, а значение Chislo будет не определено.
Program DemoProcedureVal;
Var
Word : string;
Chislo, Code : integer;
Begin
writeln('Введите строку цифр ');
readln(Word);
Val(Word, Chislo, Code);
if Code <> 0
then
writeln('Ошибка! В позиции ',Code,' не цифра!',);
End.