Теория 1
Строка - это массив символов, т.е. элементов типа char . В Паскале строке соответствует тип данных String .
var Имя : string [ Длина ];
Если длина не указана, выделяется память под строку до 255 символов.
строка 255 символов
var s1:string;
строка 2 0 символов
var s2:string[20];
S2, " width="640"
Теория 2
Сравнение двух строк
Правила:
- строки равны только при одинаковом наборе символов и
одинаковой длине;
Например: 'ABC'='ABC' и 'ABC' ≠'abc'
- иначе происходит поэлементное сравнение символов
по их кодам:
'0'
Например: 'ADS' АДС '
65+68+83 192+196+209 (По таблице ASCII)
Сумма кодов строки S1
Сумма кодов строки S1S2,
Теория 3
Соединение двух строк .
s 1:= '2011 ' + ' год';
Writeln(s1);
s1:='10';
s2:=' класс ';
s3:=s1+' '+s2;
Writeln(s 3 );
Теория 4
Функция Length
Задача 1. Составить программу подсчитывающую количество букв в слове .
Функция Length ( S ) определяет текущую длину строки S .
Результат — значение целого типа .
PROGRAM Dlina_2;
VAR S : STRING;
BEGIN
Writeln(’ введите слово ’) ; Readln(S);
Writeln (’слово состоит из ’, Length ( S ) ,’букв. ’);
END .
Записываем длину строки в переменную целого типа
PROGRAM Dlina_ 1 ;
VAR S : STRING;
n:INTEGER;
BEGIN
Writeln( введите слово ') ; Readln(S);
n:= Length (S) ;
Writeln( ‘ введите слово ', n:5 ,' букв..');
END.
Выводим на экран длину строки, как результат выполнения функции
n) then writeln(' Первая больше '); if (m Вторая больше '); End. Сравниваем длины и выводим соответствующие пояснения Вычисляем длину строк " width="640"
Задача на сравнение строк 5
Задача 2. Сравнить длину двух строк введенных с клавиатуры.
Uses crt;
var a,b:string;
m,n:Integer;
Begin
Clrscr;
Writeln('ВВеди первую строку ');Readln(a);
Writeln('ВВеди вторую строку ');Readln(b);
m:=Length(a);
n:=Length(b);
if (m=n) then writeln(' Строки равны ');
if (mn) then writeln(' Первая больше ');
if (m Вторая больше ');
End.
Сравниваем длины и выводим соответствующие пояснения
Вычисляем длину строк
Теория 6
Функция Сору
Функция Сору( S , P , N) выделяет из строки S подстроку длиной N символов, начиная с позиции P . Здесь N и P – целочисленные выражения.
В фразе МАМА МЫЛА РАМУ слово РАМУ начинается с 11 буквы и состоит из 4 букв
COPY(s1,11,4)
Задача на составление строк 7
Задача 3. Составить программу осуществляющую вырезку из слова ИНФОРМАТИКА букв так, что бы из них получилось слово ТОРТ.
Program n 3 _1 ;
Uses crt;
var a,b,c,d:string;
Begin
Clrscr ;
a :='информатика';
b :='';
c:=copy(a,8,1);
d:=copy(a,4,2);
b:=c+d+c;
writeln(b);
End.
Второй вариант:
Program n3_2;
Uses crt;
var a,b:string;
Begin
Clrscr;
a:=‘информатика';
b:=a[8]+a[4]+a[5]+a[8];
writeln(b);
End.
Используем определение строки как массива символов
Используем функцию работы с символьными переменными
COPY
Преобразование типов 8
Функция STR
Задача 4 . Составьте программу которая выводит первую и последнюю цифру натурального числа, введенного с клавиатуры.
Str(x, S) преобразует число x в строковый формат. Где x – любое числовое выражение, S – строковая переменная.
PROGRAM Primer;
uses Crt;
VAR S: STRING;
n:INTEGER;
BEGIN
Write( ' Введи число ');readln(n);
Str(n,S);
Writeln( ' Первая цифра -', S[1] );
Writeln( ' Последняя цифра - ', S[length(S)] );
END.
Преобразуем натуральное число в строку
Преобразование типов 9
Процедура VAL
Процедура val позволяет преобразовать цифровые символы (изображение числа) в число. В общем виде обращение к процедуре выглядит так:
VAL ( Строка, Число, Код ) ;
где С трока – строковая константа или переменная, содержащая изображение числа;
Ч исло – переменная целого или дробного типа, которой должно быть присвоено значение
Код – возвращаемый процедурой код ошибки (целое число )
Преобразование типов 10
BEGIN
s1:=' 123456789 ';
val(s1,n,code);
Writeln(n);
END.
BEGIN
s1:=' 123456789 ABCDE ';
val(s1,n,code);
Writeln(n);
END.
Преобразование типов 11
В PascalABC есть более развитый арсенал
преобразований как в DELPHI :
S:= IntToStr( N ) - преобразует целое число к строке ;
n:= StrToInt( S ) - преобразует строку в целое число
S:= FloatToStr(r) - преобразует вещественное число к строке
R:= StrToFloat(s) преобразует строку в вещественное число.
Если преобразование невозможно, то возникает ошибка времени выполнения
s1:=' ABCDE 123456789 ';
val(s1,n,code);
Writeln(n);
Преобразование типов 12
Задача 5 . Дано строка символов а 1 +а 2 =. Где 1 1 и а 2
VAR S: STRING; a,b,c:real;
code:INTEGER;
BEGIN
Write(‘ Введи выражение = ');read(s);
val(s[1],a,code);
val(s[3],b,code);
if (s[2]='+') then c:=a+b;
if (s[2]='-') then c:=a-b;
if (s[2]='*') then c:=a*b;
if (s[2]='/') then c:=a/b;
clrscr;
Writeln(s,c);
END.
Из строки берем первый и третий символ и преобразуем в число
Символы и их коды 13
Функции ORD и CHR
Функция Ord(S) – определяет порядковый номер символа.
Функция Chr(i) – определяет символ с порядковым номером i
По номеру 255 выводим символ из кодовой таблицы Я
Символы и их коды 14
Задача 6. Составьте программу, которая по символу введенному с клавиатуры, выводит его номер в кодовой таблице.
Функция ORD работает только символьным типом данных
PROGRAM Primer;
uses Crt;
VAR S: char;
n,code:INTEGER;
BEGIN
Write( ' Введи символ ');readln(s);
Writeln( ' Символ ', s , ' имеет код -', ord(s) );
END.
Подсчет символов в строке 15
Задача 7. Дана строка символов. Определить сколько раз в ней встречается буква А (русская).
Program n 5 ;
Uses Crt;
Var s:string;
i,k:integer;
begin
ClrScr;
Write(' ВВеди строку '); readln(s);
k:=0;
for i:=1 to length(s) do if (s[i]=' А ') then k:=k+1;
writeln('Буква А встречается = ', k:8,' раз');
end.
Перебираем от 1 до последней буквы
Если на i -ом месте стоит А увеличиваем К на 1
Замечание 16
Замечание. Если требуется поиск нескольких символов в строке, то условия заключаем в программные скобки BEGIN … END
for i:=1 to length(s) do begin
if (s[i]=……
if (s[i]=……
end;
Подсчет символов в строке 17
Начало
Ввод S
Блок-схема к задаче подсчета букв А в строке
К=0
i,1,length(s)
S i ='A'
Нет
Да
К=К+1
Вывод К
Конец
Замена символов в строке 18
Задача 8. Дана строка символов. Заменить в ней все буквы А на букву О.
Перебираем от 1 до последней буквы
Program n 6 ;
Uses Crt;
Var s:string;
i:integer;
begin
ClrScr;
Write(' ВВеди строку '); readln(s);
for i:=1 to length(s) do if (s[i]='A') then s[i]:='O';
writeln(s);
end.
Если на i -ом месте стоит А ставим на i -е место О.
Замена символов в строке 19
Начало
Ввод S
Блок-схема к задаче замен буквы А на О
i,1,length(s)
S i ='A'
Нет
Да
S i ='O'
Вывод S
Конец
Удаление символов из строки 20
Задача 9 Удалить из строки введенной с клавиатуры все буквы R (латинские, заглавные).
Подготавливаем дополнительную переменную
Program n 7 ;
Uses Crt;
var a,b:String;
i:integer;
begin
ClrScr;
Write(' ВВеди строку = ');readln(a);
b:='';
for i:=1 to length(a) do if (a[i]‘R') then b:=b+a[i];
a:=b;
writeln(a);
end.
Если на i -ом месте не стоит R то прибавляем эту букву к тому, что есть в B
Перебираем от 1 до последней буквы
То, что получилось в В перемещаем обратно в А
Удаление символов из строки 21
Начало
Ввод A
Блок-схема к задаче удаления букв R из строки
B = ''
i,1,length(A)
A i 'R'
Нет
Да
B=B+ A i
A = B
Вывод А
Конец
Вложенные условия. 22
Задача 10 . В заданном тексте везде букву "а" заменить на букву "б" , а букву "б" - на букву "а" .
Из всей строки нам нужно выбрать только А и Б
begin
clRscr;
Readln(s);
for i:=1 to length(s) do
if (s[i]='а') or (s[i]='б') then
if (s[i]='а') then s[i]:='б' else s[i]:='а';
writeln(s);
end.
И только после осуществлять замену
Вложенные условия 23
Начало
S i =' а ' или S i =' б '
Ввод S
i, 1, length(S)
Да
Нет
S i =' а '
Да
Нет
S i =' б '
S i =' а '
Вывод S
Блок-схема к задаче замены А на Б и наоборот
Конец
Вложенные циклы 24
Задача 11. Дана строка символов, содержащая знаки препинания. Подсчитать какие и сколько знаков препинания содержит строка.
Внешний цикл, осуществляющий перебор знаков записанных в S1
begin
ClrScr;
Write(' ВВеди строку '); readln(s);
s1:=',.;:"!?-';
for i:=1 to length(s1) do begin
k:=0;
for j:=1 to length(s) do if (s[j]=s1[i]) then k:=k+1;
if (k0) then writeln(s1[i],' - ',k:5,' раз ');
end;
end.
Тело внешнего цикла содержит цикл, отвечающий за перебор символов введенной строки
Вложенные циклы 25
Начало
Ввод S
s1=',.;:"!?-'
i, 1, length(S1)
K=0
j, 1, length(S)
Конец
S j = S1 i
Да
K=K+1
Нет
Блок-схема к задаче подсчета знаков препинания
K0
Да
Нет
Вывод S 1 i ,K