Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2012, 13:08   #1
YekaterinaMel
Новичок
Джуниор
 
Регистрация: 15.06.2012
Сообщений: 1
По умолчанию Это программа в Delphi по переводу из одной системы исчисления в другую(от2до10)Нужно объяснить КАЖДУЮ строчку что в ней делаеться

Код:
function TForm1.AddStr(s1, s2: String; notation: byte): String;
  var s: String;
      i, len, res: Integer;
  begin
    s := '';
    if Length(s1) > Length(s2) then len := Length(s1) else len := Length(s2);
    for I := Length(s1) to len do s1 := '0' + s1;
    for I := Length(s2) to len do s2 := '0' + s2;
    for I := 1 to len + 1 do s := '0' + s;
    for I := len + 1 downto 2 do
      begin
        res := byte(s1[i]) + byte(s2[i]) + byte(s[i]) - 48 * 3;
        if res >= notation then
          begin
            s[i - 1] := char(byte(s[i - 1]) + 1);
            s[i] := char(res + 48 - notation);
          end
          else
            s[i] := char(res + 48);
      end;
    while (s[1] = '0') and  (Length(s) > 1) do Delete(s, 1, 1);
    AddStr := s;
  end;

function TForm1.MulStr(s: String; c: char; notation: byte): String;
  var s1: String;
      i, len, res: Integer;
      int_res, rem_res: byte;
  begin
  len := Length(s);
  s1 := '';
  for I := 1 to len + 1 do s1 := s1 + '0';
  for I := len + 1 downto 2 do
    begin
      res := (byte(s[i - 1]) - 48) * (byte(c) - 48);
      int_res := res div notation;
      rem_res := res mod notation;
      rem_res := rem_res + byte(s1[i]) - 48;
      if rem_res >= notation then
        begin
          int_res := int_res + 1;
          rem_res := rem_res - notation;
        end;
      s1[i] := char(rem_res + 48);
      rem_res := int_res + byte(s1[i - 1]) - 48;
      s1[i - 1] := char(rem_res + 48);
    end;
  while (s1[1] = '0') and  (Length(s1) > 1) do Delete(s1, 1, 1);
  MulStr := s1;
  end;

function TForm1.ConvertNotation(s1: String; from_not, to_not: byte): String;
  var s2, s, mul_s: String;
      i, len: Integer;
  begin
  s := '0';
  len := Length(s1);
  mul_s := '1';
  for I := len downto 1 do
    begin
    s2 := MulStr(mul_s, s1[i], to_not);
    s := AddStr(s, s2, to_not);
    mul_s := MulStr(mul_s, char(from_not + 48), to_not);
    end;

   while (s[1] = '0') and  (Length(s) > 1) do Delete(s, 1, 1);
   ConvertNotation := s;
  end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Convert;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if byte(Key) - 48 > StrToInt(cb_from.Items[cb_from.ItemIndex]) - 1 then Key := #0;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Convert;
end;

procedure TForm1.cb_fromChange(Sender: TObject);
begin
Convert;
end;

procedure TForm1.Convert;
begin
Edit2.Text := ConvertNotation(Edit1.Text,
  StrToInt(cb_from.Items[cb_from.ItemIndex]), StrToInt(cb_to.Items[cb_to.ItemIndex]));
end;

end.

Последний раз редактировалось Stilet; 15.06.2012 в 18:05.
YekaterinaMel вне форума Ответить с цитированием
Старый 15.06.2012, 17:14   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Берите учебник и ищите объяснение каждой строчки самостоятельно. Глядишь, к концу программы даже что-то понимать начнете.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из одной системы исчисления в другую. Svop Помощь студентам 7 20.12.2010 19:00