Главная страница
Навигация по странице:

  • Concat(S1[,S2,…,SN])

  • Copy(S

  • Length(S

  • UpCase(C

  • Delete(var

  • Insert(SubS: string; var S: string; Index: integer

  • Str(X [:Width [:Decimals]]; Var S: string)

  • Val(S: String; var X; var Code: integer)

  • Занятие 29 Тема Составление программ с использованием символьных и строковых процедур и функций


    Скачать 40.12 Kb.
    НазваниеЗанятие 29 Тема Составление программ с использованием символьных и строковых процедур и функций
    Дата16.10.2021
    Размер40.12 Kb.
    Формат файлаdocx
    Имя файла29.docx
    ТипЗанятие
    #248692

    Практическое занятие №29

    Тема: Составление программ с использованием символьных и строковых процедур и функций.


    Цель работы: Познакомиться с операторами присваивания, вывода String и Char, научиться владеть этими операторами, научиться грамотно записывать выражения на Паскале.




    Краткие теоретические сведения



    В стандарте языка Паскаль описаны два типа переменных для литерных вели- чин. Это - String и Char. Переменная типа Char может содержать в себе только один единственный символ, тип String предназначен для хранения строковых величин до 255 символов длиною.

    При описании переменной этого типа можно указать максимальное число сим- волов, которое можно занести в нее (это число не должно превышать 255). Например:

    Var S : String[30]; {максимальнаядлинастрокиS30символов}

    St: String; ]; {максимальнаядлинастроки St255символов}

    При использовании строковой переменной, к каждому ее символу можно обра- титься отдельно, указав его порядковый номер.

    Пример 1.


    Вывести посимвольно строку 'primer' Program pr1;

    Var st: string[6]; i: integer; BEGIN

    st:='primer';

    for i:=1 to 6 do write(st[i], ' ');

    END.

    В результате работы данной программы на экран будут распечатаны следующие

    значения: p r i m e r

    Таким образом, первым символом st[1]в переменной stявляется буква p, вто- рым символом st[2]является r , третьим i и т.д.

    Две строковые величины можно объединять. Эта операция называется конкате-нацией и обозначается знаком "+".

    В переменной S будет значение 'abrakadabra'.

    Для конкатенации результат зависит от порядка операндов (в отличие от опера- ции сложения). Следует помнить о том, какой максимальной длины может быть ре- зультирующая переменная, так как в случае превышения значением выражения числа, указанного после String в описании переменной, "лишние" символы в переменную не попадут.

    Строковые величины можно сравнивать между собой. Сравнение строк проис- ходит посимвольно. Большим из двух символов считается тот, код которого больше. Если равны первые символы, то сравнивается следующая пара до тех пор, пока не бу- дет найдено различие. Если начало строк совпадает, а одна из них кончается раньше, то вторая автоматически называется большей.

    Код символа в Паскале можно определить при помощи функции Ord(C), где С - либо непосредственно указанный символ, либо переменная символьного типа, либо один символ строковой переменной.

    Есть и обратная функция, которая возвращает символ по известному коду. Это функция Chr(N), где N - выражение, приводящее к целому числу в интервале от 0 до

    255 (возможные значения кода символа). Очевидно, что Chr(Ord(C))=C, Ord(Chr(N))=N.

    Пример 2.


    Вывести на экран кодовую таблицу:

    Program Pr2; Var I : Byte; BEGIN

    For I:=32 to 255 do Write(I:4, '-',Chr(I))

    END.

    Цикл в программе начинается с 32 потому, что символы с кодами от 0 до 31 яв-

    ляются управляющими и не имеют соответствующего графического представления.

    В Паскале используются следующие процедуры и функции для обработки стро- ковых величин:

    Функция Concat(S1[,S2,…,SN]): string сцепляет (объединяет) строки S1,S2,…,SN. Параметры, указанные в квадратных скобках, не являются обязательными.

    Функция Copy(S: string; Index, Count: integer): string копирует из строки S

    количество Count символов, начиная с символа с номером Index.

    Функция Length(S: string):byte определяет длину строки S.

    Функция Pos(SubS, S: string):byte – отыскивает в строке S первое вхождение подстроки SubS и определяет номер позиции, с которой она начинается. Если подстро- ка не найдена, то выдается 0.

    Функция UpCase(C: char):char преобразует строчную латинскую букву в прописную. Любые другие символы возвращаются без преобразования.

    Процедура Delete(var S: string; Index, Count: integer) удаляет количество

    Count символов из строки S, начиная с символа с номером Index.

    Процедура Insert(SubS: string; var S: string; Index: integer) – вставляет под- строку SubSв строку S, начиная с символа с номером Index.

    Процедура Str(X [:Width [:Decimals]]; Var S: string) – преобразует число Х в строку символов S. Параметры Width и Decimals задают формат преобразования (об- щую ширину поля и количество символов в дробной части соответственно).

    Процедура Val(S: String; var X; var Code: integer) – преобразует строковое значение Sв его численное представление X типа Real или Integer. Параметр Code со- держит признак ошибки преобразования (0 нет ошибки),

    Пример 3.


    Определить длину введенной пользователем строковой величины.

    Program Pr3; Var S : String; BEGIN

    Writeln('Введите последовательность символов'); Readln(S); Writeln('Вы ввели строку из ',Length(S), ' символов')

    END.

    Пример 4.


    Задан список из 6 слов. Определить, сколько слов списка начинается на букву «п». Program Pr4;

    Var s: string[20]; i,k:integer; BEGIN

    k:=0; for i:=1 to 6 do begin

    writeln('Введите слово'); readln(s); if s[1]='п' then k:=k+1;

    end; writeln(k);

    END.

    Пример 5.


    Определить, является ли введенная строка "перевертышем".

    Перевертышем называется такая строка, которая одинаково читается с начала и с конца. Например, "казак" и "потоп" - перевертыши, "канат" - не перевертыш".

    Поступим следующим образом: из введенной строки сформируем другую строку из символов первой, записанных в обратном порядке, затем сравним первую строку со второй; если они окажутся равны, то ответ положительный, иначе - отрицательный. Естественно, предложенный способ решения не является единственно возможным.

    Program Pr5; Var

    S,B : String; I : Byte; BEGIN

    Writeln('Введите строку'); Readln(S);

    B:=''; {ПеременнойBприсваиваемзначение"пустаястрока"}

    For I:=1 to Length(S) do {перебираемсимволыстроки}

    B:=S[I]+B; {СимволыстрокиSприсоединяютсякпеременнойBслева}

    If B=S Then Writeln('Перевертыш') Else Writeln('Не перевертыш') END.

    Пример 6.


    Найти сумму цифр введенного натурального числа.

    Program Pr6;

    Var S : String; I,X,A,C : Integer; BEGIN

    Writeln('Введите натуральное число');

    Readln(S); {Числовводитсявстроковуюпеременную}

    A:=0;

    For I:=1 To Length(S) Do Begin

    Val(S[I],X,C); {Цифрапреобразуетсявчисло}

    A:=A+X {Числасуммируются}

    End;

    Writeln('Сумма цифр равна ',A) END.

    Пример 7.


    Во введенной строке заменить все вхождения подстроки 'ABC' на ‘KLMNO’.

    Program Pr7;

    Var S : String; A : Byte; BEGIN

    Writeln('Введите строку'); Readln(S);

    While Pos('ABC',S)<>0 Do {покаподстрока 'ABC'содержитсявстрокеS }

    Begin

    A:= Pos('ABC',S); {определяемпозициювхожденияподстроки'ABC'встрокуS}

    Delete(S,A,3); {удаляемизстрокиS3 символа,начинаяспозиции А}

    Insert('KLMNO',S,A){вставляемвстрокуSнаэтоместоподстроку'KLMNO'}

    End; Writeln(S) END.

    Пример 8.


    Во введенной строке подсчитать процент вхождения символа ‘o’ и символа ‘e’ (создать функцию для определения процентного содержания заданного символа в строке)

    Program Pr8;

    {функция,определяющаяпроцентвхождениясимволасвстрокуst}

    Function proc_char(st:string;c:char):real;

    Var k, n, I:integer; {k–количествозаданныхсимволов, n – длина строки,I- номер очередногосимволастроки}

    Begin

    n:=length(st); {вычисляемдлинустроки}

    k:=0; for I:=1 to n do {перебираемсимволыстроки}

    if st[I]=c then k:=k+1; {еслиочереднойсимволстрокиравензаданному

    символу,тоувеличиваемсчетчик k}

    proc_char:=k/n*100; {определяемпроцентзаданныхсимволов}

    End;

    Var st: string; p1,p2: real;

    BEGIN {основнаяпрограмма}

    write('st=');readln(st); {вводимстроку}

    p1:=proc_char(st,'o'); {определяемпроцентноесодержаниесимвола ‘o’}p2:=proc_char(st,'e'); { определяемпроцентноесодержаниесимвола ‘e’}writeln('o-', p1:2:1,'%'); {выводрезультата}

    writeln('e-', p2:2:1,'%'); END.

    Пример 9.


    Задан список из 8 слов. Найти самое короткое слово в списке. Если таких слов несколько, то распечатать их в один столбец.

    Решение поставленной задачи сводится к нескольким этапам: ввести список слов в виде массива строковых переменных; подсчитать длину каждой строки; опре- делить наименьшую из длин; распечатать те строки массива, длина которых совпада- ет с наименьшей.

    Program Pr9;

    Var s: array[1..8] of string[20]; n: array[1..8] of integer;

    i, min: integer; BEGIN

    for i:=1 to 8 do begin

    writeln('Введите слово'); readln(s[i]); n[i]:=length(s[i]);
    END.

    end;

    min:=n[1]; for i:=2 to 8 do if min>n[i] then min:=n[i]; for i:=1 to 8 do if n[i]=min then writeln(s[i]);
    В данной программе для обозначения слов используется массив строковых пе- ременных s, для обозначений соответствующих им длин слов целочисленный массив

    n.Наименьший элемент массива nхранится в виде переменной min.

    Пример 10.


    Задана строка из двух слов, разделенных пробелом. Поменять в данной строке слова местами.

    Program Pr10; Var s: string[40];

    s1,s2: string[20]; i,n: integer;

    BEGIN

    writeln('Введите строку'); readln(s);

    n:=length(s); i:=pos(' ', s);

    s1:=copy(s, 1, i); s2:=copy(s, i+1, n-i); s:=s2 + ' ' + s1; writeln(s);

    END.

    В данной программе переменная sслужит для обозначения строки из двух слов,

    переменные s1 и s2 – для обозначения первого и второго слова строки соответствен- но. Алгоритм решения заключается в том, что сначала с помощью функции Pos выяс- няется, каким по счету символом в строке s находится пробел. Далее в строке выделя- ются две подстроки: одна включает все символы левее пробела (первое слово), другая

    – правее пробела (второе слово). В конце программы слова сцепляются в обратном по- рядке с использованием разделяющего их пробела.

    Контрольные вопросы


    1. Понятие строки. Описание строкового типа данных.

    2. Представление строки в Паскале. Обращение к символу строки. Длина строки.

    3. Стандартные строковые процедуры и функции в языке Паскаль.

    4. Понятие строковых выражений.

    5. Операции со строковыми данными.

    6. Примеры программ работы со строками.


    написать администратору сайта