
Вопрос задан 10.03.2021 в 08:20.
Предмет Информатика.
Спрашивает Лысогор Анита.
Написать подпрограмму, которая все слова вида "<натуральное число>+<натуральное число>"
заменит на результат операции. Например: строка " undg 45+2 jf 100+1" должна быть преобразована в строку " undg 47 jf 101" Использовать заголовок: procedure Summ(var s: string); pascalABC

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

Отвечает Дунаева Юля.
// PascalABC.NET 3.4.2, сборка 1790 от 15.09.2018
// Внимание! Если программа не работает, обновите версию!
{$reference System.Data.dll}
uses System.Data;
procedure Summ(var s: string);
begin
var o := new DataTable;
s := s.RegexReplace('\d+\+\d+', m -> o.Compute(m.Value, '').ToString)
end;
begin
var s := ReadlnString('Введите строку:');
Summ(s);
s.Println
end.




Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Вот пример подпрограммы на языке PascalABC, которая заменяет все слова вида "<натуральное число>+<натуральное число>" на результат операции:
pascalprocedure Summ(var s: string); var i, j, num1, num2, sum: Integer; word, numStr1, numStr2: string; begin i := 1; while i <= Length(s) do begin // Пропускаем пробелы и символы, не являющиеся буквами или цифрами while (i <= Length(s)) and (not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9'])) do Inc(i); // Извлекаем слово j := i; while (j <= Length(s)) and (s[j] in ['a'..'z', 'A'..'Z', '0'..'9']) do Inc(j); word := Copy(s, i, j - i); // Проверяем, соответствует ли слово шаблону "<натуральное число>+<натуральное число>" if Pos('+', word) > 1 then begin numStr1 := Copy(word, 1, Pos('+', word) - 1); numStr2 := Copy(word, Pos('+', word) + 1, Length(word)); // Преобразуем строки в числа if TryStrToInt(numStr1, num1) and TryStrToInt(numStr2, num2) then begin // Выполняем операцию сложения sum := num1 + num2; // Заменяем слово на результат операции Delete(s, i, j - i); Insert(IntToStr(sum), s, i); // Сдвигаем индекс вправо на длину результата i := i + Length(IntToStr(sum)); // Продолжаем поиск со следующей позиции Continue; end; end; // Переходим к следующему слову i := j + 1; end; end;
Вы можете вызвать эту подпрограмму, передав строку в качестве параметра:
pascalvar str: string; begin str := 'undg 45+2 jf 100+1'; Summ(str); Writeln(str); end.
После выполнения кода, строка будет изменена на "undg 47 jf 101".


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

Информатика 47

Информатика 33

Информатика 67

Информатика 18

Информатика 25

Информатика 563

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