Последовательность символов в строке (char) - Free Pascal
Формулировка задачи:
В одной строке вводится последовательность символов (тип char). Ввод завершается символом <*> Определить, встречаются ли в этой последовательности символов группы из трех рядом стоящих точек. Если такие группы присутствуют, вывести номера позиций начала таких групп (то есть номер первой точки в каждой группе). Массивы нельзя использовать.
Так вот, я определил количество точек и их позиции в строке (каждой по отдельности). Каким образом определить количество трех точек, которые стоят рядом (именно количество троеточий), а также номера позиции только первых точек из этих групп? Можно ли как-то обойтись без string? Если нет, то как использовать string?
Прошу помощи. Заранее спасибо.
Program p1;
var a: char;
i,j,n:integer;
k:real;
Begin
i:=0;
j:=0;
n:=0;
while a<>('*') do
begin
read (a);
i:=i+1;
j:=j+1;
if (a='.') and (a<>'*') then
writeln('pos to4ki = ',j);
if (a='.') and (a<>'*') then
k:=k+1;
end;
writeln('kol-vo simvolov = ',i-1);
writeln ('kol-vo tochek = ',k:2:0);
readln;
readln;
end.Решение задачи: «Последовательность символов в строке (char)»
textual
Листинг программы
var a: char;
mt:set of byte;
i,j,k:integer;
Begin
i:=0;j:=0;k:=0;
mt:=[];
repeat
read(a);
i:=i+1;
if a='.'
then
begin
if j=2 then begin include(mt,i-2);j:=0;inc(k) end
else inc(j)
end
until a='*';
if k<>0 then
begin
writeln('pos:');
for i:=1 to i do if i in mt then write(i,' ')
end
else writeln('---');
readln;
readln;
end.
Объяснение кода листинга программы
В данном коде представлена простая реализация алгоритма поиска позиций символов . и *.
- Объявлены следующие переменные:
a- символ, который считывается из файла или с консоли;mt- множество (set of byte), которое будет хранить позиции символов.;i,j,k- целочисленные переменные для хранения счетчиков.
- Инициализированы начальные значения счетчиков:
i- счетчик количества символов, которые уже были считаны;j- счетчик количества найденных символов.;k- счетчик количества найденных символов*.
- Пока не будет считан символ '*', выполняются следующие действия:
- Считывается следующий символ из файла или с консоли;
- Увеличивается счетчик
i; - Если считанный символ равен
., то выполняются следующие действия:- Если
jравно 2, то включается позицияi-2в множествоmtи обнуляетсяj, аkувеличивается на 1; - Если
jравно 0, то увеличиваетсяj.
- Если
- Если после выполнения всех действий символ '*' так и не был считан, то выводится сообщение
---. - Если после выполнения всех действий символ '*' был считан, то выводятся позиции символов
.в следующем формате:pos: i j k, гдеi,j,k- это значения счетчиковi,j,kсоответственно. - Запросом на ввод символа с клавиатуры программа завершает свою работу.