Не могу понять, что я делаю не так - Pascal ABC

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

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

Написать подпрограмму, которая в строке символов удаляет из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, ab+0.1973-1.1 преобразуется в ab+0.19-1.1). Код:
Листинг программы
  1. var
  2. s:string;
  3. pd,ps,i:integer;
  4. begin
  5. readln(s);
  6. pd:=pos('.', s);
  7. i:=1;
  8. while (i<pd) do
  9. begin
  10. while (s[i]<>'.') do
  11. inc(i);
  12. pd:=i;
  13. inc(i);
  14. while (i<pd) and (ord(s[i])>=48) and (ord(s[i])<=57) do
  15. inc(i);
  16. if((i-pd-1)>2) then
  17. begin
  18. delete (s,pd+3,i-pd-3);
  19. pd:=pd-(i-pd-3);
  20. end;
  21. end;
  22. writeln(s);
  23. end.
По итогу получаю то же, что вводил.

Решение задачи: «Не могу понять, что я делаю не так»

textual
Листинг программы
  1. const cf=['0'..'9'];
  2. var s:string;
  3.     i,k:integer;
  4. begin
  5. readln(s);
  6. i:=1;
  7. while i<length(s)-1 do
  8. if (s[i] in cf)and(s[i+1] in cf)then
  9.  begin
  10.   k:=i+2;
  11.   while (k<=length(s))and(s[k] in cf) do  delete(s,k,1);
  12.   i:=k;
  13.  end
  14. else i:=i+1;
  15. writeln(s);
  16. end.

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

  1. const cf=['0'..'9']; - объявляется константа cf, которая содержит цифры от 0 до 9.
  2. var s:string; - объявляется переменная s типа string, которая будет использоваться для хранения вводимой строки.
  3. i,k:integer; - объявляются две переменные типа integer, i и k, которые будут использоваться для инкремента и декремента счетчика.
  4. readln(s); - считывается ввод пользователя в переменную s.
  5. i:=1; - устанавливается начальное значение счетчика i равным 1.
  6. while i<length(s)-1 do - начинается цикл while, который будет выполняться до тех пор, пока i меньше длины строки s-1.
  7. if (s[i] in cf)and(s[i+1] in cf) then - проверяется условие: является ли текущий символ в строке s и следующий символ в строке s цифрами из константы cf.
  8. k:=i+2; - если условие истинно, то устанавливается значение счетчика k равным i+2.
  9. while (k<=length(s))and(s[k] in cf) do - начинается внутренний цикл while, который будет выполняться до тех пор, пока k меньше длины строки s и символ в строке s является цифрой из константы cf.
  10. delete(s,k,1); - удаляется символ в строке s, начиная с позиции k.
  11. i:=k; - после удаления символа, значение счетчика i устанавливается равным значению счетчика k.
  12. end; - закрывается внутренний цикл while.
  13. writeln(s); - выводится на экран строка s.
  14. end. - завершается программа.

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


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

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

12   голосов , оценка 3.833 из 5

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

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

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