Прога не работает, объясните почему и как это исправить. 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
