Последовательность символов в строке (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.

Объяснение кода листинга программы

В данном коде представлена простая реализация алгоритма поиска позиций символов . и *.

  1. Объявлены следующие переменные:
    • a - символ, который считывается из файла или с консоли;
    • mt - множество (set of byte), которое будет хранить позиции символов .;
    • i, j, k - целочисленные переменные для хранения счетчиков.
  2. Инициализированы начальные значения счетчиков:
    • i - счетчик количества символов, которые уже были считаны;
    • j - счетчик количества найденных символов .;
    • k - счетчик количества найденных символов *.
  3. Пока не будет считан символ '*', выполняются следующие действия:
    • Считывается следующий символ из файла или с консоли;
    • Увеличивается счетчик i;
    • Если считанный символ равен ., то выполняются следующие действия:
      • Если j равно 2, то включается позиция i-2 в множество mt и обнуляется j, а k увеличивается на 1;
      • Если j равно 0, то увеличивается j.
  4. Если после выполнения всех действий символ '*' так и не был считан, то выводится сообщение ---.
  5. Если после выполнения всех действий символ '*' был считан, то выводятся позиции символов . в следующем формате: pos: i j k, где i, j, k - это значения счетчиков i, j, k соответственно.
  6. Запросом на ввод символа с клавиатуры программа завершает свою работу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы