A, piyano satın almak için müzik aletleri satan bir mağazaya gelmiştir. Mağaza sahibi B ile yaptığı
pazarlık sonucunda 22.01.2021 tarihinde 50.000 TL
karşılığında piyanoyu almak üzere anlaşmıştır.
Piyanonun teslim tarihi olarak 20.02.2021 tarihi
belirlenmiştir. A, 20.02.2021 tarihinde mağazaya
giderek piyanoyu mağaza sahibi B'den teslim almıştır.
Yukarıdaki olaya göre aşağıda yer alan ifadelerde
hangisi doğrudur?
D
Речь идет об использовании встроенной функции языка Паскаль - функции Pos. Конечно, использование функции PosEx, появившейся в Pascal.ABC, было бы эффективнее, но будем придерживаться классической версии.
Функция Pos позволяет найти позицию первого от начала строки вхождения в эту строку подстроки. Если вхождения нет - функция возвращает ноль. Принимая оставшуюся после найденного вхождения часть строки за новую строку и повторяя поиск, можно найти все вхождения.
Задание не говорит, как организован ввод текста. Дело в том, что в Паскале строка не может содержать переход к новой строке, а текст задан двумя строками. Можно организовать ввод двух строк, можно задать текст строковыми константами, можно организовать ввод из файла. Считая, что смысл задания в поиске вхождений, принимаем задания текста несущественным и задаем текст двумя строковыми константами. Это потребует выполнения алгоритма для каждой строки, следоватеьно, нам потребуется пользовательская функция, к которой мы будем обращаться.
const
c1='Не давши слово-крепись,';
c2='А давши - Держись';
cc='давши'; { искомый контекст }
function Kol(c,ci:string):integer;
{количество вхождений ci а c }
var
p,k,l,li:integer;
begin
k:=0;
li:=Length(ci);
l:=Length(c);
repeat
p:=Pos(ci,c);
if p>0 then
begin
l:=Length(c);
Inc(k);
if p+li<l then c:=Copy(c,p+li,l-(p+li-1))
end
until (p=0) or (p+li>=l);
Kol:=k
end;
begin
Writeln('Количество вхождений равно ',Kol(c1,cc)+Kol(c2,cc))
end.
Вывод решения:
Количество вхождений равно 2
Var a:array[1..n] of integer;
i,indx,k,tr,indxx:integer;
Begin
Randomize;
For i:=1 to n do begin
A[i]:=Random(40)-20;
Write(a[i],' ');
end;
Writeln;
write('0 имеет номер: ');
For i:=1 to n do
Begin
If A[i]=0 thenwrite(i);
end;
Writeln;
indx:=0;
For i:=1 to n do
Begin
If a[i] mod 2=0 then
begin
indx += 1;
a[indx]:=a[i];
end;
end;
Write('Индекс четных элементов: ');
For i:=1 to indx do
write(a[i],' ');
For i:=1 to n do
Begin
If A[i]<0 then
Begin
inc(k);
end;
end;
Writeln;
Writeln('Кoличество отрицательных элементов: ',k);
For i:=1 to n do
Begin
If A[i] mod 3=0 then
tr:=a[i];
end;
Writeln('Кратное трем ',tr);
indxx:=0;
writeln('Индексы кратны 3: ');
For i:=1 to n do
Begin
If a[i] mod 3=0 then
begin
indxx += 1;
a[indxx]:=a[i];
write(' ',a[i]);
end;
end;
end.