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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 16:19   #1
diekster
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 23
По умолчанию Перевод Систем Счисления

Здравствуйте, Помогите пожалуйста разобраться с программой, которая переводит из десятичной СС в двоичную и восмиричную при нажатии на кнопку RADIOBUTTON. так же имеются два поля Edit в первое мы вводим изначальное Десятичное число а после нажатия на одну из двух кнопок выводится результат в другое окно Edit.Язык Delphi . Написал программу на PASCAL ABC работает, но вот значения окна ответа т.е. Edit2 не обнуляет. Язык Delphi пока новый для меня если можете помогите пожалуйста. вот код который набирал на PASCAL'е:
Код:
uses vcl;
//$VCLDESIGN+
var
  Form1: Form;
  RadioButton1: RadioButton;
  RadioButton2: RadioButton;
  Edit1: Edit;
  Edit2: Edit;
//$VCLDESIGN-

procedure RadioButton1OnClick;
var
k,l,n:integer;
flag:boolean;
s1,s:string;
begin
     k:=strtoint(edit1.text);
     flag:=true;
while flag=true do
begin
     l:=k div 2 ;
     s:=s+inttostr(k-l*2);
     k:=l;
if k<1 then flag:=false;
end;
    n:=1;
    for k:=Length(s) downto 1 do
    begin
    s1[n]:=s[k];
    n:=n+1;
    end;
    edit2.text:=(s1);
end;

procedure RadioButton2OnClick;
var
k,l,n:integer;
flag:boolean;
s1,s:string;

begin
     k:=strtoint(edit1.text);
flag:=true;
while flag=true do
begin
     l:=k div 8 ;
     s:=s+inttostr(k-l*8);
     k:=l;
if k<1 then flag:=false;
end;
    n:=1;
    for k:=Length(s) downto 1 do
    begin
    s1[n]:=s[k];
    n:=n+1;
    end;
    edit2.text:=(s1);
end;

procedure InitControls;
begin
  Form1:= Form.Create(0,0,372,334);
  Form1.InitControl(True,False,alNone,crDefault,clBtnFace,'Форма1','');
  RadioButton1:= RadioButton.Create(Form1,48,24,150,17);
  RadioButton1.InitControl(True,True,alNone,crDefault,clBtnFace,'Bin','');
  RadioButton1.PopMenu:= nil;
  RadioButton2:= RadioButton.Create(Form1,48,48,150,17);
  RadioButton2.InitControl(True,True,alNone,crDefault,clBtnFace,'Oct','');
  RadioButton2.PopMenu:= nil;
  Edit1:= Edit.Create(Form1,208,24,121,21);
  Edit1.InitControl(True,True,alNone,crDefault,clWindow,'','');
  Edit2:= Edit.Create(Form1,208,56,121,21);
  Edit2.InitControl(True,True,alNone,crDefault,clWindow,'','');
  RadioButton1.OnClick:=RadioButton1OnClick;
  RadioButton2.OnClick:=RadioButton2OnClick;
  Form1.Position:= poScreenCenter;
  Form1.Show;
end;
begin
  InitControls;
end.

Последний раз редактировалось Stilet; 04.02.2012 в 17:12.
diekster вне форума Ответить с цитированием
Старый 04.02.2012, 17:04   #2
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию

Код не читал.
Алгоритм перевода в двоичную систему:
Код:
s = '';
readln(n);
while( n <>1 ) do
      begin
      s = s + n mod 2;
      n = n div 2;
      end;
s = s + '1';
Далее переворачиваем строку(кстати быстрее было использовать процедуру insert. я просто не помню какие аргументы у нее).
в восьмеричную переводятся числа так же. МОжно еще переводить из двоичной в восьмеричную(так даже быстрее должно быть). 3 разряда двоичной СС = 1 разряд восьмеричной СС
Sna1L вне форума Ответить с цитированием
Старый 06.02.2012, 19:34   #3
diekster
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 23
По умолчанию

Люди помогите, написал эту прогу, но у меня поле ответа значение не сбрасывает... т.е. если я перевел с 10-ой СС в 2-ую и потом нажимаю в 8-ую то в поле появляеться ответ сначало в 8-ой СС а потом уже в 2-ой СС. Как это исправить?помогите пожалуйста .
diekster вне форума Ответить с цитированием
Старый 09.02.2012, 09:53   #4
diekster
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 23
По умолчанию

Вот помучился чуть чуть получилось, может быть кому нибудь надо будет вот сам код :
Код:
uses vcl;

//$VCLDESIGN+
var
  Form1: Form;
  TextLabel1: TextLabel;
  TextLabel2: TextLabel;
  RadioButton1: RadioButton;
  RadioButton2: RadioButton;
  RadioButton3: RadioButton;
  Edit1: Edit;
  Edit2: Edit;
  Button1: Button;
//$VCLDESIGN-
  M,C:array[0..15]of char;
  X,A:word;
  N:2..16;
  I:byte;
  S:string;
procedure RadioButton1OnClick;
begin
     X:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=x mod 2;
           X:=x div 2;
           I:=I+1;
           C[i]:=M[a];
     until x=0;
     for I:=I downto 1 do
         S:=concat(s,c[i]);
     edit2.text:=S;
end;

procedure RadioButton2OnClick;
begin
     X:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=x mod 8;
           X:=x div 8;
           I:=I+1;
           C[i]:=M[a];
     until x=0;
     for I:=I downto 1 do
         S:=concat(s,c[i]);
     edit2.text:=S;
end;

procedure RadioButton3OnClick;
begin
     X:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=x mod 16;
           X:=x div 16;
           I:=I+1;
           C[i]:=M[a];
     until x=0;
     for I:=I downto 1 do
         S:=concat(s,c[i]);
     edit2.text:=S;
end;


procedure Button1OnClick;
begin
     If RadioButton2.Checked=True then
        RadioButton2OnClick
     else
     If RadioButton1.Checked=True then
        RadioButton1OnClick
     else
     If RadioButton3.Checked=True then
        RadioButton3OnClick;
end;


procedure InitControls;
begin
  Form1:= Form.Create(0,0,396,148);
  Form1.InitControl(True,False,alNone,crDefault,clMedGray,'Perevod SS','');
  TextLabel1:= TextLabel.Create(Form1,40,7,98,16);
  TextLabel1.InitControl(True,True,alNone,crDefault,clMedGray,'Введите число','');
  TextLabel2:= TextLabel.Create(Form1,53,56,89,25);
  TextLabel2.InitControl(True,True,alNone,crDefault,clMedGray,'Результат','');
  RadioButton1:= RadioButton.Create(Form1,184,32,97,17);
  RadioButton1.InitControl(True,True,alNone,crDefault,clMedGray,'Bin','');
  RadioButton2:= RadioButton.Create(Form1,184,56,97,17);
  RadioButton2.InitControl(True,True,alNone,crDefault,clMedGray,'Oct','');
  RadioButton3:= RadioButton.Create(Form1,184,80,105,17);
  RadioButton3.InitControl(True,True,alNone,crDefault,clMedGray,'Hex','');
  Edit1:= Edit.Create(Form1,24,32,137,21);
  Edit1.InitControl(True,True,alNone,crDefault,clSilver,'','');
  Edit2:= Edit.Create(Form1,24,80,137,21);
  Edit2.InitControl(True,True,alNone,crDefault,clSilver,'','');
  Button1:= Button.Create(Form1,296,48,75,25);
  Button1.InitControl(True,True,alNone,crDefault,0,'Перевод','');
  TextLabel1.Font.Color:= clWhite;
  TextLabel1.Font.Size:= 10;
  TextLabel2.Font.Color:= clWhite;
  TextLabel2.Font.Size:= 10;
  RadioButton1.Font.Color:= clWhite;
  RadioButton1.Font.Size:= 10;
  RadioButton1.Tag:= 1;
  RadioButton2.Font.Color:= clWhite;
  RadioButton2.Font.Size:= 10;
  RadioButton3.Font.Color:= clWhite;
  RadioButton3.Font.Size:= 10;
  Button1.OnClick:=Button1OnClick;
  Form1.Position:= poScreenCenter;
  Form1.Show;
end;

begin
  InitControls;
  M[0]:='0';
  M[1]:='1';
  M[2]:='2';
  M[3]:='3';
  M[4]:='4';
  M[5]:='5';
  M[6]:='6';
  M[7]:='7';
  M[8]:='8';
  M[9]:='9';
  M[10]:='A';
  M[11]:='B';
  M[12]:='C';
  M[13]:='D';
  M[14]:='E';
  M[15]:='F';
end.
diekster вне форума Ответить с цитированием
Старый 09.02.2012, 10:54   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
procedure RadioButton1OnClick;
begin
     X:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=x mod 2;
           X:=x div 2;
           I:=I+1;
           C[i]:=M[a];
     until x=0;
     for I:=I downto 1 do
         S:=concat(s,c[i]);
     edit2.text:=S;
end;
Ну очень всё сложно сделано) можно намного проще и изящнее:
Код:
procedure RadioButton1OnClick;
begin
     I:=strtoint(edit1.text);
     S:= "";
     While I > 0 do
        begin
           S = inttostr(I mod 2) + S;
           I = I div 2;
        end
     edit2.text:=S;
end;
для шестнадцатиричной немного сложнее, но тоже не тяжело:

Код:
procedure RadioButton1OnClick;
begin
     I:=strtoint(edit1.text);
     S:= "";
     While I > 0 do
        begin
           case I mod 16 of
            0..9:S = inttostr(I mod 16) + S;
            10..15: S = Chr(Ord("A") + I mod 16 - 10) + S;
           end;{case}
           I = I div 16;
        end
     edit2.text:=S;
end;
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.02.2012, 19:13   #6
diekster
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Код:
procedure RadioButton1OnClick;
begin
     X:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=x mod 2;
           X:=x div 2;
           I:=I+1;
           C[i]:=M[a];
     until x=0;
     for I:=I downto 1 do
         S:=concat(s,c[i]);
     edit2.text:=S;
end;
Ну очень всё сложно сделано) можно намного проще и изящнее:
Код:
procedure RadioButton1OnClick;
begin
     I:=strtoint(edit1.text);
     S:= "";
     While I > 0 do
        begin
           S = inttostr(I mod 2) + S;
           I = I div 2;
        end
     edit2.text:=S;
end;
для шестнадцатиричной немного сложнее, но тоже не тяжело:

Код:
procedure RadioButton1OnClick;
begin
     I:=strtoint(edit1.text);
     S:= "";
     While I > 0 do
        begin
           case I mod 16 of
            0..9:S = inttostr(I mod 16) + S;
            10..15: S = Chr(Ord("A") + I mod 16 - 10) + S;
           end;{case}
           I = I div 16;
        end
     edit2.text:=S;
end;
да Согласен Короче и проще ... но сегодня на паре сделал еще короче ) вот кому интересно :
Код:
uses vcl;
const
     M:array[0..15]of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
//$VCLDESIGN+
var
  Form1: Form;
  TextLabel1: TextLabel;
  TextLabel2: TextLabel;
  RadioButton1: RadioButton;
  RadioButton2: RadioButton;
  RadioButton3: RadioButton;
  Edit1: Edit;
  Edit2: Edit;
  Button1: Button;
  Button2: Button;
//$VCLDESIGN-
  M2:array[0..20]of char;
  B,A:longint;
  I:byte;
  S:string;
  n:byte;
procedure perevod(n:byte);
begin
     B:=strtoint(edit1.text);
     I:=0;
     S:=' ';
     repeat
           A:=B mod n;
           B:=B div n;
           I:=I+1;
           M2[i]:=M[a];
     until B=0;
     for I:=I downto 1 do
         S:=concat(s,M2[i]);
     edit2.text:=S;
end;

procedure Button1OnClick;
begin
     If RadioButton2.Checked=True then
        perevod(8)
     else
     If RadioButton1.Checked=True then
        perevod(2)
     else
     If RadioButton3.Checked=True then
        perevod(16);
end;
procedure Button2OnClick;
begin
  form1.close;
end;

procedure InitControls;
begin
  Form1:= Form.Create(0,0,346,148);
  Form1.InitControl(True,False,alNone,crDefault,clMedGray,'Перевод СС','');
  TextLabel1:= TextLabel.Create(Form1,40,7,98,16);
  TextLabel1.InitControl(True,True,alNone,crDefault,clMedGray,'Введите число','');
  TextLabel2:= TextLabel.Create(Form1,53,56,89,25);
  TextLabel2.InitControl(True,True,alNone,crDefault,clMedGray,'Результат','');
  RadioButton1:= RadioButton.Create(Form1,184,32,97,17);
  RadioButton1.InitControl(True,True,alNone,crDefault,clMedGray,'Bin','');
  RadioButton2:= RadioButton.Create(Form1,184,56,97,17);
  RadioButton2.InitControl(True,True,alNone,crDefault,clMedGray,'Oct','');
  RadioButton3:= RadioButton.Create(Form1,184,80,105,17);
  RadioButton3.InitControl(True,True,alNone,crDefault,clMedGray,'Hex','');
  Edit1:= Edit.Create(Form1,24,32,137,21);
  Edit1.InitControl(True,True,alNone,crDefault,clSilver,'','');
  Edit2:= Edit.Create(Form1,24,80,137,21);
  Edit2.InitControl(True,True,alNone,crDefault,clSilver,'','');
  Button1:= Button.Create(Form1,240,16,75,25);
  Button1.InitControl(True,True,alNone,crDefault,0,'Перевод','');
  Button2:= Button.Create(Form1,240,64,75,25);
  Button2.InitControl(True,True,alNone,crDefault,0,'Выход','');
  TextLabel1.Font.Color:= clWhite;
  TextLabel1.Font.Size:= 10;
  TextLabel2.Font.Color:= clWhite;
  TextLabel2.Font.Size:= 10;
  RadioButton1.Font.Color:= clWhite;
  RadioButton1.Font.Size:= 10;
  RadioButton1.Tag:= 1;
  RadioButton2.Font.Color:= clWhite;
  RadioButton2.Font.Size:= 10;
  RadioButton3.Font.Color:= clWhite;
  RadioButton3.Font.Size:= 10;
  Button1.OnClick:=Button1OnClick;
  Button2.OnClick:=Button2OnClick;
  Form1.Position:= poScreenCenter;
  Form1.Show;
end;

begin
  InitControls;
end.
diekster вне форума Ответить с цитированием
Старый 10.02.2012, 07:14   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
procedure perevod(x:longint;n:integer;var s:string);
const d='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var c:longint;
begin
  c:=x mod n;
  x:=x div n;
  if x>0 then perevod(x,n,s);
  s:=s+d[c+1];
end;
Процедура перевода десятеричного числа в сс от 2-ой до 36-ой.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 10.02.2012, 08:44   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Процедура перевода десятеричного числа в сс от 2-ой до 36-ой.
Зачётный код) главное - чтобы на рекурсии стек не переполнился...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 10.02.2012, 09:59   #9
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Цитата:
главное - чтобы на рекурсии стек не переполнился...
интересно как он тут переполнится?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 10.02.2012, 10:02   #10
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
интересно как он тут переполнится?
на передаче параметров... как-то был такой опыт - пришлось массив на динамике делать...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача: основания систем счисления WebbMan Помощь студентам 8 23.05.2011 16:10
перевод из разных систем счисления mego4el Помощь студентам 0 29.10.2010 21:20
Перевод систем счисления 16=>10 Alex Cones Общие вопросы Delphi 3 16.05.2009 21:02
Переводы Чисел Разных Систем Счисления Рустам Общие вопросы C/C++ 1 16.11.2008 17:57