Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка в цикле Паскаля: правильная инициализация для суммирования цифр в строке

Delphi , Базы данных , Индексы

При программировании на Паскале иногда можно столкнуться с ошибками, которые кажутся неочевидными и трудноуловимыми. Одна из таких ошибок связана с суммированием цифр в строке, когда цикл начинается не с правильной инициализации. Рассмотрим пример, который был представлен в контексте:

procedure subRoutine1(num : string);
var
  i : byte;
  value : integer;
  sum : integer;
begin
  sum := 0;
  for i := 0 to length(num) do
  begin
    value := Integer(num[i]) - 48;
    sum := sum + value;
  end;
  writeln(sum);
end;

В этом примере автор пытается пройтись по строке num и сложить все цифры, которые в ней содержатся. Однако, результатом является -12, а не ожидаемый 32.

Причина ошибки

Ошибка заключается в том, что цикл начинается с i := 0, а не с i := 1. В Паскале строки хранятся в виде массива байтов, где первый элемент содержит длину строки. Таким образом, num[0] содержит значение 4 (длина строки 8888), что приводит к неверному результату после вычитания 48.

Как исправить ошибку

Чтобы исправить ошибку, нужно начать цикл с i := 1, чтобы обойти первый элемент строки, который содержит длину.

for i := 1 to length(num) do

Также стоит обратить внимание на способ преобразования символа в число. Вместо преобразования в Integer, можно использовать функцию Ord(), которая возвращает числовое значение символа. Более того, можно использовать Ord() для вычитания значения '0', чтобы получить числовую стоимость символа.

value := Ord(num[i]) - Ord('0');

Пример правильного решения

Вот правильный вариант кода, который суммирует цифры в строке:

procedure subRoutine1(num : string);
var
  i : integer;
  value : integer;
  sum : integer;
begin
  sum := 0;
  for i := 1 to length(num) do
  begin
    value := Ord(num[i]) - Ord('0');
    sum := sum + value;
  end;
  writeln(sum);
end;

Заключение

При программировании на Паскале важно помнить о том, как хранятся строки и как работать с ними. Начало цикла с i := 1 поможет избежать ошибки, связанной с первым элементом строки, который содержит длину. Использование функции Ord() также упрощает преобразование символов в числа.

Создано по материалам из источника по ссылке.

В контексте рассмотрена ошибка в цикле Паскаля, связанная с неправильной инициализацией для суммирования цифр в строке.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Индексы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:54:09/0.0032789707183838/0