Не могу понять, что я делаю не так - Pascal ABC
Формулировка задачи:
Написать подпрограмму, которая в строке символов удаляет из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, ab+0.1973-1.1 преобразуется в ab+0.19-1.1).
Код:
По итогу получаю то же, что вводил.
Листинг программы
- var
- s:string;
- pd,ps,i:integer;
- begin
- readln(s);
- pd:=pos('.', s);
- i:=1;
- while (i<pd) do
- begin
- while (s[i]<>'.') do
- inc(i);
- pd:=i;
- inc(i);
- while (i<pd) and (ord(s[i])>=48) and (ord(s[i])<=57) do
- inc(i);
- if((i-pd-1)>2) then
- begin
- delete (s,pd+3,i-pd-3);
- pd:=pd-(i-pd-3);
- end;
- end;
- writeln(s);
- end.
Решение задачи: «Не могу понять, что я делаю не так»
textual
Листинг программы
- const cf=['0'..'9'];
- var s:string;
- i,k:integer;
- begin
- readln(s);
- i:=1;
- while i<length(s)-1 do
- if (s[i] in cf)and(s[i+1] in cf)then
- begin
- k:=i+2;
- while (k<=length(s))and(s[k] in cf) do delete(s,k,1);
- i:=k;
- end
- else i:=i+1;
- writeln(s);
- end.
Объяснение кода листинга программы
- const cf=['0'..'9']; - объявляется константа cf, которая содержит цифры от 0 до 9.
- var s:string; - объявляется переменная s типа string, которая будет использоваться для хранения вводимой строки.
- i,k:integer; - объявляются две переменные типа integer, i и k, которые будут использоваться для инкремента и декремента счетчика.
- readln(s); - считывается ввод пользователя в переменную s.
- i:=1; - устанавливается начальное значение счетчика i равным 1.
- while i<length(s)-1 do - начинается цикл while, который будет выполняться до тех пор, пока i меньше длины строки s-1.
- if (s[i] in cf)and(s[i+1] in cf) then - проверяется условие: является ли текущий символ в строке s и следующий символ в строке s цифрами из константы cf.
- k:=i+2; - если условие истинно, то устанавливается значение счетчика k равным i+2.
- while (k<=length(s))and(s[k] in cf) do - начинается внутренний цикл while, который будет выполняться до тех пор, пока k меньше длины строки s и символ в строке s является цифрой из константы cf.
- delete(s,k,1); - удаляется символ в строке s, начиная с позиции k.
- i:=k; - после удаления символа, значение счетчика i устанавливается равным значению счетчика k.
- end; - закрывается внутренний цикл while.
- writeln(s); - выводится на экран строка s.
- end. - завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д