Последовательность символов в строке (char) - Free Pascal

Узнай цену своей работы

Формулировка задачи:

В одной строке вводится последовательность символов (тип char). Ввод завершается символом <*> Определить, встречаются ли в этой последовательности символов группы из трех рядом стоящих точек. Если такие группы присутствуют, вывести номера позиций начала таких групп (то есть номер первой точки в каждой группе). Массивы нельзя использовать. Так вот, я определил количество точек и их позиции в строке (каждой по отдельности). Каким образом определить количество трех точек, которые стоят рядом (именно количество троеточий), а также номера позиции только первых точек из этих групп? Можно ли как-то обойтись без string? Если нет, то как использовать string? Прошу помощи. Заранее спасибо.
Листинг программы
  1. Program p1;
  2. var a: char;
  3. i,j,n:integer;
  4. k:real;
  5. Begin
  6. i:=0;
  7. j:=0;
  8. n:=0;
  9. while a<>('*') do
  10. begin
  11. read (a);
  12. i:=i+1;
  13. j:=j+1;
  14. if (a='.') and (a<>'*') then
  15. writeln('pos to4ki = ',j);
  16. if (a='.') and (a<>'*') then
  17. k:=k+1;
  18. end;
  19. writeln('kol-vo simvolov = ',i-1);
  20. writeln ('kol-vo tochek = ',k:2:0);
  21. readln;
  22. readln;
  23. end.

Решение задачи: «Последовательность символов в строке (char)»

textual
Листинг программы
  1. var a: char;
  2.     mt:set of byte;
  3. i,j,k:integer;
  4. Begin
  5. i:=0;j:=0;k:=0;
  6. mt:=[];
  7. repeat
  8.  read(a);
  9.  i:=i+1;
  10.  if a='.'
  11.   then
  12.    begin
  13.     if j=2 then begin include(mt,i-2);j:=0;inc(k) end
  14.            else inc(j)
  15.    end        
  16. until a='*';
  17. if k<>0 then
  18.          begin
  19.           writeln('pos:');
  20.           for i:=1 to i do if i in mt then write(i,' ')
  21.          end
  22.         else writeln('---');
  23. readln;
  24. readln;
  25. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы