ВУЗ:
Составители:
Рубрика:
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;
Страницы
- « первая
- ‹ предыдущая
- …
- 2
- 3
- 4
- 5
- 6
- …
- следующая ›
- последняя »