Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите переписать данный код на другой язык. 
V
    Опции темы
ZLOvar
Дата 1.10.2010, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 4.6.2009
Где: Москва

Репутация: 1
Всего: 1



Здравствуйте. Появилась необходимость переписать данный код с С++ на Delphi (там есть несколько ошибок), т.к C++  я практически не знаю (да и компилятора у меня нет) прошу помощи у вас. Всем заранее спасибо за ответ. Но если не знаете Delphi, то просто исправте пожалуйста 3 ошибки в данном коде и скажите какие действия он производит. (Как я понял тут складываются коды символов слова Трололо, результат умножается на два.  Но меня смущает первый цикл, скорее всего там ошибки.) Код:
Код
#include "windows.h"

void main()
{
    DWORD ans = 0;
    char pass[] = {'T', 'r', 'o', 'l', 'o', 'l', 'o', 0};
    int (*lol)(const char*, ...) = printf;
    for(char * i = pass; *i != 0; *i ^= *(i+++1));
    for(size_t i = 0, i < 8; ans += pass[i++]);
    lol("%X\r\n", ans *= 2)
}

Ещё раз спасибо. smile


Это сообщение отредактировал(а) ZLOvar - 1.10.2010, 21:13
--------------------
Если хочешь чтобы работало - используй написанное.Если хочешь что-то понять - пиши сам. (с)
PM MAIL WWW   Вверх
bsa
Дата 1.10.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



ZLOvar
Код
#include "windows.h"
void main()
{
    DWORD ans = 0;
    char pass[] = {'T', 'r', 'o', 'l', 'o', 'l', 'o', 0};
    int (*lol)(const char*, ...) = printf;
    for(char * i = pass; *i != 0; *i ^= *(i+++1));
    for(size_t i = 0, i < 8; ans += pass[i++]);
    lol("%X\r\n", ans *= 2)
}

1. "windows.h" файл нужен, для работы с WinAPI. Но из данного API используется только DWORD, поэтому его можно игнорировать (DWORD == беззнаковое целое размером в 32 бита).
2. строчка содержит ошибку, должно быть int main()
4. создается переменная ans типа DWORD и инициализируется нулем.
5. создается массив символов, Но я бы написал так: char pass[] = "Trololo", что абсолютно тоже самое, но более читабельно
6. создаем переменную lol типа "указатель на функцию с неограниченным количеством аргументов" и присваиваем ей адрес функции printf
7. делаем ксорку каждого символа массива со следующим (pass[i] = pass[i] xor pass[i+1]), кроме последнего символа (в Си он означает конец строки, в паскале это называлось ASCIIZ строка)
8. суммируем все символы массива (сумма будет в ans)
9. присваиваем ans удвоенное его значение и вызываем функцию по указателю lol (в данном случае это будет printf) передавая новое значение ans для вывода в шестнадцатиричном виде (минимум 1 цифра, буквы заглавные), завершая вывод символами с кодами 13 и 10 (в Windows это превратится в 13, 13, 10). Эта строчка содержит ошибку - она должна завершаться точкой с запятой.
PM   Вверх
ZLOvar
Дата 2.10.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 4.6.2009
Где: Москва

Репутация: 1
Всего: 1



bsa, 
Спасибо большое! Вы мне очень помогли  smile ! Если кому надо, вот переписанная версия кода для delphi:
Код

program Test;

uses
  Windows,
  SysUtils,
  Dialogs;

var
  trololo, a : String;
  i,ans : integer;
begin
  a := '';
  ans := 0;
  trololo := 'Trololo';
  For i := 1 to Length(trololo) do
   Begin
     trololo[i] := Char(Ord(trololo[i]) XOR Ord(trololo[i+1]));
     ans := ans + Ord(trololo[i]);
   end;
  ans := ans * 2;
  ShowMessage(IntToHex(ans, 0));
end.

--------------------
Если хочешь чтобы работало - используй написанное.Если хочешь что-то понять - пиши сам. (с)
PM MAIL WWW   Вверх
~FoX~
Дата 2.10.2010, 17:50 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Код

For i := 1 to Length(trololo)-1 do 




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
ZLOvar
Дата 6.10.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 4.6.2009
Где: Москва

Репутация: 1
Всего: 1



Цитата(~FoX~ @  2.10.2010,  17:50 Найти цитируемый пост)
Выделить всёкод Pascal/Delphi
1:
    
For i := 1 to Length(trololo)-1 do 



Не нужно. С -1 не работает. В смысле выдает неправельный результат.
--------------------
Если хочешь чтобы работало - используй написанное.Если хочешь что-то понять - пиши сам. (с)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.