Как перевернуть слово в паскале

Как перевернуть слово в паскале

Обработка строк текста

9.1. Типы данных CHAR и STRING

В Turbo Pascal имеется два типа данных для работы с текстами: О char — литерный или символьный тип;

П String — СТрОКОВЫЙ ТИП ИЛИ ПрОСТО СТрОКЭ.

Символьный тип

Значением переменных символьного типа char является один символ. Каж­дому символу соответствует код символа — целое число в диапазоне от О до 255. Из этого следует, что символьный тип является порядковым. В не­которых языках программирования (С, Java) тип char относят к целым ти­пам, что разумно, т. к. в памяти компьютера нет символов —- есть только их числовые коды. Это первый момент, который важно уяснить — все дейст­вия по обработке символов, в конечном счете, сводятся к действиям над целыми числами, расположенными строго по порядку.

Над данными символьного типа определены следующие операции отноше­ния: =, о, , =, вырабатывающие результат логического типа.

Обратите внимание — при выполнении всех операций сравнения коды сим­волов сравниваются как обычные целые числа. При этом получается, что любая заглавная буква всегда меньше соответствующей ей строчной, т. к. в кодовой таблице сначала располагаются все заглавные буквы, а затем строчные (см. приложение 2). Точно так же любая буква латинского алфави­та всегда меньше любой буквы русского алфавита, даже если их изображе­ния на экране практически неразличимы (А латинская, А русская).

Для данных символьного типа определены следующие стандартные функции: П chr(x) — возвращает значение символа по его коду;

П ordfch) —- возвращает код заданного символа ch; П pred(ch) — возвращает предыдущий символ; О succ(ch) — возвращает следующий символ;

П upcase(ch) — преобразует строчную букву в заглавную. Обрабатывает буквы только латинского алфавита.

Строковый тип

Строка — это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от I до 255. Пере­менную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных.

Type

ИмяТипа = string[максимальная длина строки];

Var

Строковую переменную можно задать и без предварительного объявления

string[MaKc. длина строки];

ИЛИ var

Если максимальная длина строки не указывается, то она равна 255 байт.

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

const stradres = ‘ул. Мира, 35’;

type str!25 = string [125];

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

Строка в языке Turbo Pascal трактуется как массив символов. Для строки из п символов в памяти отводится п+l байт; п байтов — для хранения симво­лов строки, а один дополнительный байт — для значения текущей длины строки. Этот дополнительный байт имеет номер 0, соответственно первый символ строки имеет номер 1, второй — номер 2 и т. д.

Читайте также:  Как выйти из библиотеки изображений

Например, переменная sadr типа string [12] хранится в памяти таким обра­зом (табл. 9.1).

Таблица 9.1. Распределение памяти для хранения переменной

Всего строка занимает 13 байтов, из них последние 4 байта оказались неза­нятыми, т. к. реальная длина строки составляет 8 символов, это значение и хранится в нулевом байте строки. Незанятые байты составляют "хвост" строки, в котором может быть любой "мусор", однако программа не будет обращаться к "хвосту", т. к. реальный размер строки ей известен.

Из этого представления понятно и ограничение на максимальную длину стро­ки — 255 символов, т. к. для хранения длины строки отведен всего один байт (максимальное двоичное число, которое можно уместить в один байт, — восемь подряд идущих единиц, что соответствует десятичному числу 255).

К любому символу в строке можно обратиться как к элементу одномерного массива

array [0 .. n] of char

по номеру (индексу) данного символа в строке. Индекс определяется выра­жением целочисленного типа, которое записывается в квадратных скобках, как для массива.

Обратите внимание — в отличие от массивов переменные строкового типа могут участвовать целиком в операторах ввода/вывода.

Например,readln(stl); writeln(st2> ;

При вводе строки количество символов в ней определяется автоматически, при этом автоматически заполняется нулевой байт. Для получения длины строки имеется функция length, которая возвращает значение нулевого бай­та строки (см. разд. 9.3).

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

Приведем пример, в котором исходная строка вводится целиком, а выво­дится по отдельным символам (листинг 9.1). В данном случае программа сначала выводит строку в "перевернутом" виде (например, вводим РОЗА, а выводится АЗОР). Затем та же строка выводится в прямом виде, но каждое слово с новой строки. Считаем, что слова разделены пробелами, причем не обязательно одиночными. Обратите внимание на условие, которое проверя­ет начало нового слова. Разбивка строки на слова — это типовое действие со строками.

Листинг 9.1. Вывод строки в перевернутом виде и по отдельным словам

i: integer; begin

for i:=length(s) ciownto 1 do write (s[i]) ;

for i:=l to length(s)-l do

Читайте также:  Коды для пульта ростелеком к телевизору mystery

if (s[i]) = ‘ ‘) and (s[i+l]<>’ ‘) then writeln

else write(s[i]); readln; end

Еще один пример, в котором выполняется обработка строки как массива символов. Данная программа (листинг 9.2) проверяет правильность расста­новки скобок в выражении (можно считать ее маленькой частичкой компи­лятора, т. к. перед преобразованием любого выражения в исполнимый код всегда проверяется правильность расстановки скобок). В последней главе (см. листинг 13.3) приводится пример программы для решения аналогичной задачи в более сложной постановке.

^Листинг 9.2. Проверка баланса скобок в скобочном выражении

writeln(‘Введите скобочное выражение:’]; readln(s);

Операции над строками

Над строковыми данными допустимы операция сцепления (конкатенации) и операции отношения. Используя строковые переменные, константы, функ­ции и операцию сцепления, можно строить строковые выражения.

9.2.1. Операция сцепления (+)

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

Выражение: ‘Turbo’ + ‘ Pascal’ + ‘7.0’

Результат: Turbo Pascal 7.0′

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

Замечание j

Для того чтобы предоставить программистам возможность использовать один и тот же знак операции "+" для работы с данными разных типов, разработчикам компилятора Turbo Pascal пришлось изрядно потрудиться. При обработке тек­ста программы компилятор анализирует типы операндов и формирует для опе­рации "+" различные машинные коды для целых, вещественных и строковых типов. Такое явление в программировании принято называть полиморфизмом. Запомните этот термин— он пригодится на следующих этапах постижения ис­кусства программирования.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания.

Например: strl := Труппа учащихся’; str2 := strl + ‘ школы-лицея’;

Приведем пример использования операции конкатенации (листинг 9.3). До­пустим, необходимо дополнить исходную строку справа символом ‘*’ до заданной длины. Такое действие иногда выполняют при формировании важных денежных документов, чтобы нельзя было ничего вписать в пустые места.

[Листинг 9.3.Дополнение строкизвездочками ‘

procedure dopstr(var s:string; n:integer);.

while length(s) 1 не разместить в тех пяти байтах, которые отведены под символы переменной s2. Фактически операция присваивания будет вы­полнена неверно, хотя никакого сообщения об ошибке не будет выдано.

Замечание

При отладке задач со строками целесообразно помещать в программу директи­ву <$R+>, которая проверяет выход за пределы диапазона изменения индекса. Однако в приведенном выше случае и это не поможет. Остается надеяться только на свою внимательность!

При передаче строки в качестве параметра процедуры совместимость строк разной длины возможна только при отключенной директиве компилятора строгой проверки типов строк ($v-). По умолчанию она включена — <$v+>, поэтому строковые параметры (и формальный, и фактический) должны бьЕТЬ одного размера. Рекомендуем использовать данную директиву, но с осторожностью, т. к. есть риск потери символов справа, если не хватит места в той строке, которая передается в качестве фактического параметра.

Читайте также:  Как опустить курсор на строку ниже

Операции отношения

Операции =, <>, >, =, 1 >’ PROGRAM 1 true

Операции отношения над строковыми данными широко используются при обработке массивов строк. Наиболее важными действиями над такими мас­сивами являются:

П сортировка массива в лексикографическом порядке; П быстрый поиск данных в отсортированном массиве; П слияние двух отсортированных массивов.

При решении данных задач используются те же самые алгоритмы, что и для числовых массивов (см. разд. 4.2.3), достаточно только заменить тип эле­ментов массива на тип string. Например, при организации электронного телефонного справочника огромный массив абонентов обычно сортируется, и за счет этого можно в считанные секунды найти телефон абонента по его фамилии.

В данном разделе приведем в качестве примера алгоритм слияния двух от­сортированных массивов строк (листинг 9.4). Допустим, происходит слия­ние двух предприятий и требуется объединить списки сотрудников таким образом, чтобы не нарушить алфавитного (лексикографического) порядка.

I Листинг 9.4. Слияние двух отсортированных массивов строк,

a: array [1. .m] of string=( ‘Абрамов 1 , ‘Григорьев’ , ‘Иванов’ , ‘Сидоров’ b:array [l..n] of string= ( ‘Васильев’ , ‘Петров ‘, ‘Яковлев’ );

var crarray [1. .m+n] of string;

k, i, j : integer; (индексы трех массивов>

for k:=l to m+n do

c[k]:=b[j]; j:=j+l; end else begin

writelnf ‘Массив с:’);

for k:=l to m+n do write (c[k],’ ‘ ) ; readln end.

Задача

Перевернуть строку, т.е. последние символы должны стать первыми, а первые последними.

Решение

s – строка;
n – середина строки;
c – меняемый символ.

Алгоритм решения задачи:

  1. Найти середину строки.
  2. Перебрать символы строки от начала до ее середины:
  1. очередной символ сохранить в переменной c;
  2. а на его место записать противоположный с конца;
  3. на место противоположного записать сохраненный в c.

Сформировать из введенного числа обратное по порядку входящих в него цифр и вывести на экран. Например, если введено число 3486, то надо вывести число 6843.

Если постепенно извлекать из первого числа последние цифры (и удалять их после этого из числа) и постепенно "дописывать" их в конец второго, то в итоге мы получим перевернутое первое число.

  • Для извлечения последней цифры числа надо найти остаток от деления его на 10.
  • Чтобы добавить цифру в конец числа, надо умножить число на 10 (сдвинуть разряды) и затем прибавить цифру-число (количество единиц).
Ссылка на основную публикацию
Как остановить презентацию на последнем слайде
Вы уже, наверное, догадались, что запустить показ презентации можно выбором команды Показ слайдов > Начать показ или простым нажатием клавиши...
Как набрать дробь на клавиатуре
Как писать дроби на клавиатуре Вид №1: вертикальная дробь Предположим, вы хотите изобразить дробь с горизонтальной чертой, которая называется винкулум....
Как найти длину стороны зная координаты вершин
Ответ Проверено экспертом 1)периметр треугольника равен AB + BC + AC. Нам надо найти длину каждой стороны по координатам их...
Как отключить будильник на планшете
Реализовать такую ​​функцию в телефоне на Android поможет бесплатная утилита Wave Alarm. Она отслеживает движение мобильника с помощью его камеры...
Adblock detector