Pos(Pattern,Sourse:String):Integer




Перечислимый (перечисляемый) тип данных

Перечислимый тип = ( Идентификатор {, Идентификатор} ).

Перечисляемый тип задается списком значений, которые может принимать переменная этого типа.

type Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

Color = (White, Red, Black);

Name = (Anna, Oleg, Vova, Gala);

var WorkDay: Day; NameBoy, NameGirl: Name;

Continent: (Africa, Asia, America, Australia, Europe, Antarctica)

begin

WorkDay:=Mon;

NameBoy:=Oleg;

Continent:=Asia;

end.

Идентификаторы всех элементов перечисляемого типа интерпретируются как константы. Например, White, Red, Black – константы типа Color, а Anna, Oleg, Vova, Gala - константы типа Name.

Идентификатор, указанный в списке перечислимого типа, может присутствовать только в одном описании и один раз. Например, следующее ошибочно:

type Boy = (Sasha, Vova, Oleg);

Girl = (Anna, Sasha, Lena);

Name = (Lora, Oleg, Vova, Gala, Lora);

Оператор присваивания для переменной перечислимого типа допустим, если справа стоит значение из описания типа именно этой переменной, например:

WorkDay:=Mon; Continrnt:=Africa; Но ошибочно: NameBoy:=Red;

Вопрос: а такое присваивание: Color:=Red; - верно?

Идентификаторы в списке упорядочены целыми положительными числами, начиная с 0, поэтому к ним применимы функции Pred, Succ, Ord.

Например, следующие выражения истинны:

Ord(Asia)=1; Succ(Vova)=Gala; Pred(Sat)=Fri;

К переменным перечислимого типа не применимы ни арифметические функции, ни процедуры Read и Write!

Перечислимый тип данных употребляется для улучшения читабельности программы.

 

Ограниченный (диапазонный, интервальный) тип данных

 

Ограниченный тип = Ограничение.. Ограничение.

Ограничение = Константа порядкового типа.

Примеры: var X:1..5; Y: ‘A’..’D’; Z: -100..100;

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

Нижнее Ограничение не должно превышать верхнее.

К переменным ограниченного типа применимы функции Ord, Pred, Succ.

Ограниченный тип данных употребляется для контроля значений переменных, а также для улучшения наглядности программы.

Для подключения контроля диапазона используется директива компилятору {$R+}, для отключения - {$R-}.

const Min = 16; Max = 75;

type Days = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);

WorkDay = Mon.. Fri; FreeDay = Sat.. Sun; Letter = ‘A’.. ‘Z’;

var Day: Days; Interval: Min.. Max; A: ‘0’.. ‘9’; B: 0.. 9; L: Letter;

begin

{$R+}

Write(‘введи большую английскую букву’};

Read(L);

case L of

‘A’.. ‘Z’: Writeln(‘ - это большая английская буква!’);

else: Writeln(‘ - это НЕ большая английская буква! ’);

end;

{$R-}

repeat

Write(‘введи любую цифру => ’};

Readln(B);

until (B>=0) and (B<=9) and (B-Trunc(B)=0)

Writeln(“Вы ввели цифру ”, B);

end.

Задача 1 Написать программу, которая по введенному номеру дня недели определяла бы предыдущий и последующий день, и для каждого из этих трех дней выясняла, выходной это или рабочий день.

 

Program Z1; Uses Crt; type Days=(Mon,Tue,Wed,Thu,Fri,Sat,Sun); var Day,Yesterday,Today,Tomorrow:Days; i:Byte; begin repeat ClrScr; Writeln('1 - понедельник'); Writeln('2 - втоpник'); Writeln('3 - сpеда'); Writeln('4 - четвеpг'); Writeln('5 - пятница'); Writeln('6 - суббота'); Writeln('7 - воскpесенье'); Write('Введи номеp дня => '); Readln(i); until (i>0) and (i<8); case i of 1: Today:=Mon; 2: Today:=Tue; 3: Today:=Wed; 4: Today:=Thu; 5: Today:=Fri; 6: Today:=Sat; 7: Today:=Sun; end; if Today=Sun then Tomorrow:=Mon else Tomorrow:=Succ(Today); if Today=Mon then Yesterday:=Sun else Yesterday:=Pred(Today); i:=1; repeat case i of 1:begin Write('вчеpа был день '); Day:=Yesterday; end; 2:begin Write('сегодня '); Day:=Today; end; 3:begin Write('завтpа будет '); Day:=Tomorrow; end; end; case Day of Mon: Write(' понедельник'); Tue: Write(' втоpник'); Wed: Write(' сpеда'); Thu: Write(' четвеpг'); Fri: Write(' пятница'); Sat: Write(' суббота'); Sun: Write(' воскpесенье'); end; case Day of Mon.. Fri: Writeln(' - pабочий день '); Sat, Sun: Writeln(' - выходной день'); end; i:=i+1; until i>3; end.

Строковый тип данных

 

Строковый тип данных = string [[целое без знака]].

 

Строковый тип данных языка Паскаль позволяет в программе задавать структуру данных, которая называется строкой (стрингом). Строка очень похожа на линейный массив, состоящий из символов, но в отличие от линейного массива, в среде TP v.7.0, программист может не указывать длину строки.

var S:String;

begin

S:=’флейта’;

Write(S); => флейта

end.

Для работы со строками в модуле System Turbo Pascal есть следующие подпрограммы:

Подпрограммы для работы со строками

 

Сoncat(s1,s2,...sn):string

возвращает строку, полученную конкатенацией строк s1,s2,…sn

Pos(Pattern,Sourse:String):Integer

возвращает номер символа, начиная с которого Pattern входит в Sourse. Если вхождения нет, функция возвращает 0.

Pos('23','12345') => 2

Pos('54','45678') => 0

Pos('23','23 12345') => 1

3. Length(S:String):Integer;

возвращает длину строки S.

Length(‘мама’) => 4

4. Copy(S:String; Pos,Len:Integer):String;

возвращает строку, полученную из Len символов строки S, на­чиная с позиции Pos. Если Pos больше, чем длина строки S, то воз­вращается пустая строка. Если значение Len+Pos больше, чем длина строки S, то возвращаются символы, принадлежащие строке S.

Copy('window',1,3) => 'win'

Copy('window',7,1) => ''

Copy('window',6,4) => 'w'

5. Delete(var S:String; Pos,Len:Integer);

убирает из строки S Len символов, начиная с Pos. Если Len больше длины S, то ничего не происходит. Если значение Pos+Len больше длины строки, то удаляются все символы до конца строки.

Delete('bravo',2,2) => 'bvo'

Delete('bravo',10,1)=>'bravo'

Delete('bravo',5,4)=>'brav'

6. Insert(S:String;var D:String;Pos:Integer);

вставляет строку S в строку D перед символом с номером Pos. Если Pos больше длины D, то S и D соединяются. Если длина результа­та при этом больше длины D, то в D записываются самые левые символы. A:='bravo'

Insert('DD',A,3) => 'brddavo'

Insert('KK',A,10) => 'bravokk'

Insert('AL',A,1) => 'albravo'

7. Str(I:Integer;var S:String); Str(R:Real;var S:String);

преобразует S или R из числа в строку S. I и R могут быть записаны с использованием формата.

var S:String[4]; K:Real;

begin

k:=45.678;

Str(45,S); Write(S) => '45'

Str(k:9,S); Write(S) => '4.568E+02'

Str(45:3,S); Write(S) => '_45'

Str(K:8,S); Write(S) => '4.47E+02'

Str(45:5,S); Write(S) => '___4'

end

8. Val(S:String; var R:Real; var P:Integer);

Val(S:String; var I,P:Integer);

преобразует строковую переменную S в число. Если в строке S ошибок нет, то P=0; иначе P присваивается номер ошибочного символа.

 

Пример 1

{Программа в предложении Stroka

все сочетания X меняет на Y}

var Stroka, X,Y:String;

N:Integer;

begin

Write('Введи предложение =Ю ');

Readln(Stroka);

Write('Что заменим? ');

Readln(X);

Write('Чем заменим? ');

Readln(Y);

N:=Pos(X,Stroka);

while N>0 do

begin

Delete(Stroka,N,Length(X));

Insert(Y,Stroka,N);

N:=Pos(X,Stroka);

end;

Writeln;

Write('Получили -');

Writeln(Stroka);

end.

 

Пример 2

{Программа в предложении Stroka

все слова выводит наоборот}

var Stroka, Slovo:String;

I:Integer;

begin

Write('введи предложение=> ');

Readln(Stroka);

for i:=1 to length(Stroka) do

if Stroka[i]=' ' then

begin

Write(Slovo);

Write(' ');

Slovo:='';

end

else

Slovo:=Stroka[i]+Slovo;

Write(Slovo);

end.

Пример 3

{Программа выясняет, является ли строка B перестановкой символов строки A}

var StrokaA,StrokaB:String; N,i:Integer; Priznak:Boolean;

begin

Write('Введи строку A=> '); Readln(StrokaA);

Write('Введи строку B=> '); Readln(StrokaB);

if Length(StrokaA)=Length(StrokaB)

then Priznak:=True else Priznak:=False;

if Priznak then

begin

i:=1;

while (i<=Length(StrokaA)) and Priznak do

begin

N:=Pos(StrokaA[i],StrokaB);

if N>0 then Delete(StrokaB,N,1)

else Priznak:=False;

i:=i+1;

end;

end;

Writeln; Write('Символы строки А - ');

if Priznak then Writeln(' перестановка')

else Writeln('не перестановка');

Writeln('символов строки B');

end.

Пример 4

{Программа выясняет, является ли последовательность цифр

номером счастливого билета}

uses Crt;

var i, SumLeft,SumRight,Left,Right,P1:Integer; Word:String; B:Char;

begin

repeat

i:=1; Word:=''; Writeln;

Write('введи номер билета =>');

repeat

repeat

B:=ReadKey;

until ((B>='0')and(B<='9')) or (Ord(B)=13);

if Ord(B)<>13 then

begin

Word:=Word+B; Write(Word[i]);

end;

i:=i+1;

until Ord(B)=13;

until not(Odd(Length(Word)));

SumLeft:=0; SumRight:=0;

i:=1;

while i<=Length(Word) div 2 do

begin

Val(Word[i],Left,P1);

Val(Word[Length(Word)-i+1],Right,P1);

SumLeft:=SumLeft+Left;

SumRight:=SumRight+Right;

i:=i+1;

end;

Writeln;

if (SumLeft=SumRight) and (SumLeft<>0)

then Write('это СЧАСТЛИВЫЙ БИЛЕТ!')

else Writeln(' нет в жизни счастья!');

end.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: