|
|
|
Символьная информация
это информация, отображаемая с помощью символов (букв, цифр, знаков операций и др.). |
IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый из которых кодируется одним байтом. Соответствие символов и байтов задается таблицей кодировки, в которой для каждого символа указывается соответствующий байт.
Символы с кодами от 0 до 127 построены по стандарту
ASCII (American Standard
Code
for Information
Interchange
Американский стандартный код обмена информацией, читается
"аски"). Вторая половина таблицы (коды 128 ... 255) в нашей стране содержит
русские буквы (кириллицу) и символы псевдографики.
Коды 0...127
(кодировка ASCII) ![]() |
Коды 128...255
(модифицированный альтернативный вариант) ![]() |
Для того, чтобы определить по этим таблицам код того или иного символа, нужно сложить номер строки с номером столбца, в которых он расположен. Так, код цифры 5 равен 05+048 = 053.
Символьная информация в алгоритмах и программах описывается данными двух типов: символьным и литерным. Они отличаются друг от друга тем, что значением символьной переменной является один символ, а литерной строка символов. Типы данных, используемые для обработки символьной информации
Язык | Тип, ключевое слово | Примеры использования |
Школьный АЯ |
Символьный сим |
a := "f " ; b := "+" ; c := "5"
If a = " " then k := k + 1 |
Литерный лит |
t := "Литерная величина" s := "" (пустая строка) | |
Turbo Pascal | Символьный Char |
a := ' f ' ; b := '+' ; c := '5' ;
If a = ' ' then k := k + 1 |
Литерный String |
t := 'Литерная величина' ;
f := ' ' ; (пустая строка) |
|
QBasic | Литерный | t$ := "Литерная величина"
f$ := "" (пустая строка) |
Для данных символьного и литерного типов применимы операции
сцепки (соединения, конкатенации) и сравнения
(<, >, <=, >=, =, <>).
Сравнивать можно строки разной длины. Сравнение осуществляется слева
направо в соответствии с ASCII-кодами соответствующих символов. Так,
строка "стол" меньше строки "стул", строка "teacher"
больше строки "pupil" , а строка "пар" меньше строки "парад".
Функции и команды обработки строк
Школьный АЯ
Функция длин(S) Возвращает количество символов в строке S.
Операция вырезка позволяет "вырезать" из строки группу соседних символов. Вырезка из строки S подстроки, начинающейся с i-ой и кончающейся j-ой позицией, обозначается S [ i : j]. Вырезка из строки S одного i-го символа обозначается S[i].
Команда присваивания вырезке S[N : M] := SubS.
Часть строки S, начиная с позиции N и кончая позицией M, заменяется на
подстроку SubS такой же длины.
Turbo Pascal
Процедуры
Delete ( Var S : String; N, M : Integer ) Удаляет M символов из строки S, начиная с позиции N.
Insert ( SubS : String; Var S : String; N : Integer ) Вставляет подстроку SubS в строку S, начиная с позиции N.
Str ( X : Integer; Var S : String ) Возвращает представление числа X в его символьной форме S.
Val ( S : String; Var X, Code : Integer ) Возвращает представление символов строки S в ее числовой форме X. Параметр Code содержит признак ошибки преобразования (если Code = 0, ошибки нет).
Функции
Chr ( X : Byte ) : Char Возвращает символ с заданным порядковым номером X.
Сoncat ( S1 [ , S2 , ... , SN ] ): String Выполняет сцепку (конкатенацию) последовательности строк.
Copy ( S : String; N , M : Integer ) : String Возвращает подстроку из строки S, начиная с позиции N и длиной M символов.
Length ( S : String ) : Byte Возвращает количество символов в строке S.
Ord ( X : Char ) : LongInt Возвращает порядковый номер символа X в таблице кодов символов.
Pos ( SubS , S : String ) : Byte Возвращает
номер позиции, начиная с которой в строке S располагается подстрока SubS
(если значение функции равно нулю, то S не содержит SubS).
QBasic
Функции
ASC ( X$ ) Возвращает порядковый номер символа X$ в таблице кодов символов.
CHR$ ( N ) Возвращает символ с заданным порядковым номером N.
INSTR ( [ N , ] X$ , Y$ ) Возвращает номер позиции строки X$, начиная с которой в ней размещается подстрока Y$. Если подстрока не найдена, то значение функции равно нулю. Поиск подстроки ведется с позиции N, а если N не задано, то с начала строки.
LEFT$ ( X$ , N ) Возвращает подстроку, составленную из первых N символов строки X$.
LEN ( X$ ) Возвращает количество символов в строке X$.
MID$ ( X$, N [ , M ] ) Возвращает подстроку, составленную из M символов строки X$, начиная с позиции N (если параметр М опущен, то возвращаются все символы, начиная с позиции N).
RIGHT$ ( X$ , N ) Возвращает подстроку, составленную из последних N символов строки X$.
STR$ ( N ) Возвращает представление числа N в символьной форме.
VAL ( X$ ) Возвращает представление символов строки X$ в числовой форме.
Операторы
MID$ ( X$ , N , M ) = Y$ Часть строки X$, начиная с позиции N, длиной M позиций заменяется на строку Y$. Длина X$ не изменяется.
SWAP X$ , Y$ Строки X$ и Y$ обмениваются своими значениями.
Пример 7.1. Определить количество слов в заданном тексте.
Если слова в тексте разделены одним пробелом, то задача сводится к подсчету числа пробелов. Количество слов при этом равно числу пробелов плюс 1. Если же число пробелов между соседними словами произвольное, как обычно и бывает, то алгоритм усложняется. Рассмотрим оба варианта решения этой задачи.
Вариант 1. Слова в тексте разделены одним пробелом.
Тест
Данные | Результат |
"Кот на крыше" | N=3 |
Демонстрация
Школьный АЯ
алг Число слов (арг лит Text, рез цел N) дано | В непустом тексте Text слова | разделены одним пробелом надо | N количество слов нач цел i N:=1 нц для i от 1 до длин(Text) | цикл по буквам текста если Text[i] = " " то N:=N+1 все кц кон |
Исполнение алгоритма
|
Program Probel; Uses Crt; Var Text : String; {заданный непустой текст} i, Number : Integer; {Number количество слов в тексте} Letter : Char; {текущая буква }
BEGIN ClrScr; WriteLn('Введите текст :'); ReadLn(Text);
Number:=1; For i:=1 to Length(Text) do {цикл по буквам текста} begin Letter:=Text[i]; If (Letter = ' ' ) then Number:=Number+1; end;
WriteLn('О т в е т : количество слов в тексте равно ', Number); END.
Вариант 2. Слова в тексте разделены произвольным количеством пробелов.
Тест
Данные | Результат |
"Кот на крыше" | N=3 |
Демонстрация
Школьный АЯ
алг Число слов (арг лит Text, рез цел N) дано | В тексте Text слова могут быть разделены | произвольным количеством пробелов надо | N количество слов в тексте Text
нач цел i, лог Flag N:=0; Flag:=да нц для i от 1 до длин(Text) | цикл по буквам текста если (Text[i]<>" ") и (Flag=да) | это условие выполняется только то N:=N+1 | для первой буквы каждого слова все Flag := (Text[i]=" ") | Flag=да, если очередная буква пробел, кц | в противном случае Flag = нет кон
Исполнение алгоритма Обозначение проверяемого условия: (Text[i]<>" ") и (Flag = да)=>(1)
i | Text[i] | (1) | N | Flag |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | К о т _ н а _ _ _ к р ы ш е | + - - - + - - - - + - - - - | 0 1 2 3 | да нет нет нет нет да нет нет нет нет да нет нет нет нет |
Program KolSlov; Uses Crt; Var Text : String; {заданный текст} i, Number : Integer; {Number - количество слов в тексте} Flag : Boolean; Letter : Char; {текущая буква } BEGIN ClrScr; WriteLn('Введите текст :'); ReadLn(Text);
Number := 0; Flag := TRUE; For i := 1 to Length(Text) do {цикл по буквам текста} begin Letter := Text[i]; {текущая буква текста } If (Letter <> ' ') and Flag then Number := Number+1; Flag := (Letter=' ') {(Letter=' ') логическое выражение,} end; {принимающее значения TRUE или FALSE }
WriteLn; WriteLn('О т в е т : количество слов в тексте равно ', Number); ReadLn END.
CLS PRINT "Введите текст, отделяя слова пробелами." PRINT "Если в тексте есть запятые, заключите его в кавычки." INPUT Text$ : PRINT
Number = 0 : Flag = 0 FOR i = 1 TO LEN(Text$) 'цикл по буквам текста Letter$ = MID$(Text$, i, 1) 'текущая буква текста IF (Letter$ <> " ") AND (Flag = 0) THEN Number=Number+1 IF (Letter$ = " ") THEN Flag = 0 ELSE Flag = 1 NEXT i
PRINT "О т в е т : количество слов в тексте равно "; Number END
Пример 7.2. Определить, является ли заданное слово "перевёртышем" (слово называется "перевёртышем", если совпадает с собой после переворачивания).
Система тестов
N теста | Данные | Результат |
1 | Slovo = ''казак'' | Otvet = ''Перевертыш'' |
2 | Slovo = ''коза'' | Otvet = ''Не перевертыш'' |
Демонстрация
Школьный АЯ
алг Перевертыш (арг лит Slovo, рез лит Otvet) надо | Otvet = "Перевертыш", если Slovo совпадает с собой | после переворачивания
нач цел Dlina, i, лог Flag Dlina:=длин(Slovo) i:=1; Flag:=да нц пока (i<=Dlina/2) и Flag | цикл пока с прерыванием до Flag:=(Slovo[i]=Slovo[Dlina-i+1]) | первой несовпавшей пары букв, i:=i+1 | если такая имеется в слове кц
если Flag то Otvet:="Перевертыш" иначе Otvet:="Не перевертыш" все конИсполнение алгоритма
Номер теста | i | (1) | (2) | Flag | Otvet |
1 | 1 2 3 | + + -(кц) | + + | да да да | "Перевертыш" |
2 | 1 2 | + -(кц) | - | да нет | "Не перевертыш" |
Program TurnOver; Uses Crt; Var Slovo : String; Dlina, i : Integer; Flag : Boolean;
BEGIN ClrScr; Write('Введите слово : '); ReadLn(Slovo); Dlina:= Length(Slovo);
{Сравниваются пары букв: первая буква с последней, } {вторая буква с предпоследней и т.д. } i:=1; Flag := TRUE; While (i <= Dlina/2) and Flag do {цикл до первой несовпавшей } begin {пары букв (если такая есть)} Flag := (Slovo[i]=Slovo[Dlina-i+1]); i := i+1 end;
WriteLn; Write( 'О т в е т : слово ', Slovo); If Flag then WriteLn(' перевертыш. ') else WriteLn(' не перевертыш'); ReadLn END.
CLS : INPUT "Введите слово : ", SLOVO$ Dlina = LEN(SLOVO$) ' Сравниваются пары букв: первая буква с последней, ' вторая буква с предпоследней и т.д. i = 1 : Flag = 0 WHILE (i<=Dlina/2) AND (Flag=0) 'цикл до первой несовпавшей пары букв Letter1$ = MID$(SLOVO$, i, 1) 'первая буква пары Letter2$ = MID$(SLOVO$, Dlina-i+1, 1) 'вторая буква пары IF Letter1$ = Letter2$ THEN i=i+1 ELSE Flag=1 WEND PRINT : PRINT "О т в е т : слово "; SLOVO$; IF Flag = 0 THEN PRINT " перевертыш." ELSE PRINT " не перевертыш." END
Пример 7.3.
B заданном тексте одно заданное слово везде заменить на другое
заданное слово
такой же длины.
Тест
Данные | Результат | ||
Текст | Слово1 | Слово2 | |
''2sinx+siny'' | ''sin'' | ''cos'' | ''2cosx+cosy'' |
Демонстрация
Школьный АЯ
алг Замена (арг рез лит Текст, арг лит Слово1, Слово2) дано | длины Слово1 и Слово2 совпадают надо | в строке Текст подстрока Слово1 везде | заменена на подстроку Слово2
нач цел i, DS DS:=длин(Слово1) нц для i от 1 до длин(Текст)-DS+1 если Текст[i : i+DS-1] = Слово1 | если вырезка равна Слово1, то Текст[i : i+DS-1] :=Слово2 | то вырезке присваиваем Слово2 i:=i+DS | и продвигаемся на длину слова все кц кон
Исполнение алгоритма Обозначение проверяемого условия: Текст[i : i+DS-1] = Слово1 => (1)
Для тестовых данных имеем: DS=3, длин (Текст)-DS+1= 8.
i | Текст[i : i+2] | (1) | Текст |
1 2 5 6 7 10 | "2si" "sin" "x+s" "+si" "sin" | - + - - + | "2sinx+siny" "2cosx +siny" "2cosx+cosy" |
Program Replace; Uses Crt; Var Text, Slovo1, Slovo2 : String; i, DlinaSlova, P : Integer;
BEGIN ClrScr; Write('Введите строку : '); ReadLn(Text); Write('Какое слово заменить ? '); ReadLn(Slovo1); Write('На какое слово заменить ? '); ReadLn(Slovo2);
WriteLn; WriteLn('О т в е т : '); WriteLn('Исходный текст: ', Text); DlinaSlova:=Length(Slovo1);
DlinaSlova:=Length(Slovo1); P:=Pos(Slovo1,Text); {номер позиции, с которой в строке Text } {в первый раз встречается подстрока Slovo1 } While P>0 do {цикл продолжается до тех пор,пока подстрока} {Slovo1 встречается в строке Text } begin Delete(Text, P, DlinaSlova); {удаление подстроки Slovo1, начинаю-} {щейся с позиции P, из строки Text } Insert(Slovo2, Text, P); {вставка подстроки Slovo2 } { в строку Text с позиции Р} P:=Pos(Slovo1, Text); {номер позиции, с которой подстрока Slovo1} {встречается в строке Text в очередной раз} end;
WriteLn('Новый текст: ', Text); ReadLn END.
CLS : INPUT "Введите текст : " , Text$ INPUT "Какое слово заменить ? " , Slovo1$ INPUT "На какое слово заменить ? " , Slovo2$
PRINT : PRINT "О т в е т" PRINT "Исходный текст : " ; Text$ DlinaText = LEN(Text$) : DlinaSlova = LEN(Slovo1$)
FOR i = 1 TO DlinaText-DlinaSlova+1 IF MID$(Text$, i, DlinaSlova) = Slovo1$ THEN MID$(Text$, i) = Slovo2$ : i=i+DlinaSlova END IF NEXT i
PRINT "Новый текст : " ; Text$ ENDПример 7.4. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).
Тест
Данные | Результат |
Words=(''стул'', ''гора'', ''яма'', ''стол'') | Words=("гора", "стол", "стул", "яма") |
Демонстрация
Школьный АЯ (АЯ расширен добавлением типа данных лит таб и операций отношения для литерных переменных)
алг Расположить по алфавиту(арг цел NWords, арг рез лит таб Words[1:NWords]) надо | Таблица Words упорядочена лексикографически
нач цел i, j, лит Tmp нц для i от 1 до NWords-1 нц для j от i+1 до NWords если Words[i]>Words[j] | условие перестановки слов то Tmp:=Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp все кц кц кон
Исполнение алгоритма
i | j | Words[i]>Words[j] | Массив Words |
''стул'', ''гора'', ''яма'', ''стол'' | |||
1 | 2 3 4 | + - - | ''гора'', ''стул'', ''яма'', ''стол'' |
2 | 3 4 | - + | ''гора'', ''стол'', ''яма'', ''стул'' |
3 | 4 | + | ''гора'', ''стол'' , ''стул'', ''яма'' |
Program LexOrder; Uses Crt; Var Words : Array[1..10] of String; {массив слов} Tmp : String; {Tmp вспомогательная переменная} i, j, NWords : Integer; {NWords количество слов} BEGIN ClrScr; Write('Количество слов в тексте '); ReadLn(NWords); For i := 1 to NWords do begin Write(i, '-ое слово : '); ReadLn(Words[i]) end;
For i := 1 to NWords-1 do {лексикографическое упорядочение слов} For j := i+1 to NWords do If Words[i]>Words[j] then begin Tmp := Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp end;
WriteLn; WriteLn('О т в е т'); WriteLn('Лексикографически упорядоченный массив слов:'); For i := 1 to NWords do Write(Words[i], ' '); WriteLn; ReadLn END.
CLS : INPUT "Количество слов в тексте ", NWords DIM Words(NWords) AS STRING
FOR i = 1 TO NWords PRINT i; "-ое слово " ; : INPUT Words(i) NEXT i
FOR i = 1 TO NWords - 1 'лексикографическое упорядочение слов FOR j = i + 1 TO NWords IF Words(i) > Words(j) THEN SWAP Words(i), Words(j) NEXT j NEXT i
PRINT : PRINT "О т в е т" PRINT "Лексикографически упорядоченный массив слов:" FOR i = 1 TO NWords PRINT Words(i); " " ; NEXT i PRINT END
Пример 7.5. Проверить, имеется ли в линейной записи заданной математической формулы баланс открывающих и закрывающих скобок.
Система тестов
Номер теста | Проверяемый случай | Данные | Результат |
1 | При просмотре линейной записи слева направо первой встречается закрывающая скобка | ''a)b+1('' | ''Нет баланса'' |
2 | Первой встречается открывающая скобка, но число открывающих и закрывающих скобок не совпадает | ''(a+b))'' | ''Нет баланса'' |
3 | Есть баланс скобок | ''(a+b/(c*d))'' | ''Есть баланс'' |
Демонстрация
Школьный АЯ
алг Баланс скобок(арг лит S, рез лит Otvet)
нач цел Dlina, Flag, i i:=1; Flag:=0; Dlina:=длин(S) нц пока (Flag>=0) и (i<=Dlina) если S[i] = "(" то Flag:=Flag+1 все
если S[i] = ")" то Flag:=Flag-1 все i:=i+1 кц
если Flag=0 то Otvet := “Есть баланс” иначе Otvet := “Нет баланса” все кон
Program Balance; Uses Crt; Var S : String; Dlina, Flag, i : Integer; BEGIN ClrScr; GotoXY(15, 5); Write('Введите линейную запись математической формулы :'); GotoXY(32,7); ReadLn(S);
i:=1; Flag:=0; Dlina:=Length(S); While (Flag>=0) and (i<=Dlina) do begin If S[i] = '(' then Flag:=Flag + 1; If S[i] = ')' then Flag:=Flag - 1; i:=i+1 end;
GotoXY(32, 9); WriteLn('О т в е т'); GotoXY(15,11); If Flag=0 then Write('Есть баланс ') else Write('Нет баланса '); WriteLn('открывающих и закрывающих скобок'); ReadLn END.
CLS INPUT "Введите линейную запись математической формулы :", S$
i = 1 : Flag = 0 : Dlina = LEN(S$) WHILE Flag >= 0 AND i <= Dlina IF MID$(S$, i, 1) = "(" THEN Flag = Flag + 1 IF MID$(S$, i, 1) = ")" THEN Flag = Flag - 1 i = i + 1 WEND
PRINT : PRINT "О т в е т" IF Flag = 0 THEN PRINT "Есть баланс "; ELSE PRINT "Нет баланса "; PRINT "открывающих и закрывающих скобок" ENDЗадачи для самостоятельного решения
7.1. [Pascal | C | Basic] Подсчитайте количество запятых в заданном тексте.
7.2. [Pascal | C | Basic] Подсчитайте, сколько раз в заданном тексте встречается заданный символ.
7.3. [Pascal | C | Basic] Определите долю пробелов в заданной строке.
7.4. [Pascal | C | Basic] Проверьте, является ли заданное слово названием времени года на русском языке.
7.5. [Pascal | C | Basic] Замените в заданном тексте буквосочетание "min" на "max".
7.6. [Pascal | C | Basic] В заданном тексте подсчитате общее количество букв "x" и "y".
7.7. [Pascal | C | Basic] В заданном тексте везде букву "а" замените на букву "б", а букву "б" на букву "а".
7.8. [Pascal | C | Basic] Удвойте каждую букву в заданном тексте.
7.9. [Pascal | C | Basic] В заданном слове каждую букву "б" замените буквосочетанием "ку".
7.10. [Pascal | C | Basic] Вычеркните из заданного слова все буквы "а".
7.11. [Pascal | C | Basic] Подсчитате, сколько раз в заданном слове встречается буквосочетание "аб".
7.12. [Pascal | C | Basic] Заданную строку А перепишите в обратном порядке в строку В.
7.13. [Pascal | C | Basic] Выясните, есть ли в заданном предложении буква "ы".
7.14. [Pascal | C | Basic] Выясните, верно ли, что в заданном предложении P есть все буквы, входящие в заданное слово S.
7.15. [Pascal | C | Basic] Определите количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком).
7.16. [Pascal | C | Basic] Определите долю гласных букв в заданном тексте на русском (английском) языке.
7.17. [Pascal | C | Basic] Определите, является ли одно заданное слово обращением другого заданного слова.
7.18. [Pascal | C | Basic] Из заданного текста удалите те его части, которые заключены в кавычки (вместе с кавычками).
7.19. [Pascal | C | Basic] Каждые n символов во введенном тексте отделите знаком "!".
7.20. [Pascal | C | Basic] Выясните, верно ли, что в заданном предложении есть пара соседствующих одинаковых символов.
7.21. [Pascal | C | Basic] Найдите хотя бы одно слово, которое встречается в каждом из трех заданных предложений.
7.22. [Pascal | C | Basic] Отредактируйте заданное предложение, удаляя из него все слова с чётными номерами.
7.23. [Pascal | C | Basic] В заданном предложении укажите слово, в котором доля гласных (A, E, I, O, U строчных или прописных) максимальна.
7.24. [Pascal | C | Basic] Дан текст из цифр и строчных латинских букв, за которым следует точка. Определите, каких букв гласных (A, E, I, O, U) или согласных больше в этом тексте.
7.25. [Pascal | C | Basic] В заданную упорядоченную в лексикографическом (алфавитном) порядке последовательность слов вставьте новое заданное слово так, чтобы лексикографический порядок сохранился.
7.26. [Pascal | C | Basic] В заданной последовательности слов найдите все слова, начинающиеся с заданной приставки.
7.27. [Pascal | C | Basic] В заданной последовательности слов найдите все слова, имеющие заданное окончание.
7.28. [Pascal | C | Basic] Найдите самое длинное и самое короткое слово в заданном предложении.
7.29. [Pascal | C | Basic] В заданном тексте подсчитайте наибольшее количество подряд идущих пробелов.
7.30. [Pascal | C | Basic] Для каждого из слов заданного предложения укажите, сколько раз оно встречается в предложении.
7.31. [Pascal | C | Basic] Найдите самое длинное симметричное слово заданного предложения.
7.32. [Pascal | C | Basic] Из заданного текста выберите и напечатайте те символы, которые встречаются в нём ровно один раз.
7.33. [Pascal | C | Basic] Определите частоту вхождения в заданный текст каждой буквы русского алфавита.
7.34. [Pascal | C | Basic]
Дана последовательность слов, в которой слова разделены запятыми, а за
последним словом точка. Напечатайте:
а) эту же последовательность слов, но в обратном порядке;
б) все различные слова, указав для каждого из них число его вхождений в последовательность.
7.35*. [Pascal | C | Basic] Отредактируйте заданное предложение, удаляя из него все лишние пробелы.
7.36*. [Pascal | C | Basic] Из заданного предложения удалите те слова, которые уже встречались в предложении раньше.
7.37*. [Pascal | C | Basic] Преобразуйте заданное десятичное натуральное число в римскую систему счисления.
7.38*. [Pascal | C | Basic] Преобразуйте число, заданное в римской системе счисления, в число десятичной системы.
7.39. [Pascal | C | Basic] Известны фамилии и имена учеников класса. Напечатайте список класса с указанием для каждого ученика количества его однофамильцев и тезок.
7.40. [Pascal | C | Basic] В заданном предложении найдите такие слова, которые, не имея приставки, начинаются с заданного корня, содержат или не содержат произвольный суффикс и имеют одно из трех заданных окончаний. Найденные слова распечатайте в алфавитном порядке.
7.41. [Pascal | C | Basic] Составьте целочисленный массив, элементами которого являются количества слов заданного текста на русском языке, начинающихся с соответствующей шипящей согласной ("ж", "ш", "ч"), прописной или строчной. Слова, содержащие менее трех букв, не учитывайте.
7.42*. [Pascal | C | Basic] Упорядочьте слова заданного предложения по возрастанию количества букв. Затем слова с одинаковым количеством букв упорядочьте по алфавиту (лексикографически).
7.43*. [Pascal | C | Basic] Определите, сколько слов заданного текста составлено из букв русского алфавита, а сколько из букв латинского алфавита. Слова, в которых встречаются буквы обоих алфавитов, замените словом "Error".
7.44*. [Pascal | C | Basic]
В заданном тексте на русском языке найдите структуры, которые могут
обозначать фамилии и инициалы упоминаемых в тексте лиц (например, Павлов И.П.
или И.П. Павлов), приведите их к стандартной форме <инициалы> <пробел> <фамилия>
и занесите в отдельный массив.
|