Читайте также:
|
|
Довільні два рядки можна порівнювати один з одним за допомогою операцій відношення (=, <>, <, >, <=, =>). Порівняння рядків відбувається зліва направо, до першого відмінного символу. Два рядки рівні, якщо вони мають однакову довжину і складаються з однакових символів, що йдуть в одному порядку. Меншим буде той рядок, в якому перший символ, що не збігається має менший порядковий номер у таблиці АSCII. Якщо рядки мають різну довжину, але в спільній частині збігаються, то меншим вважається коротший рядок. Наступні операції порівняння повертають результат TRUE.
‘Tommy’>’Harry’
‘France’= ‘France’
‘king ‘ <’kingdom’
‘Miscount’<=’Misquote’
Порівняння може дати на перший погляд несподівані результати, якщо у двох рядках перемішані маленькі і великі літери. Як пам’ятаєте маленькі літери мають більші порядкові номери у таблиці АSCII, ніж великі, тому рядок ‘рascal’ більший за рядок ‘Pascal’, який в свою чергу більший за рядок ’PASCAL’.
Несподівані результати можуть бути отримані, якщо у двох рядках присутні цифрові символи. В зв’язку з тим, що порівняння відбувається у “ словарному стилі “, не слід чекати що порівняння рядків буде відповідати поняттям порівняння чисел. Наприклад, не дивлячись на те, що 300 більше за 32, рядок ’300 ’ менший за рядок ’32’, в зв’язку з тим, що ’2’ більше за ’0’.
Приклад 17.1. Задано текст, який складають слова, які відокремлені одне від одного комами, а за останнім крапка. Визначити та надрукувати слова, у яких попереднє слово коротше та наступне довше за дане.
Program words_short_long;{}
var s:array[1..30] of string[11];
st:string; k,ks:integer; i:byte; f2,f1:text;
begin assign(f1,'strdlina.dat'); reset(f1);
assign(f2,'strdlinr.pas'); rewrite(f2);
readln(f1,st); {1 - введення рядка даних}
writeln(f2,st); i:=1; {2 – виведення рядка даних у файл результатів}
while length(st)<>0 do {3 – поки не всі слова прочитані}
begin k:=pos(',',st); {4 – відшукуємо позицію коми}
if k=0 then k:=pos('.',st); {5 – або позицію крапки}
s[i]:=copy(st,1,k-1);{6 – копіюємо слово без коми}
delete(st,1,k);i:=i+1;{7 – видаляємо поточне слово і збільшуємо значення лічильника на одиницю}
end; writeln(f2,'a) result');
ks:=i-1;{8 - запам'ятовуємо кількість слів тексту у змінній ks }
if ks>2 then for i:=2 to ks-1 do
begin if (length(s[i-1])<length(s[i])) and (length(s[i])<length(s[i+1])) then
write(f2,s[i],' ');{9 – якщо кількість слів у тексті більша за 2, порівнюємо довжину поточного слова з довжиною попереднього та наступного слів і запам'ятовуємо кількість відповідних умові слів }
end; writeln(f2); close(f2); End.
Заданий текст
nose,flesh,protest,objection,gallant,keel,nostril,publisher,justification.
a) Result
flesh protest nostril publisher
Приклад 17.2а. Задано текст, що складається із слів, які відокремлені одне від одного пробілами. Створити рядок, у якому ці слова будуть розташовані у зворотньому порядку.
Program reverse;
var f1:text; word,ost,nst:string; sym:integer;
begin assign(f1,'reversrr.pas'); rewrite(f1);
nst:=' '; read(ost); ost:=concat(ost,' ');
writeln(f1,'ost',ost);
while ost<>' ' do begin
sym:=pos(' ',ost); writeln(f1,'sym=',sym);
word:=copy(ost,1,sym); writeln(f1,'word=',word);
nst:=concat(word,nst); writeln(f1,'nst=',nst);
delete(ost,1,sym); writeln(f1,'ost=',ost); end;
writeln(f1); writeln(f1,'Print new string');
writeln(f1,'****************************************');
writeln (f1,nst);
writeln(f1,'****************************************');
close(f1); end.
Отримані результати мають вигляд:
ostqqq eee ttttt yyyyy aaaaa dddd
sym=4
word=qqq
nst=qqq
ost=eee ttttt yyyyy aaaaa dddd
sym=4
word=eee
nst=eee qqq
ost=ttttt yyyyy aaaaa dddd
sym=6
word=ttttt
nst=ttttt eee qqq
ost=yyyyy aaaaa dddd
sym=6
word=yyyyy
nst=yyyyy ttttt eee qqq
ost=aaaaa dddd
sym=6
word=aaaaa
nst=aaaaa yyyyy ttttt eee qqq
ost=dddd
sym=5
word=dddd
nst=dddd aaaaa yyyyy ttttt eee qqq
ost=
Print new string
****************************************
dddd aaaaa yyyyy ttttt eee qqq
****************************************
Приклад 17.2б. Задано текст, що складається із слів, які відокремлені одне від одного пробілами. Створити рядок, у якому ці слова будуть розташовані у зворотньому порядку. У цій програмі рядок слів записується у масив.
Program reverse;
var f,f1:text; word:array [1..6] of string; ost,nst:string;
sym,i:integer;
begin assign(f1,'reversr.pas'); rewrite(f1);
nst:=' '; read(ost); ost:=concat(ost,' ');
writeln(f1,ost); i:=1;
while ost<>' ' do
begin sym:=pos(' ',ost);
word[i]:=copy(ost,1,sym);
nst:=concat(word[i],nst);
delete(ost,1,sym); end;
writeln(f1); writeln(f1,'Print new string');
writeln(f1,'****************************************');
writeln (f1,nst);
writeln(f1,'****************************************');
close(f1); end.
Отримані результати мають вигляд:
ddd bbbbb ffffff aaaaaa zzzzzz
Print new string
****************************************
zzzzzz aaaaaa ffffff bbbbb ddd
****************************************
Приклад 17.3 Задано десять слів. Розташувати слова у алфавітному порядку.
program alfavit;
uses crt; {Розділ об’яв }
const lsize=10;
var dlina:1..lsize;
lines:array[1..lsize] of string;
sym,vlist:integer; f,f1:text;
begin clrscr; {Розділ інструкцій}
assign(f,'alfavit.dat'); reset(f);
assign(f1,'alfavitr.pas'); rewrite(f1);
writeln(f1,'danі');
for vlist:=1 to lsize do
begin readln(F,lines[vlist]);
writeln(f1,'lines=',lines[vlist]); end;
writeln(f1,'rezalt');
for vlist:=1 to lsize do
begin dlina:=1;
for sym:=2 to lsize do
if (lines[sym]<lines[dlina]) and (lines[sym]<>' ')
then dlina:=sym; writeln(f1,'lines=',lines[dlina]);
lines[dlina]:=' '; end; close(f1); end.
Отримані результати мають вигляд:
danі
zzzz mmmmmm ssssss aaa bbbb ccc ddddd eeeee ffffff gggg
result
aaa bbbb ccc ddddd eeeee ffffff gggg mmmmmm ssssss zzzz
Дата добавления: 2014-11-24; просмотров: 107 | Поможем написать вашу работу | Нарушение авторских прав |