Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Кто сможет перевести код javascript`a в код Delphi


Автор: dilik 9.2.2007, 10:00
Для тех кто знаком с яваскриптами и еще лучше знает Delphi!  smile 
Вот код яваскрипта, надо его переделать в код Delphi! Кто поможет? 

Код

 <script language=javascript>
ax=0;
function writeTable() {
    ax=Math.round(Math.random()*26);
    alphaArray=new Array("a", "n", "b", "d", "f", "h", "{", "i", "l", "v", "x", "z", "I", "J", "M", "N", "o", "O", "R", "S", "T", "U", "m", "6", "^", "u", "_", "[", "]")
    table="<table border=0 cellspacing=1 cellpadding=1 width='40%'><tr>"
    j=1;
    for ( i = 99 ; i >= 0 ; i-- ) {
        a=Math.round(Math.random()*26);
        if ( i%9 == 0 &&  i < 89 ) 
            a=ax;
        table+="<td class='numtd'>"+i+"</td><td class='symtd'>"+alphaArray[a]+"</td>"
        if ( j%10 == 0 ) 
            table+="</tr><tr>"    
        j++
    }
    table+="</table>"
    sym.innerHTML=table
    sh.innerHTML=""
}
function showAnswer() {
    sh.innerHTML=alphaArray[ax]
    sym.innerHTML="<h1><a href='javascript:writeTable()'>Невероятно:)(! Попробуем еще разок?</a></h1>"
}
</SCRIPT>


Кстати, вот примерный перевод в код Delphi. Может есть неточности, или вы предложите вариант универсальней. А главное как перевести функцию Result в код Delphi!

Код

 const
      alphaArray: Array[0..28] of char = ('a', 'n', 'b', 'd', 'f', 'h', '{', 'i', 'l', 'v', 'x', 'z', 'I', 'J', 'M', 'N', 'o', 'O', 'R', 'S', 'T', 'U', 'm', '6', '^', 'u', '_', '[', ']');
  var
      ax: Integer = 0;
      sh_innerHTML: String;

implementation

{$R *.dfm}

function writeTable(): String;
 var   table: String;
       i, j, a: Integer;
begin
  Randomize;
  ax := random(27);
  table := '<table border=0 cellspacing=1 cellpadding=1 width="40%"><tr>';
  j :=1;
  for i := 99 downto 0 do
  begin
      a := random(27);
      if (i mod 9 = 0) and (i < 89) then
        a := ax;
        table := table + '<td class="numtd">'+IntToStr(i)+'</td><td class="symtd">'+alphaArray[a]+'</td>';
        if (j mod 10 = 0) then
          table := table + '</tr><tr>';
        Inc(j);
  end;

  Result := table + '</table>';
end;

function showAnswer(): String;
begin
  sh_innerHTML := alphaArray[ax];
  Result := '<h1><a href="javascript:writeTable()">Невероятно:)(! Попробуем еще разок?</a></h1>';
end;

Автор: dilik 9.2.2007, 12:27
Вместо table предлагаю использовать StringGrid smile 

Автор: Rennigth 9.2.2007, 12:51
что-то на подобие, java-у незнаю, но чуток понимаю.  Что такое  sym и  sh ты не описал такшто звиняй, оставил как есть.


Код

const
  C_ALPHA_ARRAY: array[0..28] = ("a", "n", "b", "d", "f", "h", "{", "i", "l", "v", "x", "z", "I", "J", "M", "N", "o", "O", "R", "S", "T", "U", "m", "6", "^", "u", "_", "[", "]")

var
  FAX: Integer;

procedure WriteTable;
const
  C_NUM1: Integer = 26;
var
  FAX: Integer;
  i, j: Integer;
  lA: Integer;
  lTable: TStingList;
begin
  Randomize;
  lTable := TStringList.Create;
  try
    j := 1;
    lAX := Round(Random * C_NUM1);
    lTable.Add('"<table border=0 cellspacing=1 cellpadding=1 width='40%'><tr>"');
    for i := 99 downto 0 do
    begin
      lA := Round(Random * C_NUM1);
      if (i = 0) or (i < 89) then
        lA := lAX;
      lTable.Add('"<td class=''numtd''>"'+ i +'"</td><td class=''symtd''>"' +
        C_ALPHA_ARRAY[lA] + '"</td>"');
      if j mod 10 = 0 then { èçâèíè, íåçíàþ ÷òî òàêîå %, ìîãó îøèáàòüñÿ}
        lTable.Add('"</tr><tr>"');
      Inc(j);
    end;
    lTable.Add('"</table>"');


    sym.innerHTML := lTable.Text;
    sh.innerHTML := '""';

  finally
    lTable.Free;
  end;
end;

procedure ShowAnswer;
begin
  sh.innerHTML = C_ALPHA_ARRAY[FAX];
  sym.innerHTML = '"<h1><a href=''javascript:writeTable()''>Íåâåðîÿòíî:)(! Ïîïðîáóåì åùå ðàçîê?</a></h1>"';
end;



Добавлено @ 12:57 
т.е. так:
Код

const
  C_ALPHA_ARRAY: array[0..28] = ('a', 'n', 'b', 'd', 'f', 'h', '{', 'i', 'l', 'v', 'x', 'z', 'I', 'J', 'M', 'N', 'o', 'O', 'R', 'S', 'T', 'U', 'm', '6', '^', 'u', '_', '[', ']');

var
  FAX: Integer;

procedure WriteTable;
const
  C_NUM1: Integer = 26;
var
  FAX: Integer;
  i, j: Integer;
  lA: Integer;
  lTable: TStingList;
begin
  Randomize;
  lTable := TStringList.Create;
  try
    j := 1;
    lAX := Round(Random * C_NUM1);
    lTable.Add('<table border=0 cellspacing=1 cellpadding=1 width='40%'><tr>');
    for i := 99 downto 0 do
    begin
      lA := Round(Random * C_NUM1);
      if (i = 0) or (i < 89) then
        lA := lAX;
      lTable.Add('<td class=''numtd''>'+ i +'</td><td class=''symtd''>' +
        C_ALPHA_ARRAY[lA] + '</td>');
      if j mod 10 = 0 then { èçâèíè, íåçíàþ ÷òî òàêîå %, ìîãó îøèáàòüñÿ}
        lTable.Add('</tr><tr>');
      Inc(j);
    end;
    lTable.Add('</table>');


    sym.innerHTML := lTable.Text;
    sh.innerHTML := '';

  finally
    lTable.Free;
  end;
end;

procedure ShowAnswer;
begin
  sh.innerHTML = C_ALPHA_ARRAY[FAX];
  sym.innerHTML = '<h1><a href=''javascript:writeTable()''>Íåâåðîÿòíî:)(! Ïîïðîáóåì åùå ðàçîê?</a></h1>';
end;


Автор: Rennigth 9.2.2007, 13:09
Блин, как всегда, сначала напишу а потом только проверю... smile
Код

const
  C_ALPHA_ARRAY: array[0..28] of Char = ('a', 'n', 'b', 'd', 'f', 'h', '{', 'i', 'l', 'v', 'x', 'z', 'I', 'J', 'M', 'N', 'o', 'O', 'R', 'S', 'T', 'U', 'm', '6', '^', 'u', '_', '[', ']');

var
  FAX: Integer;

procedure WriteTable;
const
  C_NUM1: Integer = 26;
var
  FAX: Integer;
  i, j: Integer;
  lA: Integer;
  lTable: TStringList;
begin
  Randomize;
  lTable := TStringList.Create;
  try
    j := 1;
    lA := Round(Random * C_NUM1);
    lTable.Add('<table border=0 cellspacing=1 cellpadding=1 width=''40%''><tr>');
    for i := 99 downto 0 do
    begin
      lA := Round(Random * C_NUM1);
      if (i mod 9 = 0) or (i < 89) then
        lA := FAX;
      lTable.Add('<td class=''numtd''>' + IntToStr(i) + '</td><td class=''symtd''>' +
        C_ALPHA_ARRAY[lA] + '</td>');
      if j mod 10 = 0 then { èçâèíè, íåçíàþ ÷òî òàêîå %, ìîãó îøèáàòüñÿ}
        lTable.Add('</tr><tr>');
      Inc(j);
    end;
    lTable.Add('</table>');


    sym.innerHTML := lTable.Text;
    sh.innerHTML := '';

  finally
    lTable.Free;
  end;
end;

procedure ShowAnswer;
begin
  sh.innerHTML = C_ALPHA_ARRAY[FAX];
  sym.innerHTML = '<h1><a href=''javascript:writeTable()''>Íåâåðîÿòíî:)(! Ïîïðîáóåì åùå ðàçîê?</a></h1>';
end;


Автор: dilik 9.2.2007, 17:49
спасибо smile 

Вот еще небольшой вопросик, как взять любой символ из массива символов и присвоить конкретной ячейке StringGrida?

Я пробовал так:

Объявляю массив:
Код

alpha: Array[0..28] of char = ('a', 'n', 'b', 'd', 'f', 'h', '{', 'i', 'l', 'v', 'x', 'z', 'I', 'J', 'M', 'N', 'o', 'O', 'R', 'S', 'T', 'U', 'm', '6', '^', 'u', '_', '[', ']');


Потом беру любое:

Код

Randomize;
a:=random(alpha[]);  // не знаю что писать в квадратных скобках
StringGrid1.Cells[1,1]:=a; 
;

Автор: Rennigth 9.2.2007, 17:59
Код

a := alpha[random(Length(alpha))]


Добавлено @ 18:05 
т.е.
Код

  a := alpha[random(Length(alpha) - 1)]


Автор: Nicholas_S 9.2.2007, 19:44
Rennigth, проще:
Код

a := alpha[random(High(alpha))]

Автор: dilik 10.2.2007, 15:24
нет, сделал все проще,вот код:

Код

alpha: Array[0..28] of char = ('a', 'n', 'b', 'd', 'f', 'h', '{', 'i', 'l', 'v', 'x', 'z', 'I', 'J', 'M', 'N', 'o', 'O', 'R', 'S', 'T', 'U', 'm', '6', '^', 'u', '_', '[', ']');

Randomize;
for k:=0 to 9 do
begin
i:=random(29);
StringGrid1.Cells[1,k]:=alpha[i];
end;

Автор: Nicholas_S 10.2.2007, 16:54
Ха-ха! Так ты бы вопрос так и ставил, а то "переведите в КОД Дельфи".

Автор: dilik 10.2.2007, 17:37
нет, на самом деле мне надо было перевести именно код яваскрипта в код делфи, но когда всё "перевелось", оказались многие строки ненужными. как говорится, всё гениальное - просто! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)