Язык программирования Pascal. Строки и записи. Васильев В.В - 4 стр.

UptoLike

4
строку символов S . После числа Х допустимо следом за двоеточием указать ко-
личество позиций , выделяемых для представления числа и после второго двое-
точия количество символов в дробной части (как в процедуре writeln).
Процедура Val (S, X, k) преобразует строку символов S в число Х вещест-
венного или целого типа. В переменной k возвращается ноль, если преобразо-
вание прошло успешно. В противном случае значение X не меняется, а в k со-
держится номер позиции в строке S , где стоит первый ошибочный символ .
Допустимо перед значащими цифрами числа в переменной S оставлять пробе-
лы. Если пробелы будут стоять после записи числа, то значение X не изменится
и в k окажется номер позиции первого пробела.
В задаче 1 мы напишем свою функцию , работающую со строками.
Задача 1. Напишите функцию rightposition, которая получает два пара-
метра str1 и str2 типа string и возвращает позицию начала последнего появления
str2 в str1. Например, функция rightposition(Миссисипи’, си’) дает значение 6 .
Будем считать , что если строка str2 отсутствует в строке str1, то значение
функции равно нулю . Рассмотрим два способа решения задачи.
1. Просматривая символы в строке str1 справа налево, можно вырезать под-
строку длины str2 и сравнивать результат со значением переменной str2.
Первое найденное совпадение будет искомым. Первый подход реализован
в программе Right1.
2. Можно написать вспомогательную функцию Invert, возвращающую пере-
вернутую строку- аргумент. Искомое значение можно выразить через номер
позиции, начиная с которой перевернутая подстрока str2 встречается в пе-
ревернутой строке str1. Второй подход реализован в программе Right2.
Program Right;
Uses crt;
Var s1,s2:string;
Function RightPosition(str1,str2:string):byte;
var i:integer;
Begin
RightPosition:=0;
for i:=length(str1) downto length(str2) do
if copy(str1,i-length(str2)+1,length(str2))=str2
then begin RightPosition:=i-length(str2)+1; break end;
End; {RightPosition}
Begin
Textbackground(7); Textcolor(blue); Clrscr;
write('Введите строку:'); readln(s1);
write('Введите подстроку:'); readln(s2);
writeln('RightPosition=',RightPosition(s1,s2));
readkey
End.{Right1}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Program Right2;
Uses crt;
                                         4
строкусимволовS. П осле числаХ допустимо следомзадвоеточиемуказать ко-
личество позиций , выделяемых дляпредставлениячислаи после второго двое-
точияколичество символоввдробной части (ка к в пр оцедур е writeln).
• П роцедураVal (S, X, k) – преобразуетстрокусимволовS вчисло Х вещ ест-
венного или целого типа. В переменной k возвращ аетсяноль , если преобразо-
вание прош ло успеш но. В противномслучае значение X не меняется, авk со-
держитсяномер позиции встроке S, где стоитпервый ош ибочный символ.
Д опустимо перед значащ ими циф рами числавпеременной S оставлять пробе-
лы. Е сли пробелы будут стоять после записи числа, то значение X не изменится
и вk окажетсяномер позиции первого пробела.
     В задаче 1 мы напиш емсвою ф ункцию , работаю щ ую со строками.
     За д а ча 1. Н апиш ите ф ункцию rightposition, котораяполучаетдвапара-
метраstr1 и str2 типаstring и возвращ аетпозицию началапоследнего появления
str2 вstr1. Н апример, ф ункцияrightposition(‘М ис с ис ип и’, ‘с и’) даетзначение 6.
     ♣ Будемсчитать , что если строкаstr2 отсутствуетвстроке str1, то значение
ф ункции равно нулю . Рассмотримдваспособареш ениязадачи.
1. П росматриваясимволы встроке str1 справаналево, можно вырезать под-
     строкудлины str2 и сравнивать резуль тат со значениемпеременной str2.
     П ервое най денное совпадение будет искомым. П ервый подход реализован
     впрограмме Right1.
2. М ожно написать вспомогатель ную ф ункцию Invert, возвращ аю щ ую пере-
     вернутую строку-аргумент. И скомое значение можно выразить черезномер
     позиции, начинаяс которой перевернутаяподстрокаstr2 встречаетсявпе-
     ревернутой строке str1. В торой подход реализован впрограмме Right2. ♠
Program Right;
Uses crt;
Var s1,s2:string;
Function RightPosition(str1,str2:string):byte;
  var i:integer;
  Begin
   RightPosition:=0;
   for i:=length(str1) downto length(str2) do
      if copy(str1,i-length(str2)+1,length(str2))=str2
     then begin RightPosition:=i-length(str2)+1; break end;
  End; {RightPosition}
Begin
      Textbackground(7); Textcolor(blue); Clrscr;
      write('Введите строку:'); readln(s1);
      write('Введите подстроку:'); readln(s2);
      writeln('RightPosition=',RightPosition(s1,s2));
      readkey
End.{Right1}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Program Right2;
Uses crt;