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