
Прога не работает, объясните почему и как это исправить. function stroka(s: string): string; var
x,k,i:integer; begin for i:=1 to length(s) do begin val(copy(s,i,1),x,k); if k<>0 then delete(s,pos(copy(s,i,1),s),1); end; stroka:=s; end; var s1:string; begin read(s1); write(stroka(s1)); end.

Ответы на вопрос

эту программу можно сократить:
________________________________
var
s1,s2,a:string;
begin
Readln(s1);
for var i := 0 to 9 do a += IntToStr(i);
for var i := 1 to Length(s1) do
for var k := 1 to 9 do
if s1[i] = a[k] then s2 += s1[i];
write(s2);
end.
_________________________________
for var i := 0 to 9 do a += IntToStr(i);
- заполнение массива числами от 0 до 9
for var i := 1 to Length(s1) do
for var k := 1 to 9 do
if s1[i] = a[k] then s2 += s1[i];
- двойной цикл проверяющий каждый символ в введенной строке, и в случае если символ = 1 из 10 цифр массива a прибавляет к переменной s2 этот символ



Программа, которую вы предоставили, имеет несколько проблем, которые могут привести к ее неработоспособности. Давайте разберемся с ними:
Ваш код использует оператор
read
, который читает строку с клавиатуры. Однако, если вы вводите строку с пробелами, то она будет считана только до первого пробела. Если вы хотите считать всю строку, включая пробелы, используйтеreadln
.Ваш код пытается удалить символы из строки, используя функцию
delete
, но он делает это некорректно. Функцияdelete
удаляет символы по индексу, а не по значению. Таким образом, удаление символов в цикле приведет к непредсказуемым результатам и, вероятно, ошибкам времени выполнения.
Вот исправленная версия вашей программы:
pascalfunction stroka(s: string): string; var i: integer; begin i := 1; while i <= Length(s) do begin if s[i] in ['0'..'9'] then Delete(s, i, 1) else Inc(i); end; stroka := s; end; var s1: string; begin readln(s1); // Используем readln для чтения всей строки с пробелами writeln(stroka(s1)); end.
В этой версии я использую readln
для чтения всей строки с пробелами. Затем я использую цикл while
, чтобы пройти по всем символам строки и удалить все цифры. Для этого я использую проверку s[i] in ['0'..'9']
, и если символ является цифрой, то я удаляю его с помощью Delete
. Это позволяет избежать проблем с удалением символов по индексу и обеспечивает корректную работу программы.


Похожие вопросы
Топ вопросов за вчера в категории Информатика









Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili