Последовательность символов в строке (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
соответственно. - Запросом на ввод символа с клавиатуры программа завершает свою работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д