2012 год
Строка - это массив символов, т.е. элементов типа char. В Паскале строке соответствует тип данных String. var Имя : string [Длина]; Если длина не указана, выделяется память под строку до 255 символов. Теория 1 var s1:string; строка 255 символов var s2:string[20]; строка 20 символов
Правила: строки равны только при одинаковом наборе символов и одинаковой длине; Например: 'ABC'='ABC' и 'ABC''abc' иначе происходит поэлементное сравнение символов по их кодам: '0'<'1'<...<'9'<'A'<...<'Z'<'a'<...<'z'<символы кириллицы Например: 'ADS'<'АДС' < (По таблице ASCII) Сравнение двух строк Теория 2 Сумма кодов строки S1<S2, Сумма кодов строки S1>S2,
Теория 3 Соединение двух строк. s1:='2011' + ' год'; Writeln(s1); s1:='10'; s2:='класс'; s3:=s1+' '+s2; Writeln(s3);
Функция Length Функция Length(S) определяет текущую длину строки S. Результат значение целого типа. Теория 4 PROGRAM Dlina_1; VAR S : STRING; n:INTEGER; BEGIN Writeln(введите слово ') ; Readln(S); n:= Length (S) ; Writeln(введите слово ', n:5,' букв..'); END. Записываем длину строки в переменную целого типа PROGRAM Dlina_2; VAR S : STRING; BEGIN Writeln(введите слово) ; Readln(S); Writeln(слово состоит из, Length (S),букв. ); END. Выводим на экран длину строки, как результат выполнения функции Задача 1. Составить программу подсчитывающую количество букв в слове.
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 (m>n) then writeln('Первая больше'); if (m<n) then writeln('Вторая больше'); End. Задача 2. Сравнить длину двух строк введенных с клавиатуры. Вычисляем длину строк Сравниваем длины и выводим соответствующие пояснения Задача на сравнение строк 5
Функция Сору Функция Сору(S, P, N) выделяет из строки S подстроку длиной N символов, начиная с позиции P. Здесь N и P – целочисленные выражения. Теория 6 В фразе МАМА МЫЛА РАМУ слово РАМУ начинается с 11 буквы и состоит из 4 букв COPY(s1,11,4)
Задача 3. Составить программу осуществляющую вырезку из слова ИНФОРМАТИКА букв так, что бы из них получилось слово ТОРТ. Program n3_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. Задача на составление строк 7 Используем функцию работы с символьными переменными COPY Второй вариант: Program n3_2; Uses crt; var a,b:string; Begin Clrscr; a:=информатика'; b:=a[8]+a[4]+a[5]+a[8]; writeln(b); End. Используем определение строки как массива символов
Преобразование типов 8 Функция STR Str(x, S) преобразует число x в строковый формат. Где x – любое числовое выражение, S – строковая переменная. Задача 4. Составьте программу которая выводит первую и последнюю цифру натурального числа, введенного с клавиатуры. PROGRAM Primer; uses Crt; VAR S: STRING; n:INTEGER; BEGIN Write('Введи число ');readln(n); Str(n,S); Writeln('Первая цифра -',S[1]); Writeln('Последняя цифра - ',S[length(S)]); END. Преобразуем натуральное число в строку
Процедура val позволяет преобразовать цифровые символы (изображение числа) в число. В общем виде обращение к процедуре выглядит так: VAL (Строка, Число, Код) ; где Строка – строковая константа или переменная, содержащая изображение числа; Число – переменная целого или дробного типа, которой должно быть присвоено значение Код – возвращаемый процедурой код ошибки (целое число ) Преобразование типов 9 Процедура VAL
Преобразование типов 10 BEGIN s1:=' '; val(s1,n,code); Writeln(n); END. BEGIN s1:=' ABCDE'; val(s1,n,code); Writeln(n); END.
s1:='ABCDE '; val(s1,n,code); Writeln(n); В PascalABC есть более развитый арсенал преобразований как в DELPHI: S:=IntToStr(N) - преобразует целое число к строке; n:=StrToInt(S) - преобразует строку в целое число S:=FloatToStr(r) - преобразует вещественное число к строке R:=StrToFloat(s) преобразует строку в вещественное число. Если преобразование невозможно, то возникает ошибка времени выполнения Преобразование типов 11
Преобразование типов 12 Задача 5. Дано строка символов а 1 +а 2 =. Где 1<=а 1 и а 2 <=9. Составить программу, вычисляющую это выражение. Измените программу так, что бы вместо знака «+» можно было писать «-», «*», «/». 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. Составьте программу, которая по символу введенному с клавиатуры, выводит его номер в кодовой таблице. PROGRAM Primer; uses Crt; VAR S: char; n,code:INTEGER; BEGIN Write('Введи символ ');readln(s); Writeln('Символ ', s,' имеет код -',ord(s)); END. Функция ORD работает только символьным типом данных
Задача 7. Дана строка символов. Определить сколько раз в ней встречается буква А (русская). Program n5; 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 Подсчет символов в строке 15
Замечание 16 for i:=1 to length(s) do begin if (s[i]=…… end; Замечание. Если требуется поиск нескольких символов в строке, то условия заключаем в программные скобки BEGIN … END
Подсчет символов в строке 17 Начало Ввод S i,1,length(s) S i ='A' К=К+1 Вывод К Конец Да Нет Блок-схема к задаче подсчета букв А в строке К=0
Замена символов в строке 18 Задача 8. Дана строка символов. Заменить в ней все буквы А на букву О. Program n6; 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. Перебираем от 1 до последней буквы Если на i-ом месте стоит А ставим на i-е место О.
Замена символов в строке 19 Начало Ввод S i,1,length(s) S i ='A' S i ='O' Вывод S Конец Да Нет Блок-схема к задаче замен буквы А на О
Задача 9 Удалить из строки введенной с клавиатуры все буквы R (латинские, заглавные). Program n7; 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. Перебираем от 1 до последней буквы Подготавливаем дополнительную переменную Если на i-ом месте не стоит R то прибавляем эту букву к тому, что есть в B То, что получилось в В перемещаем обратно в А Удаление символов из строки 20
Удаление символов из строки 21 Начало Ввод A i,1,length(A) A i <>'R' B=B+ A i Вывод А Конец Да Нет Блок-схема к задаче удаления букв R из строки B='' A=BA=B
Вложенные условия. 22 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. Задача 10. В заданном тексте везде букву "а" заменить на букву "б", а букву "б" - на букву "а". Из всей строки нам нужно выбрать только А и Б И только после осуществлять замену
Вложенные условия 23 Начало Ввод S i, 1, length(S) S i ='а' S i ='б'S i ='а' Вывод S Конец S i ='а' или S i ='б' Да Нет Да Нет Блок-схема к задаче замены А на Б и наоборот
Вложенные циклы 24 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 (k<>0) then writeln(s1[i],' - ',k:5,' раз'); end; end. Задача 11. Дана строка символов, содержащая знаки препинания. Подсчитать какие и сколько знаков препинания содержит строка. Внешний цикл, осуществляющий перебор знаков записанных в S1 Тело внешнего цикла содержит цикл, отвечающий за перебор символов введенной строки
Вложенные циклы 25 Начало Ввод S i, 1, length(S1) s1=',.;:"!?-' K=0 j, 1, length(S) S j = S1 i Да Нет K=K+1 K<>0 Вывод S1 i,K Нет Да Конец Блок-схема к задаче подсчета знаков препинания