Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УПП Программирование 2102,2202.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
760.32 Кб
Скачать

Var n:integer;y:string;

begin;

n:=pos(' ',x); {n=7}

y:=copy(x,n+1,length(x))'; {y=Саша}

y:=y+’ ‘+copy(x,1,n-1);

writeln(y); {y=Саша Петров}

end.

Пример 7-2. В символьной строке Х подсчитать количество K слов. Счита­ем, что число слов равно числу пробелов +1. Первый вариант программы P7_2 имеет недостаток. Если перед первым словом предложения или после послед­него имеются пробелы, или внутри фразы встречается более одного пробела разом, число найденных слов окажется больше фактического. Испра­вим программу с учетом этих обстоятельств. Во втором варианте добавлен просмотр начала фразы до первого не пробела (j – номер первого значащего символа). Затем просматривается остаток фразы, где подсчитываются только одиноч­ные пробелы (после пробела в i-ой позиции не должен стоять другой пробел). Дополните программу выдачей по отдельности всех слов предложения и их (справа) длин.

PROGRAM P7_2; {первый вариант}

Var k,I:integer; X: string;

begin

writeln(‘введите предложение’); readln (x);

k:=0;

for i:=1 to length(x) do if x[i]=' ' then k:=k+1;

коды

символы

0..32

управляющие

65..90

A..Z

97..122

a..z

128..159

А..Я (кроме Ё)

160..175

а..п (кроме ё)

224..239

р..я

240,241

Ё,ё

writeln('найдено слов=',k+1);

end.

PROGRAM P7_2; {второй вариант}

. . .

j:=1;

{пропускаем начальные пробелы}

while x[j]=' ' do j:=j+1;

for i:=j to length(x)-1 do

if (x[i]=' ')and(x[i+1]<>' ') then k:=k+1;

writeln('найдено слов=',k+1);

end.

 Представление символьных данных. Каждому символу ПК сопос­тавлен код (целое число от 0 до 255) из ASCII-таблицы (см. вы­ше). Первые 128 символов включают цифры, знаки, латинские символы. Из них символы с кодами 0..31 являются служебными (возврат каретки, перевод стро­ки и т.д.). Латинские буквы A..Z имеют коды 65..90, a..z – 97..122. Следующие 128 позиций заняты символами псевдографики и буквами национального алфавита. В кириллице буквы A..Я имеют коды 128..159, a..п – 160..175, р..я – 224..239, буквы Ё – 240, ё – 241. Замечаем, что коды заглавных и строчных букв a..п различаются на 32, а букв р..я – на 80. Очевидно, что на клавиатуре нет всех 256 знаков. Тем не менее, они могут быть отражены в прог­рамме с по­мощью своего кода в форме: #код. Так, оператор write(#65, #177,#201,#205,#187); выведет строку: “A▒╔═╗”. Символы, отсутст­вующие на клавиатуре, можно найти в справочнике, а можно и вывести вместе с их кодами на экран с помощью операторов: for i:=0 to 255 do write(chr(i),i:3,' ');. Отметим, что коды от 0 до 31 являются управляющими и, хотя многие из них имеют экранное отображение, использовать эти символы для непосредс­твен­ного вывода нельзя.

Символьные данные можно сравнивать между собой. При этом более короткая строка дополня­ется символами с кодом 0 до размеров более длинной строки. Далее последовательно слева направо коды символов сравниваются попарно из обеих строк (чей код больше – тот символ больше). Например: ‘а’<’б’; ‘а’=’а’; ’а’>’А’ (заглавные буквы имеют меньший код); ‘ВАЛЯ’<’ВАСЯ’ (расхождение в третьем символе, где ‘Л’<’C’); ‘ЯША’>’ПETP’ (буква Я больше П).

Пример 7-3. В строке S содержатся русские и латинские символы (заглавные и строчные), цифры и знаки препинания. Преобразовать все симво­лы S в заглавные. Результат занести в D. В программе Х – строка размером в один символ, куда заносятся поочередно все сим­волы из S для преобразования. В результате получим D= 'абвxyz123ABC'. Преобразование здесь осуществляет оператор вида X:=chr(ord(x[1])-32). Здесь сначала выясняется код ord(x[1]) теку­щего символа, из него вычитается 32 (т.е. вычисляется код соответст­вующей заглавной буквы), и, наконец, этот код снова преобразуется в символ.

PROGRAM P7_3;