| 
| 
 | Вопрос # 4 995/ вопрос открыт / | 
 |  Здравствуйте, эксперты!помогите перевести код с Си на Делфи
 
 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™ (статус: Доктор наук), 2 февраля 2011, 16:20 [#2]:Ну что, Василий Васильевич, оперативно мы ответили? Вопросы по коду есть?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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™ (статус: Доктор наук), 2 февраля 2011, 16:36 [#6]:Сишный код предполагает, что это именно указатель (char*). Я именно от этого и плясал. Типа, что заказывали, то и получили. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |