Строки в Pascal Автор: учитель информатикиМКОУ Плесской СОШЮдин А.Б.
Строка - это массив символов, т.е. элементов типа char. В Паскале строке соответствует тип данных String. var Имя : string [Длина]; Если длина не указана, выделяется память под строку до 255 символов. var s1:string; var s2:string[20]; строка 255 символов строка 20 символов
Сравнение двух строк Сумма кодов строки S1<S2, Сумма кодов строки S1>S2, Правила:строки равны только при одинаковом наборе символов и одинаковой длине; Например: 'ABC'='ABC' и 'ABC'≠'abc'иначе происходит поэлементное сравнение символов по их кодам: '0'<'1'<...<'9'<'A'<...<'Z'<'a'<...<'z'<символы кириллицы Например: 'ADS'<'АДС' 65+68+83 < 192+196+209 (По таблице ASCII)
Соединение двух строк. s1:='2011' + ' год';Writeln(s1); s1:='10';s2:='класс';s3:=s1+' '+s2;Writeln(s3);
Задача 1. Составить программу подсчитывающую количество букв в слове. 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. Выводим на экран длину строки, как результат выполнения функции
Задача 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 (m>n) then writeln('Первая больше'); if (m<n) then writeln('Вторая больше');End. Вычисляем длину строк Сравниваем длины и выводим соответствующие пояснения
Функция Сору(S, P, N) выделяет из строки S подстроку длиной N символов, начиная с позиции P. Здесь N и P – целочисленные выражения. В фразе МАМА МЫЛА РАМУ слово РАМУ начинается с 11 буквы и состоит из 4 буквCOPY(s1,11,4)
Задача 3. Составить программу осуществляющую вырезку из слова ИНФОРМАТИКА букв так, что бы из них получилось слово ТОРТ. Используем функцию работы с символьными переменными 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. Используем определение строки как массива символов
Задача 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 (Строка, Число, Код) ;где Строка – строковая константа или переменная, содержащая изображение числа; Число – переменная целого или дробного типа, которой должно быть присвоено значение Код – возвращаемый процедурой код ошибки (целое число)
BEGIN s1:='123456789'; val(s1,n,code); Writeln(n);END. BEGIN s1:='123456789ABCDE'; val(s1,n,code); Writeln(n);END.
В PascalABC есть более развитый арсенал преобразований как в DELPHI:S:=IntToStr(N) - преобразует целое число к строке;n:=StrToInt(S) - преобразует строку в целое число S:=FloatToStr(r) - преобразует вещественное число к строке R:=StrToFloat(s) преобразует строку в вещественное число. Если преобразование невозможно, то возникает ошибка времени выполнения
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. Из строки берем первый и третий символ и преобразуем в число
Функции ORD и CHR Функция Ord(S) – определяет порядковый номер символа. Функция Chr(i) – определяет символ с порядковым номером i По номеру 255 выводим символ из кодовой таблицы Я
Задача 6. Составьте программу, которая по символу введенному с клавиатуры, выводит его номер в кодовой таблице.
Задача 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
Замечание. Если требуется поиск нескольких символов в строке, то условия заключаем в программные скобки BEGIN … END for i:=1 to length(s) do begin if (s[i]=…… if (s[i]=…… end;
Блок-схема к задаче подсчета букв А в строке
Задача 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-е место О.
Блок-схема к задаче замен буквы А на О
Задача 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 То, что получилось в В перемещаем обратно в А
Блок-схема к задаче удаления букв R из строки
Задача 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. Из всей строки нам нужно выбрать только А и Б И только после осуществлять замену
Блок-схема к задаче замены А на Б и наоборот
Задача 11. Дана строка символов, содержащая знаки препинания. Подсчитать какие и сколько знаков препинания содержит строка. 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. Тело внешнего цикла содержит цикл, отвечающий за перебор символов введенной строки Внешний цикл, осуществляющий перебор знаков записанных в S1
Блок-схема к задаче подсчета знаков препинания