Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 995

Раздел: C++
/ вопрос открыт /

Здравствуйте, эксперты!
помогите перевести код с Си на Делфи

DWORD H = 0;int i = 0;int S = 1;
for (i = lstrlen(Stroka)-1; i!= -1; i-)
{
H = (H+Stroka[i]*S) % 65535;
S*=4;
}
return H == 0? 65535: H;

где Stroka-произвольная строка символов.

Пупкин В В Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Пупкин В В (статус: 2-ой класс)
Вопрос отправлен: 2 февраля 2011, 15:58
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Пупкин В В!
подозреваю, что в строке for есть ошибка, там не i-, а i--, иначе цикл будет выполнятся бесконечно.\
Код где то такой

var h:dword;
i:integer;
s:integer;
begin
  h := 0; s := 1;
  for i = length(stroka) downto 1 do begin
    h := (h + ord(stroka[i])*s) mod 65535;
    s := s * 4;
  end;
  if h = 0 then result := 65535
  else result := h;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 2 февраля 2011, 16:05
Оценка за ответ: 5

Комментарий к оценке: спасибо за оперативность

Ответ #2. Отвечает эксперт: min@y™

На вскидку (дословный перевод), вот так:

function UndefinedFuncName(Stroka: PChar): DWORD;
var
  H: DWORD;
  i, S: Integer;
begin
  S:= 1;
  H:= 0;
 
  for i:= StrLen(Stroka) - 1 downto 0 do
    begin
      H:= (H + Byte(Stroka[i]) * S) mod $FFFF;
      S:= S * 4;
    end;
 
  if H = 0
    then Result:= $FFFF
    else Result:= H;
end;
Ахтунг! Код не проверял, возможны ошибки и неточности!

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 февраля 2011, 16:10
Оценка за ответ: 5

Комментарий к оценке: спасибо за оперативность

Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 2 февраля 2011, 16:36; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 2 февраля 2011, 16:20 [#1]:

to min@y™: и конечно же сделал одну ошибку:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 2 февраля 2011, 16:20 [#2]:

Ну что, Василий Васильевич, оперативно мы ответили?
Вопросы по коду есть?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 2 февраля 2011, 16:22 [#3]:

Цитата (Вадим К):

и конечно же сделал одну ошибку

Ты прав. Прога без отладки - это полуфабрикат.
Но код я поправил.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Пупкин В В

Пупкин В В (статус: 2-ой класс), 2 февраля 2011, 16:27 [#4]:

какой код верный то?
интересуют строки
for i = length(stroka) downto 1 do begin у Вадим К
for i:= StrLen(Stroka) - 1 downto 0 do у min@y
Вадим К

Вадим К (статус: Академик), 2 февраля 2011, 16:32 [#5]:

теперь оба. просто тип переменной stroka не известен. я предположил, что это string, а minay™ - что это pchar.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 2 февраля 2011, 16:36 [#6]:

Сишный код предполагает, что это именно указатель (char*). Я именно от этого и плясал. Типа, что заказывали, то и получили.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.