Помогите перевести функцию на паскаль

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Помогите перевести функцию на паскаль


Name: ZASHIFR
Params: P1
Return: String
Example: ZASHIFR(P1)

FUNCTION ZASHIFR(P1)

LOCAL L2, L3 := ""

IF VALTYPE(P1) == "A"

FOR L2 := 1 TO LEN(P1)

P1[L2] := ZASHIFR(P1[L2])

NEXT

RETURN P1

ELSE

FOR L2 := 1 TO LEN(P1)

L3 := L3 + CHR(256 - ASC(SUBSTR(P1, L2, 1)))

NEXT

ENDIF
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#3
ЭТО BASIC, какой-то из его вариантов.
А функция рекурсивно "типа шифрует" что-то.
 
I

isqoff

#4
блин в принципе перевести сложно(в паскале нет функции на проверку типа данных (аналог vartype)) . Вот если бы было само задание,
то можно было бы что-нибудь мудрить :not
конкретно : какие данные вводятся на проверку и что на выход???
 

sinkopa

Well-known member
17.06.2009
344
4
#5
Помогите перевести функцию на паскаль
Name: ZASHIFR
Params: P1
Return: String
Example: ZASHIFR(P1)

FUNCTION ZASHIFR(P1)
LOCAL L2, L3 := ""
IF VALTYPE(P1) == "A"
FOR L2 := 1 TO LEN(P1)
P1[L2] := ZASHIFR(P1[L2])
NEXT
RETURN P1
ELSE
FOR L2 := 1 TO LEN(P1)
L3 := L3 + CHR(256 - ASC(SUBSTR(P1, L2, 1)))
NEXT
ENDIF
Ба! Этож Клиппер! Старый дедушка Клиппер! :))
Смысл кода в том что в клиппере переменные типизируются в контексте использования.
Т.е. P1 в равной степени может быть как строчкой так и массивом строк.
Чтобы проверить - втулили функцию "VALTYPE(P1)".
Кому интересно, вот выдержка из мануала:
VALTYPE() возвращает простейший символ,соответствующий типу данных:
__________________________________
A массив L логическая переменная
B блок N цифра
С символ M поле памяти (memo)
D дата O объект
U NIL
__________________________________
Короче... В Delphi это будет так:
Код:
...
...
var
Form1: TForm1;
P: string;
PP: array of string;
implementation

{$R *.dfm}

function ZASHIFR(P1: string): String; overload;
var
L2: Integer;
begin
SetLength(Result,Length(P1));
for L2 := 1 to Length(P1) do
Result[L2] := Chr(256 - Ord(P1[L2]));
end;

procedure ZASHIFR(var P1: array of string); overload;
var
L2: Integer;
begin
for L2 := 0 to Length(P1)-1 do
P1[L2] := ZASHIFR(P1[L2]);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Инициализируем переменные
P := 'BLA BLA BLA BLA';
SetLength(PP,10);
for i := 0 to Length(PP)-1 do
PP[i] := 'BLA BLA '+ IntToStr(i);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
// Первый клик по кнопке - шифруем
// Второй клик - дешифруем и т.д.

P := ZASHIFR(P);
ZASHIFR(PP);

// Выводим результат шифровки/дешифровки
Edit1.Text := P;
Memo1.Clear;
for i := 0 to Length(PP)-1 do
Memo1.Lines.Add(PP[i]);
end;
В общем все просто... (если знаешь как)... :not
 
G

Guest

#6
Да функа была написана на clipper в общем она была вытащена путем декомпиляции из bti7.exe
находиться она в lib.udf смысл этой функции шифровка/расшифровка из файла bti7.par вот я и пытаюсь
сделать это только на делфи
Кому интересно архив прилагаю.
Ссылка на файл
 
Статус
Закрыто для дальнейших ответов.