Меню
Разработки
Разработки  /  Информатика  /  Уроки  /  10 класс  /  Строки-практическая работа

Строки-практическая работа

Практическая работа предназначена для отработки основных приемов и алгоритмов для работа с символьными строками в языке программирования PascalABC в 10 классе.

23.04.2017

Содержимое разработки

Составитель Енина ЗИ

Строки- практическая работа

1. Действия с отдельными символами



Описание переменных и констант:

Var s: String; - строка, длина которой не превышает 255 символов,

s1: String[10]; - строка, длина которой не превышает 10 символов.

Const Name='Svetlana';

Длина строки S (количество символов в строке S): Length(S)

Обращение к отдельным символам:

S[1] - первый символ строки S, S[3] - третий символ строки S,

S[Length(S)] - последний символ строки S, S[k] - k-тый символ строки S.

Добавление-замена символов:

Добавить в конец строки S восклицательный знак: S:=S+'!';

Добавить в начало строки S три вопросительных знака: S:='???'+S;

Третий символ строки S заменить на звездочку: S[3]:='*';



Пример 1.1. a) Чему равна длина введенной строки?

b) Чему равен первый символ строки?

c) Сколько символов 'V' в строке?

d) Есть ли в строке хотя бы один символ 'V'?

e) Состоит ли строка только из символов 'V'?



Разбор примера 1.1.


Program prim_1_1;

Uses Crt;

Var S: String;

x, k: Integer;

begin

ClrScr;

Write('S='); Readln(S);

{a} Writeln('длина S =', Length(S));

{b} Writeln('S[1]=',S[1]);

{c} x:=0;

For k:=1 To Length(S) Do

If S[k]='V' Then

inc(x);

Writeln('x=',x);

{d} If x0 Then Writeln('Есть V')

Else Writeln('Нет V');

{e} If x=Length(S) Then Writeln('Только V')

Else Writeln('Не только V');

end.



S - строка

x - количествово символов 'V' и

k - переменная цикла - целые числа


Запросить строку S

Длина строки

Первый символ

x - количество символов 'V'

В цикле просматриваем каждый символ S[k]; если это 'V',

то x увеличивается на 1


Если x0, то 'V' в строке есть


Если x = длина строки (Length),

то строка состоит только из 'V'.




Пример 1.2. Во введенной строке заменить все вопросительные знаки на восклицательные.



Program prim_1_2;

Uses Crt;

Var S: String; k: Integer;

begin

ClrScr; Write('S='); Readln(S);

For k:=1 To Length(S) Do

If S[k]='?' Then S[k]:='!';

Writeln('new S=', S);

end.






В цикле просматриваем все символы строки S

если k-тый символ '?', то присваиваем ему

новое значение '!'



Для строк определены операции сравнения (сравниваются коды символов), например, 'Alina''Aleksandra' (коды латинских букв растут в алфавитном порядке).

Если k-тый символ строки S - заглавная латинская буква…:

If (S[k]='A') AND (S[k]или If S[k] in ['A'..'Z'] Then…

Если k-тый символ строки S - цифра…:

If (S[k]='0') AND (S[k]или If S[k] in ['0'..'9'] Then…



Пример 1.3. Каких символов в строке S больше: заглавных или строчных латинских букв?



{фрагмент программы}

x1:=0; x2:=0;

For k:=1 To Length(S) Do

If S[k] in ['A'..'Z'] Then inc(x1)

Else If S[k] in ['a'..'z'] Then inc(x2);

If x1x2 Then Writeln('больше заглавных')

Else If x2x1 Then Writeln('больше строчных')

Else Writeln('заглавных и строчных поровну');

x1 - количество заглавных букв,

x2 - количество строчных букв

В цикле просматриваем все символы

Если S[k] лат. загл., растет x1,

если лат. стр.,- растет x2

После цикла сравниваем значения x1 и x2



Пример 1.4. Есть ли в строке S одинаковые символы?



{ фрагмент программы }

x:=0;

For k:=1 To Length(S)-1 Do

For i:=k+1 To Length(S) Do

If S[i]=S[k] Then inc(x);

If x0 Then Writeln('Yes')

Else Writeln('No');


x - количество повторяющихся символов

Каждый символ, кроме последнего,

сравниваем со всеми последующими

Если они одинаковы, x растет

Если x0, то одинаковые есть; если x=0, то нет.

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




2. Действия с фрагментами строки



Copy(S,k,x) - подстрока строки S начиная с k-того символа длины x:

Pos(S1,S) - позиция подстроки S1 в строке S;

(если фрагмента S1 в строке S нет, то Pos(S1,S)=0)

Delete(S,n,x) - удалить из строки S подстроку начиная с n-ого символа длины x;

Insert(S1,S,n) - вставить строку S1 в строку S начиная с n-той позиции.



Конкретные примеры помогут понять, как работают эти функции и процедуры.



Фрагмент программы (S, S1, S2: String; x1,x2,x3: Integer;)

Результат

S:='crocodile'; S1:=Copy(S,4,3); S2:=Copy(S,7,2);

S1='cod', S2='il'

S:='crocodile'; x1:=Pos('roc',S); x2:= Pos('il',S); x3:= Pos('rod',S);

x1=2, x2=7, x3=0

S:='crocodile'; S1:=S; Delete(S,4,2); Delete(S1,1,7);

S='crodile', S1='le'

S:='crocodile'; Insert('roro',S,6);

S:='crocororodile';



Пример 2.1. Программа запрашивает существительное первого склонения (женский род) и склоняет его (без проверки).



Write ('S: '); Readln(S);

S1:= Copy(S,1,Length(S)-1);

Writeln('И. ',S);

Writeln('Р. ',S1+'ы');

Writeln('Д. ',S1+'е');

если S='лиса', то

S1='лис' - корень слова

Именительный: ‘лиса’

Родительный: ‘лисы’

Дательный: ‘лисе’

...



Пример 2.2. a) Есть ли во введенной строке имя 'Anna'?

b) Сколько раз оно встречается?



Program prim_2_2;

Uses Crt;

Var S: String; x, k: Integer;

begin

ClrScr; Write('S='); Readln(S);

{a} If Pos('Anna',S)0 Then Writeln('Yes')

Else Writeln('No');

{b} x:=0;

For k:=1 To Length(S)-3 Do

If Copy(S,k,4)='Anna' Then inc(x);

Writeln('x=', x);

end.





Запросить строку

Ответить на первый вопрос очень легко


Ответ на второй вопрос ищем в цикле

S='Anna11Anna22Anna'

S[13]=S[Length(S)-3]

Примечание. Алгоритм можно улучшить.




Пример 2.3. Во введенной строке заменить все фрагменты 'cat' на 'mouse'.



Program prim_2_3;

Uses Crt;

Var S: String; p: Integer;

begin

ClrScr; Write('S='); Readln(S);

p:=Pos('cat',S);

While p0 Do

begin

Delete(S,p,3);

Insert('mouse',S,p);

p:=Pos('cat',S);

end;

Writeln('new S=', S);

end.





Запросить строку

p - позиция фрагмента 'cat' в строке S

Цикл: пока в строке S есть фрагменты 'cat'


удалить 'cat' из S (3 символа, начиная с p)

вставить 'mouse' на то же место

найти следующий фрагмент 'cat'

конец цикла

Примечание. Удалить из S фрагмент S1, начинающийся с p: Delete(S,p,Length(S1));



Пример 2.4. Запросить строку, в которой записано время в формате hh:mm:ss. Записать его в формате hh ч. mm мин. ss сек.



Program prim_2_4;

Uses Crt;

Var S,S1: String;

begin

ClrScr; Write('S='); Readln(S);

S1:=Copy(S,1,2)+' ч. '+

Copy(S,4,2)+' мин. '+

Copy(S,7,2)+' сек. ';

Writeln('S1=', S1);

end.




время: 03:13:54

номера символов: 12345678


Примечание. Возможны и другие решения.


2


-75%
Курсы повышения квалификации

Исследовательская деятельность учащихся

Продолжительность 72 часа
Документ: Удостоверение о повышении квалификации
4000 руб.
1000 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Строки-практическая работа (32.14 KB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт