СИМВОЛЬНЫЙ И СТРОКОВЫЙ ТИПЫ ДАННЫХ




 

Цель работы:

- изучить приемы работы с символьными и строковыми типами данных;

- приобрести навыки составления, отладки и тестирования программ;

- разработать пользовательский модуль работы со строками и символами.

 

 

1. Введение

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

1) множество допустимых значений переменной;

2) формат внутреннего представления на ЭВМ и объем памяти, занимаемый одним значением;

3) набор операций, которые можно применять к значениям данного типа.

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

В языке Паскаль данные принято делить на простые и структуированные. Простой тип данных имеет одно значение и поэтому называется также скалярным типом. Он является базовым для структуированных (или сложных, составных) типов данных, таких как массивы, множества, записи, файлы.

К простым типам, в свою очередь, относятся символьные, строковые, логические, целые, перечисляемые, диапазонные и вещественные типы данных. Все они, кроме вещественных, относятся к порядковому типу, т.е. множеству значений, каждое из которых имеет свой порядковый номер.

Помимо стандартных типов, определяемых по умолчанию, в языке Паскаль могут создаваться собственные, пользовательские типы. Для этого в разделе описаний записывается:

 

type <имя типа> = <описание типа>;

 

И далее в разделе описания переменных следует:

 

var <список переменных>: <имя типа>;

 

В последних версиях языка допускается использование так называемых типизированных констант, которые в отличие от констант, могут изменять свое значение в процессе выполнения программы, т.е. ведут себя как переменные, но задаются в разделе описания констант с указанием после имени ее типа. Например,

 

const f1: boolean = true;

a: real = pi/180;

 

Использование типизированных констант избавляет от необходимости присвоения начальных значений переменным непосредственно в исполняемой программе. Кроме того, значения типизированных констант, измененные при выполнении процедуры, сохраняют свои значения к следующему запуску процедуры и могут быть, таким образом, использованы для сохранения внутренних параметров процедур.

В этой работе остановимся подробнее на изучении стандартных символьных и строковых типов данных.

 

 

2. Символьный тип данных.

Символьный (или литерный) тип данных задает конечное и упорядоченное множество символов, каждый из которых занимает 1 байт памяти. В одном байте возможно 28=256 комбинаций из двоичных 0 и 1. Каждому символу соответствует свой числовой код. Существует много таблиц кодировок символов, наиболее распространенная из них – американский стандартный код для обмена информацией ASCII (American Standard Code Information Interchange). Первая половина этой таблицы (символы с кодами от 0..127) идентична для всех IBM-совместимых компьютеров. Так, арабским цифрам от 0 до 9 соответствуют коды от 48 до 57, прописным буквам латинского алфавита коды от 65 до 90, строчным буквам от 97 до 122. Вторая половина таблицы ASCII отведена для символов национальных алфавитов, псевдографики и др.

Переменные символьного типа задаются в разделе описания как переменные типа Char (от character – символ). Например,

 

var c1, c2: char;

 

Переменная типа char хранит только один символ.

Значения для этого типа переменных могут быть заданы двумя способами:

 

1) через апостроф, например, c1:=’g’; c2:=”n”;

2) через знак диеза (#) и номер символа в кодовой таблице ASCII, например, c1:=#103; c2:=#110.

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

 

Chr (x:byte): char – преобразует значение целочисленного типа в символьный в соответствии с таблицей ASCII;

Ord(x):longint – возвращает порядковый номер, соответствующий значению х порядкового типа;

Pred(x) – возвращает предшествующее значение аргумента, причем тип результата соответствует типу аргумента;

Succ(x) – возвращает последующее значение аргумента.

 

При работе с символьным типом полезна также стандартная функция

Upcase(x:char): – преобразует строчные буквы латинского алфавита в прописные, но не изменяет другие символы.

 

Функции Chr и Ord обратны по отношению друг к другу:

 

Сhr (Оrd(x))=x;

Ord (Сhr(x))=i;

Chr (Оrd(x)-1)=Pred(x);

Chr (Оrd(x)+1)=Succ(x).

 

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

Символьный тип данных удобно использовать при организации диалога компьютер-пользователь, в операторах цикла и операторе выбора case.

Заметим, что в таблице ASCII кроме обычных символов имеются специальные управляющие символы, занимающие первые 32 позиции. Они представляют собой команды, приводящие к выполнению определенных действий. Исторически они обозначались двух- или трехбуквенными сокращениями. Например, мнемоническое обозначение Esc, соответствует 27 коду ASCII – символ Escape, HT – горизонтальная табуляция, расположена в коде 9. Существует несколько способов обращения к управляющим символам:

 

1. по его ASCII-коду;

2. по Ctrl-последовательности, т.е. коду, порождаемому одновременным нажатием клавиш Ctrl и какой-либо другой клавиши; например, Ctrl+H (или это обозначается как ^H);

3. с помощью функции Chr(i).

 

Например,

1. ch:=10; ch:=^J; ch:=chr(10)

эти операторы присваивают символьной переменной ch одно и тоже символьное значение, соответствующее переводу строки (мнемоническое обозначение LF).

В качестве демонстрационного примера рассмотрим фрагмент программы, работающей как калькулятор:

 

var x, y, z: real; operator: char;

begin

writeln (‘Введи число х=’); readln(x);

writeln (‘Действие +, -, *, /?’); readln(operator);

writeln (‘Введи число y=’); readln(y);

case operator of

‘+’: z:= x+y;

‘-‘: z:= x-y;

‘*’: z:=x*y;

‘/’: z:=x/y;

end;

writeln (‘z=’,z); readln

end.

 

Другой демонстрационный пример попробуйте разобрать самостоятельно:

 

var ch:char; k,m:byte;

begin

readln(ch); k:=0;

repeat

m:=Ord(ch) – Ord(‘0’);

k:=10*k+m; readln(ch)

until not ((ch>=’0’) and (ch<=’9’));

writeln(‘ k=’,k); readln

end.

 

Проведите отладку и тестирование указанных фрагментов программ. Оформить их в виде подпрограмм, проведя предварительно улучшение сервиса.

 

 

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

Последовательность символов можно представить в виде переменной типа массив array[1..n] of char. Однако в языке Паскаль вводится стандартный символьный тип данных string.

Например, var st1:string;

st2:string[8];

 

где целое число в квадратных скобках задает максимальную длину строки. В данном примере длина переменной st2 равна 8. Если длина строки не указана, как для переменной st1, то она по умолчанию автоматически принимается равной максимально возможному значению 255.

Все символы, номера которых превосходят заказанную при объявлении длину строки, будут отброшены. Значения строковых переменных заключаются в апострофы, например, st2:=’frequency’. Поскольку ее длина равна 8, то фактическое значение переменной st2 будет ’frequenc’.

В языке Паскаль существует такое понятие как текущая длина строки, которая показывает число реально используемых символов строки, но не превосходящих указанной в описании. Эта информация хранится в нулевом байте памяти, например st2[0], и автоматически обновляется при изменении длины строки.

Поскольку в каждой ячейке строки может храниться только переменная типа char, в нулевую ячейку записывается символ, номер которого в таблице ASCII совпадает с текущей длиной строки. В нулевую ячейку можно записать любой символ, задавая, таким образом, принудительно длину строки.

Из сказанного видно, что переменные типа string и char являются совместными типами с учетом того, что в переменных char может храниться только одни символ.

Длину строки можно определить с помощью функций Length(st2) или Ord(st2[0]). Стандартная функция Length считает все символы, включая и пробелы.

Строки можно сравнивать при помощи операций отношений =, <, <= и т.д. Сравниваются при этом коды символов, начиная с первых символов строк. Две строки будут равными, если они равны оп длине и совпадают посимвольно. Более короткая строка всегда меньше более длиной. Например, ‘150’ < ‘160’; ‘Max’< ‘mini’.

Строковый тип может использоваться для определения констант и типизированных констант. В первом случае конкретный тип строки определяется определенной длиной заданного текста, а во втором – описанием типа. Например, типизированная константа

const s1:string[50]=’Ваня’;

задает строку типа string[50], но имеет текущую длину равную 4.

Строковый тип данных похож на одномерный массив тем, что имеет определенную длину и к каждому символу которого можно обратиться по его номеру st2[i]. Однако имеется и ряд различий, например, вывод строк производится не поэлементно, как в массиве, а сразу целиком. Для символьных типов данных существует понятие текущей длины строки, имеется набор стандартных процедур и функций для их обработки.

4. Стандартные подпрограммы обработки строк.

Остановимся подробнее на некоторых стандартных функциях и процедурах для работы со строковыми переменными.

1.С функцией, определяющей длину аргумента str строкового типа, мы уже знакомы:

Length(str:string):byteю.

 

2. Функция Pos(substr, str:string):byte определяет позицию подстроки substr в строке str.Результат этой функции – целое число типа byte, равное номеру первого элемента, с которого начинается вхождение подстроки substr в строке str. Если такой подстроки нет, то значение функции равно 0.

Например, следующий фрагмент

st1:=’First’; st2:=’SetFirst’; k1:=Pos(st1,st2);

дает значение k1 равное 4.

 

3. К строкам можно применять операцию конкатенации – последовательное объединение нескольких строк (склеивания). Она осуществляется оператором конкатенации, обозначаемой знаком “плюс”:

 

st:=st1+st2+…+stn;

или функцией

st:=Concat(st1,st2,…,stn).

Длина результирующей строки st не должна превышать 255 литер.

 

4. Функция Copy(str:string, kstart,m:integer): string позволяет копировать m символов строки str, начиная с kstart символа. Исходная строка при этом не изменяется. Например,

gamma:= ‘SetColor’; beta:=Copy(gamma, 4,5); writeln(beta);

дает значение переменной beta=’Color’.

 

5. Процедура Delete (var str:string, kstart, m:integer) используется для удаления m символов строки str, начиная с позиции ksatr. Например,

alfa:=’element’;

Delete (alfa,4,3);

дает результат alfa=’elet’.Текущая длина строки уменьшается на m символов, оставшиеся в строке символы смещаются влево.

 

6. Процедура Insert(instr:string, var str:string, kstart:integer) позволяет делать вставку строки instr в строку str, начиная с позиции kstart. Например,

beta:=’123 ‘; alfa:=’element’;

Insert(beta, alfa,5);

дает результат alfa=’123_element’. В процедурах Delete и Insert параметр kstart может быть константой, переменной и любым выражением, имеющим целочисленное значение меньшее 255.

7. Процедура Str(n [:width[:decimals]]; var strn:string) переводит числовое значение n в строковое и присваивает результат строке strn. Здесь n – значение числового типа, strn – строковое значение, представляющее собой символьное изображение значения переменной n.

Например, Str(4.52, st1) переводит вещественное число в строковое st1=’4.52’.

8. Процедура Val (strn:sting; var n; var errcode:integer) выполняет обратное преобразование, переводит строковое значение strn в числовое n. Параметр errcode равен нулю при успешном выполнении преобразования. Если в strn имеются символы, недопустимые при записи числа, то значение параметра errcode равно номеру позиции с ошибочно заданным символом. Например,

Val(‘12345’, n,k);

здесь n = 12345; k=0.

Val (‘12_45’ n, k);

дает значение параметра k=3.

 

5. Экспериментальный раздел занятия.

1.Пусть задан не отформатированный текст. Требуется вставить пробел после точки и записать предложение с прописной буквы.

 

var str:string; k:integer;

begin

writeln(‘Введите текст’); readln(str);

for k:=1 to Length(str) do

if Copy(str,k,1)=’.’

then begin Insert(‘ ‘,str,k+1); str[k+2]:= UpCase(str[k+2] end;

writeln(str); readln

end.

 

Программа будет работать только с латинским шрифтом. Переделайте её так, чтобы можно было вести обработку кириллицы. Оформить её в виде подпрограммы и ввести требуемую на Ваш взгляд модификацию.

2. По правила машинописи после запятой в тексте всегда ставится пробел. Следующая программа вставляет недостающие пробелы.

 

var i: integer; s: string;

Begin

writeln (‘Введите текст’); readln (s);

i:=1;

while i<Length(s) do begin

if (s[i]=’,’) and not (s[i+1]=’ ‘)

then Insert(‘ ‘,s,i+1); Inc (i)

end;

writeln(s);

End.

 

Почему для организации цикла выбран оператор While, а не For? Почему в теле цикла нельзя использовать функцию Pos(“ “, s)? Обратите внимание на то, что если запятая — последний символ текста, то мы не добавляем пробел. Измените программу для исправления случаев нарушения правила “после символов “!”, “?” должен стоять пробел, а затем текст начинается с прописной бук­вы”. Вспомните еще ряд правил и традиционных ошибок и модифицируйте программу для их исправления.

 

3. Давайте разберемся со следующей рекурсивной процедурой, осуществляющей реверс введенного слова.

 

type strtype = string[20];

var strread,strrev:strtype;

function Reverse(str:strtype):strtype;

var firstch:char; rrest:strtype;

begin

if Length(str)=1

then Reverse:=str

else begin

firstch:=str[1]; Delete(str,1,1);

rrest:=Reverse(str);

Reverse:=Concat(rrest,firstch)

end

end;

Begin

repeat

writeln('Input text.Word endf - end'); readln(strread);

strrev:=Reverse(strread); writeln(strrev)

until strread = 'endf';

readln

End. ­

Поэкспериментируйте с данной программой. Исследуйте «слова-перевертыши» (палиндромы), которые читаются одинакова слева направо и справа налево: «доход», «заказ», «шалаш» и т.д.

Существуют целые предложения, стихи и рассказы – палиндромы. Приведем несколько смешных фраз: «торт с кофе не фокстрот», «удавы рвали лавры в аду», «Аргентина манит негра», «я и ты будем в аду бытия», «я не мил и не женили меня».

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

 

var x,y,z:string; k:integer;

function UpRusCase(w:char):char;

{Преобразование прописных русских слов в заглавные}

begin

if (w>=’ю’) and (w<=’ч ’)

then UpRusCase:=Chr(Ord(w)+32)

UpRusCase:=w

end;

Begin

y:=’ ’; z:=’ ‘;

writeln(‘Введите исседуемую фразу’); readln(x);

for k:=1 to Length(x) do

if (Copy(x,k,1)>=’ю’) and (Copy(x,k,1)<=’ч’)

then begin z:=Concat(z,UpRusCase(Copy(x,k,1)));

y:=Concat(UpRusCase(Copy(x,k,1)),y)

end;

if y=z

then writeln(‘да, палиндром’)

else writeln(‘увы, не палиндром’);

readln

End.

 

Поэкспериментируйте с данными программами.

4. Пусть дана строка. Будем считать ее отрывком текста. Группы символов, разделенных одним или несколькими пробелами, назовем словами. Пробелы могут находиться как в начале текста, так и в конце. Требуется выделить слова из текста и каждое слово записать в соответствующий элемент массива. Приведенная ниже программа решает эту задачу. Выполните ее в пошаговом режиме с использованием отладчика, наблюдая за изменением значений переменных.

 

const n=20; m=10; {Количество слов в тексте и количество букв в слове}

type Tstring=string[m];

var a: array[1..n] of Tstring; s: string; k, i: Integer;

procedure DelPr (var s: string); { Удаляем пробелы из текста }

begin

while (s[1]=’ ‘) and (s<>’ ‘) do Delete (s,1,1)

end;

function GetWord (var s: string): Tstring;

{Выделяем слово, удаляем его из текста и убираем пробелы после слова}

begin

GetWord:=Copy(s,1,Pos(‘ ‘,s)-1);

Delete (s,1,Pos(‘ ‘,s));

DelPr(s)

end;

Begin

writeln (‘Введите текст’); readln (s);

s:=s + ’ ‘; {Добавляем символ пробела в конец текста. Зачем?}

DelPr(s); {Удаляем пробелы в начале текста }

k:=0;

while s<>’ ’ do begin {Пока текст не пустой }

Inc(k); a[k]:=GetWord(s) {Берем слово из текста }

end;

for i:=1 to k do writeln (A[i]); readln

End.

 

Удалите вызов процедуры DelPr(s) из основной программы, а в функции GetWord переставьте этот вызов в ее начало. Что изменится в работе программы? На каких исходных данных она не будет правильно работать? Что произойдет, если в конец текста не добавлять символ пробела? В процедуре DelPr измените цикл

while (s[1]=’ ‘) and (s<>’ ‘) do Delete (s,1,1)

на

while (s[1]=’ ‘) do Delete (s,1,1)

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

 

5.Даны две строки Х и Y. Назовем расстоянием r между строками Х и Y количество символов, которыми Х и Y различаются между собой. То есть нас интересует минимальное количество символов, которые необходи­мо добавить в строки Х и Y для того, чтобы после тако­го добавления они состояли из одних и тех же симво­лов. При этом существенно количество символов, но не их порядок. Например Х= 'abcd', Y= 'dxxc', r= 4, Х= '1111111', Y= '111222', r= 7. Приведем текст решения данной задачи:

 

 

var i,j,r: integer; s,x,y: string;

Begin

writeln (' Первая строка '); readln (x);

writeln (' Вторая строка'); readln (y);

if Length(x)>Length(y)

then begin s:=x; x:=y; y:=s end;

{ Строка Y должна быть не короче X }

r:=Length(y);

for i:=l to Length (x) do begin

j:=1;

while (j<=Length(y)) and (y[j]<>x[i)) do Inc(j);

if j>Length(y)

then Inc(r)

else begin dec(r); Delete(y,j,1) end

{ Есть совпадение. Уменьшаем расстояние и удаляем символ из Y }

end;

writeln (' Расстояние ', r); readln

End.

 

К каким последствиям приведет исключение из ре­шения строки со сравнением длин строк и записи в Y строки наибольшей длины? Проверьте. Исключим опе­ратор Delete(Y,j,l). Что получится? Измените программу так, чтобы в тексте находились два слова, расстояние между которыми имеет максимальное (минимальное) значение.

 

 

6. Задания для самостоятельной работы

1. Составить программу:

  • которая запрашивает имя человека и повторяет его на экране;
  • которая запрашивает имя человека и повторяет его на экране с приветствием;
  • которая запрашивает название футбольной команды и повторяет его на экране со словами: "Это чемпион!".

2. Дано название футбольного клуба. Определить количество символов в нем.

3. Дано название города. Определить, четно или нет количество символов в нем.

4.Даны две фамилии. Определить, какая из них длиннее.

5.Дано слово.

    • Вывести на экран его третий символ.
    • Вывести на экран его последний символ.
    • Вывести на экран его k-й символ.
    • Определить, одинаковы ли второй и четвертый символы в нем.
    • Верно ли, что оно начинается и окан­чивается на одну и ту же букву?
    • Получить и вывести на экран буквосочетание, состоящее из его второго и четвертого сим­волов.
    • Получить и вывести на экран буквосочетание, состоящее из его третьего и последнего сим­волов.
    • Получить его часть, образованную второй, третьей и четвертой буквами.
    • Получить его часть, образованную идущими подряд буквами, начиная с т-й и кончая n-й.

 

6. Даны два слова. Верно ли, что первое слово начинается на ту же букву, которой оканчивается вто­рое слово?

7. Составить программу, которая запрашивает отдельно имя и отдельно фамилию, а затем выводит их как одну символьную строку.

8. Из слова "яблоко" путем вырезок его букв по­лучить слова "блок" и "око”.

9. Из слова "информатика" путем вырезок его букв получить слова "форма" и "тик".

10. Из слова "вертикаль" путем вырезок и склеек его букв получить слова "тир" и "ветка".

11. Из слова "программа" путем вырезок и склеек его букв получить слова "ром" и "рампа".

12. Из слова "трос" путем вырезок и склеек его букв получить слова "сорт", "рост" и "торс".

13. Из слова "клоун" путем вырезок и склеек его букв получить слова "уклон", "кулон" и "колун".

14. Из слова "апельсин" путем вырезок и склеек его букв получить слово "спаниель".

15. Из слова "вирус" путем замены его букв полу­чить слово "фокус".

16. Из слова "курсор" путем замены его букв получить слово "танцор".

17. Из слова "пробел" путем замены его букв по­лучить слово "продел".

18. Из слова "строка" путем замены его букв получить слово "строфа".

19. Из слова "муха" путем замены его букв полу­чить слово "слон".

20. Из слова "тетрадь" путем замены его букв получить слово "дневник".

21. Дано слово из четного числа букв. Поменять местами его половины. Задачу решить двумя способами: без использования оператора цикла; с использованием оператора цикла.

22. Дано слово из 12 букв. Поменять местами его трети следующим образом:

а) первую треть слова разместить на месте третьей, вторую треть — на месте первой, третью треть — на месте второй;

б) первую треть слова разместить на месте второй, вторую треть — на месте третьей, третью треть — на месте первой.

23. Дано слово. Переставить первые три и послед­ние три буквы, сохранив порядок их следования. Зада­чу решить двумя способами: без использования оператора цикла; с использованием оператора цикла.

24. Дано слово. Перенести первые k его букв в конец.

25. Дано название футбольного клуба. Напечатать его на экран столбиком.

26. Составить программу, которая печатает задан­ное слово, начиная с последней буквы.

27. Дано слово s 1. Получить слово s 2, образован­ное нечетными буквами слова s 1.

28. Дано слово s. Получить слово t, получаемое пу­тем прочтения слова s, начиная с его конца.

29. Получить строку, состоящую из пяти звездо­чек, т.е. символов "*".

30. Получить строку, состоящую из восьми симво­лов "_".

31. Составить программу, формирующую строку, состоящую из любого заданного количества любых оди­наковых символов.

32. Дано слово. Добавить к нему в начале 4 симво­ла "+" и в конце 5 символов "—".

33. Дано слово. Добавить к нему в начале и в кон­це столько звездочек, сколько букв в этом слове.

34. Дано предложение. Напечатать все его буквы "и".

35. Дано предложение. Составить программу, ко­торая печатает столбиком все вхождения в предложе­ние некоторого символа.

36. Дано предложение.

  • Вывести столбиком его тре­тий, шестой и т.д. символы.
  • Вывести все буквы "м" и "н" в нем.
  • Составить программу, ко­торая выводит все вхождения в предложение двух за­данных символов.
  • Вывести все имеющиеся в нем буквосочетания "нн".
  • Вывести столбиком все его буквы "и", стоящие на четных местах.
  • Вывести столбиком его пер­вый, второй, пятый, шестой, девятый, десятый и т.д. символы.
  • Определить число букв "о" в нем.
  • Определить число пробе­лов в нем.
  • Определить число вхожде­ний в него некоторого символа.
  • Определить долю (в %) букв "а" в нем.

37. Дано предложение. Определить:

а) число вхождений в него буквосочетания "ро";

б) число вхождений в него некоторого буквосочета­ния из двух букв;

в) число вхождений в него некоторого буквосочетания.

38. Дано предложение. В нем слова разделены од­ним пробелом (начальные и конечные пробелы и сим­вол "—" в предложении отсутствуют). Определить ко­личество слов в предложении.

39. Дано предложение. В нем слова разделены од­ним или несколькими пробелами (символ "—" в пред­ложении отсутствует). Определить количество слов в предложении. Рассмотреть два случая:

1) начальные и конечные пробелы в предложении отсутствуют;

2) начальные и конечные пробелы в предложении имеются.

40. Дан текст. Подсчитать общее число вхождений в него символов "+" и "—".

41. Дана фраза. Определить, сколько в ней предло­жений.

42. Дано предложение.

  • Определить, сколько в нем гласных букв.
  • Все буквы "е" в нем заме­нить на букву "и".
  • Все пробелы в нем заменить на символ "_".
  • Все его символы, стоящие на четных местах, заменить на букву "ы".
  • Все его символы, стоящие на третьем, шестом, девятом и т.д. местах, заменить на букву "А".
  • Заменить в нем все вхож­дения буквосочетания "ах" на "ух".
  • Заменить в нем все вхож­дения буквосочетания "да" на "не".
  • Заменить в нем все вхож­дения буквосочетания "про" на "нет”.
  • Заменить в нем все вхож­дения буквосочетания "бит" на "рог".
  • Заменить в нем все вхож­дения подстроки Strl на подстроку Str2.

43. Дано предложение. Найти наибольшее количе­ство идущих подряд пробелов.

44. Дан текст. Найти наибольшее количество иду­щих подряд одинаковых символов.

45. Дан символ. Выяснить, является ли он цифрой.

46. Дан текст.Напечатать все имеющиеся в нем цифры. Определить количество цифр в нем.

47. Дан текст, в котором имеются цифры.

а) Найти их сумму.

б) Найти максимальную цифру.

48. Дан текст, в начале которого имеются про­белы и в котором имеются цифры. Найти порядко­вый номер максимальной цифры, считая, что первый номер имеет первый непробел. Если максимальных цифр несколько, то должен быть найден номер пер­вой из них.

49. Дан текст. Определить, является лион пра­вильной десятичной записью целого числа.

 

 

50. Дан текст, представляющийсобой десятич­ную запись целого числа. Вычислить сумму цифрэтого числа.1.

51. Дан текст, имеющий вид: d1+d2+…+dn, где di — цифры (n > 1).

Вычислить записанную в текс­те сумму.

52. Дан текст, имеющий вид: d1–d2+d3–…, где di — цифры (n > 1).

Вычислить записанную в текс­те алгебраическую сумму.

53. Дан текст, имеющий вид: d1 ± d2 ±...± dn, где di цифры (n > 1).

Вычислитьзаписанную в текс­те алгебраическую сумму.

54. Дан текст. Найти наибольшееколичество иду­щих подряд цифр.

Найти сумму всехимеющихся в нем чисел.

Найти максимальноеиз имеющих­ся в нем чисел.

55. Дан текст, в котором имеется несколько иду­щих подряд цифр. Получить число, образованное эти­ми цифрами.

56. Дано предложение. Определить, каких букв в нем больше: "м" или "н".

57. Дано предложение. В нем слова разделены одним пробелом (символ " — " в предложении отсутствует). Вер­но ли, что число слов в предложении больше трех.

58. Дано предложение, в котором имеются буквы "с" и "т". Определить, какая из них встречается позже (при просмотре слова слева направо). Если таких букв несколько, то должны учитываться последние из них. Оператор цикла с условием не использовать.

59. Дан текст. Верно ли, что в нем есть пять иду­щих подряд одинаковых символов?

60. Дано предложение. Напечатать все его симво­лы, предшествующие первой запятой. Рассмотреть два случая: известно, что в предложении запятые имеются; в предложении запятых может не быть.

61. Дано предложение, в котором имеется несколь­ко букв "е". Найти:

а) порядковый номер первой из них;

б) порядковый номер последней из них.

62. Дано предложение. Определить, есть ли в нем буква "а". В случае положительного ответа найти так­же порядковый номер первой из них.

63. Дано слово. Проверить, является ли оно пере­вертышем (перевертышем называется слово, читаемое одинаково как с начала, так и с конца).

64. Дан текст. Определить количество букв "и" в первом предложении. Рассмотреть два случая:

1) известно, что буквы "и" в этом предложении есть;

2) букв "и" в тексте может не быть.

65. Дана последовательность символов, в начале ко­торой имеется некоторое количество одинаковых симво­лов. Определить это количество. Рассмотреть два случая:

1) известно, что не все символы последовательности одинаковые;

2) все символы последовательности могут быть оди­наковыми.

66. Даны два слова. Определить, сколько началь­ных букв первого слова совпадает с начальными бук­вами второго слова. Рассмотреть два случая:

1) известно, что слова разные;

2) слова могут быть одинаковыми.

67. Дано предложение, в котором нет символа "—". Определить количество букв "о" в первом слове. Учесть, что в начале предложения могут быть пробелы.

68. Дано предложение. Определить количество букв "н", предшествующих первой запятой предложе­ния. Рассмотреть два случая:

1) известно, что запятые в предложении есть;

2) запятых в предложении может не быть.

69. Дано предложение. Определить порядковые номера первой пары одинаковых "соседних" симво­лов. Если таких символов нет, то должно быть напеча­тано соответствующее сообщение. Определить, есть ли в нем сочетания "чу" или "щу". В случае положительного ответа найти также порядковый номер первой буквы первого из них.

70. Дана последовательность слов.Проверить,правильно ли в ней записаны сочетания "жи" и "ши". Проверить, правильно ли в ней записаны сочетания "ча" и "ща". Исправить ошибки.

71. Дано предложение. Напечатать все символы, расположенные между первой и второй запятой. Если второй запятой нет, то должны быть напечатаны все символы, расположенные после единственной имею­щейся запятой.

72. Дано предложение, в котором имеются одна буква "с" и одна буква "т". Определить, какая из них встречается раньше (при просмотре слова слева направо).

73. Символьной строке по ошибке вместо "опе­чатка" присвоено значение "очепатка". Изменить зна­чение s так, чтобы ошибки не было.

74. Дано слово. Поменять местами его m-ю и п-ю буквы. Поменять местами первую из букв "а" и последнюю из букв "о". Учесть возможность того, что таких букв в слове может не быть.

75. Дано слово из четного числа букв. Поменять местами первую букву со второй, третью — с четвер­той и т.д. Поменять местами его половины следующим способом: первую букву поменять с последней, вторую — с предпослед­ней и т.д.

76. Дано слово из 12 букв. Переставить в обрат­ном порядке буквы, расположенные между второй и десятой буквами (т.е. с третьей по девятую).

77. Дано слово из 15 букв. Переставить в обрат­ном порядке буквы, расположенные между k -й и s-й буквами (т.е. с (k + 1)-й по (s - 1)-ю). Значения k и s вводятся с клавиатуры, k < s.

 

В задачах 78-82 под удалением символа из символьной строки следует понимать:

1) исключение этого символа из строки путем сме­щения всех следующих за ним символов влево на одну позицию;

2) присваивание последнему символу исходной стро­ки значения "_".

78. Устранить имеющуюся в заданном слове ошибку:

а) дано слово "глинянный";

б) дано слово "граффика".

79. Дано слово:

  • удалить из него третью букву;
  • удалить из него k-ю букву.
  • удалить из него первую из букв “о”, если такая буква есть;
  • удалить из него последнюю из букв "т", если такая буква есть.
  • Если его длина нечетная, то уда­лить среднюю букву, в противном случае — две сред­них буквы.
  • Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в сло­ве должны остаться только различные буквы.

80. Дано предложение. Удалить из него все символы с nl-го по n2-й (n1 < n2).

Удалить из него все бук­вы "с".

Удалить из него все буквы "о", стоящие на нечетных местах.

81. Проверить, является ли «перевертышем» следующая символьная строка после уда­ления из нее всех пробелов:

а) "АРГЕНТИНА МАНИТ НЕГРА";

б) "А РОЗА УПАЛА НА ЛАПУ АЗОРА”.

 

Во всех задачах последние символы "_", полученные после удаления пробелов, не учитывать.

82. Проверить, является ли некоторая сим­вольная строка перевертышем после удаления из нее всех пробелов Последние символы "__", полученные после удаления пробелов, не учитывать.

 

В задачах 83-89 под вставкой символа s в сим­вольную строку после k-го символа следует понимать:

1) смещение всехсимволов, начиная с (k+1)-гo, вправо на одну позицию;

2) присваивание (k+1)-му символустроки значения s.

83. Дано слово "стекляный_". Исправить ошиб­ку в нем.

84. Дана фраза "ценая вещь_". Исправить ошиб­ку в ней.

85. Дано слово, оканчивающееся символом "_". Вставить букву "т" после k-й буквы.

86. Данослово, оканчивающееся символом "_". Составить программу,которая вставляет некоторую заданную букву после буквы с заданным номером.

87. Дано слово, оканчивающеесясимволом "_". Вставить заданную букву после первойбуквы "и".

88. Дано предложение, оканчивающееся симво­лом “__". Вставить заданную букву перед последней бук­вой “и”.

89. Путем вставок и удаления символов испра­вить ошибки:

а) в слове "прроцесор";

б) во фразе "теекстовыйфайл";

в) во фразе "програма и аллгоритм";

г) во фразе "процесор и паммять".

90. Дано ошибочно написанное слово "рпроцессo". Путем перемещения его букв получить слово "процессор". Аналогично для слов:

  • "иинформаця" - "информация";
  • "алигортм" - "алго­ритм";
  • "роцессорп” - "процессор".
  • "ИТЕРНЕТН" - "ИНТЕРНЕТ".
  • "килбайот" - "ки­лобайт".

91. Дано слово.

  • Переставить его s-ю букву на место k-й (s < k). При этом (s + 1)-ю, (s+ 2)-ю,.., k-ю буквы сдвинуть влево на одну позицию.
  • Переставить его первую букву на место последней. При этом вторую, третью,..., послед­нюю буквы сдвинуть влево на одну позицию.
  • Переставить его первую буквунаместо k-й. При этом вторую, третью,..., k-ю буквы сдвинуть влево на одну позицию.
  • Переставить его последнюю бук­ву на место первой. При этом первую, вторую,..., пред­последнюю буквы сдвинуть вправо на одну позицию.
  • Переставить его последнюю бук­ву на место k-й. При этом k-ю, (k + 1)-ю,.., предпос­леднюю буквы сдвинуть вправо на одну позицию.
  • Определить, сколько различных букв в нем.

92. В слове имеются только две одинаковых бук­вы. Найти их.

93.Даны два слова.

  • Для каждой буквы первого слова (в том числе для повторяющихся в этом слове букв) определить, входит ли она во второе слово. На­пример, если заданные слова "информация" и "про­цессор", то для букв первого из них ответом должно быть. "нет нет нет да да нет нет да нет нет".
  • Для каждой буквы первого слова определить, входит ли она во второе слово. По­вторяющиеся буквы первого слова не рассматривать. Например, если заданные слова "процессор" и "ин­формация", то для букв первого из них ответом долж­но быть: "нет да да да нет нет".
  • Напечатать только те буквы слов, которые есть только в одном из них (в том чис­ле повторяющиеся). Например, если заданные слова "процессор" и "информация", то ответом должно быть:
  • "п е с с и ф м а и я".
  • Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. Например, если заданные слова "процессор" и "информация", то ответом должно быть: "п е ф м л я".
  • Определить, можно ли из букв первого из них получить второе. Рассмотреть два варианта:

1) повторяющиеся буквы второго слова могут в пер­вом слове не повторяться;

2) каждая буква второго слова должна входить в первое слово столько же раз, сколько и во второе.

94. Даны три слова.

  • Напечатать их общие бук­вы. Повторяющиеся буквы каждого слова не рассмат­ривать.
  • Напечатать только те буквы слов, которые есть только в одном из слов. Рассмотреть два варианта: повторяющиеся буквы каждого слова рассматри­ваю


  • Поделиться:




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

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


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