Вопрос задан 01.10.2023 в 01:22. Предмет Информатика. Спрашивает Абдрахманова Рената.

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Романенко Лена.

эту программу можно сократить:

________________________________

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 этот символ

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Программа, которую вы предоставили, имеет несколько проблем, которые могут привести к ее неработоспособности. Давайте разберемся с ними:

  1. Ваш код использует оператор read, который читает строку с клавиатуры. Однако, если вы вводите строку с пробелами, то она будет считана только до первого пробела. Если вы хотите считать всю строку, включая пробелы, используйте readln.

  2. Ваш код пытается удалить символы из строки, используя функцию delete, но он делает это некорректно. Функция delete удаляет символы по индексу, а не по значению. Таким образом, удаление символов в цикле приведет к непредсказуемым результатам и, вероятно, ошибкам времени выполнения.

Вот исправленная версия вашей программы:

pascal
function 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. Это позволяет избежать проблем с удалением символов по индексу и обеспечивает корректную работу программы.

0 0

Похожие вопросы

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

Последние заданные вопросы в категории Информатика

Задать вопрос