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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2010, 08:24   #1
iron_cross
Пользователь
 
Аватар для iron_cross
 
Регистрация: 23.11.2010
Сообщений: 29
Смущение Кнопка для калькулятора из 10-й в 16-ую систему счисления.

Поблема такая, калькулятор зделал еле как. Теперь нужно добавить кнопку или же сразу две, чтоб одна переводила в 10-ую, а другая в 16-ую. Если так не получится, то хотя бы создать одну кнопку чтоб она переводила из 10-й в 16-й сист.счисления, есть код программы которая переводит из 10-й в 16-ую. А теперь как этот код вставить в кнопку для перевода и что нужно подправить. Например на калькуляторе вводим 10-е число и чтоб при нажатии кнопки это число переводила в 16-ую сист.счисления.
Код:
{$APPTYPE CONSOLE} 

uses 
SysUtils; 
const z:array[0..15] of char = (′0′,′1′,′2′,′3′,′4′,′5′,′6′,′7′,′8′,′9′,′A′,′B′,′C′,′D′,′E′,′F′); 

var x,a: integer; 
s:string; 

begin 
readln(a); 
readln(x); 
s:=′′; 
if a=0 then s:=′0′ else 
if x<=16 then begin 
while a>0 do begin 
s:=z[(a mod x)]+s; 
a := a div x; 
end; 
end; 
write(s); 
readln; 
end.
Помогите люди добрые. Заранее все спасибо за помощь.

Последний раз редактировалось Stilet; 24.11.2010 в 08:30.
iron_cross вне форума Ответить с цитированием
Старый 24.11.2010, 08:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Примерно так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const z:array[0..15] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

var x,a: integer; 
s:string; 

begin
a:=StrToIntDef(Edit1.Text,0);
x:=StrToIntDef(Edit2.Text,0);
s:='';
if a=0 then s:='0' else
if x<=16 then begin
while a>0 do begin
s:=z[(a mod x)]+s;
a := a div x;
end;
end;
Caption:=s;

end;

end.
А вот теперь твое домзадание - разобраться в коде. Взять из него слова и почитать в книге что они означают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2010, 18:14   #3
iron_cross
Пользователь
 
Аватар для iron_cross
 
Регистрация: 23.11.2010
Сообщений: 29
По умолчанию

Вобщем Stilet ваша программа оказалась глючная. Я сделал калькулятор, добавил кнопку с вашим кодом но она не переводит из 10-й в 16-ую. Люди помогите, надо зделать так чтоб например ввел число, а потом нажимаешь кнопку и она переводит в 16-у сист.счисления. Вот код моего калькулятора.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Digit1: TButton;
    Digit2: TButton;
    Digit3: TButton;
    Digit4: TButton;
    Digit5: TButton;
    Digit6: TButton;
    Digit7: TButton;
    Digit8: TButton;
    Digit9: TButton;
    Digit0: TButton;
    Zap: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button1: TButton;
    Edit2: TEdit;
    procedure DigitClick(Sender: TObject);
    procedure ZapClick(Sender: TObject);
    procedure ZeroClick(Sender: TObject);
    procedure ActionClick(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  r:integer;
  m:real;
  n:string;
  a:real;
  swt:integer;

implementation

{$R *.dfm}

procedure TForm1.DigitClick(Sender: TObject);
var
  kn:TButton;
begin
  Kn:=Sender as TButton;
  If Kn.Caption<>'0' then
    if r=0 then
      begin
        Edit1.Text:=Kn.Caption;
        r:=1;
      end
   else Edit1.Text:=Edit1.Text+Kn.Caption;
   If Kn.Caption='0' then
    if Edit1.Text<>'0'then  
        if r=0 then
      begin
        Edit1.Text:=Kn.Caption;
        r:=1;
      end
   else Edit1.Text:=Edit1.Text+Kn.Caption;
end;

procedure Deistv;
begin
  a:=StrToFloat(Form1.Edit1.Text);
  If n='=' then
    begin
     If swt=1 then m:=Exp(a*Ln(Abs(m)))
       else
        m:=a;
       end;
  If n='+' then m:=m+a;
  If n='*' then m:=m*a;
  If n='-' then m:=m-a;
  If n='/' then
     begin
       if a<>0 then m:=m/a
       else begin
              Form1.Edit1.Text:='Делить на 0 нельзя!!!';
              r:=0;
              Exit;
            end;
     end;
  Form1.Edit1.Text:=FloatToStr(m);
end;

procedure TForm1.ZapClick(Sender: TObject);
begin
  If Edit1.Text='0' then
    begin
      Edit1.Text:='0,';
      r:=1;
    end
   else if pos(',',Edit1.Text)=0 then Edit1.Text:=Edit1.Text+',';
end;

procedure TForm1.ZeroClick(Sender: TObject);
begin
  Edit1.Text:='0';
  r:=0;
  m:=0;
  swt:=0;
end;

procedure TForm1.ActionClick(Sender: TObject);
var Kn:TButton;
begin
  Kn:=Sender as TButton;
  If r=0 then n:=Kn.Caption
  else
  Deistv;
  n:=Kn.Caption;
  r:=0;
end;



procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Case key of
  '1':Digit1.Click;
  '2':Digit2.Click;
  '3':Digit3.Click;
  '4':Digit4.Click;
  '5':Digit5.Click;
  '6':Digit6.Click;
  '7':Digit7.Click;
  '8':Digit8.Click;
  '9':Digit9.Click;
  '0':Digit0.Click;
  ',':Zap.Click;
  '.':Zap.Click;
  '/':Button15.Click;
  '+':Button12.Click;
  '*':Button14.Click;
  '-':Button13.Click;
  #13:Button16.Click;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button16.Click;
  swt:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
const z:array[0..15] of char = '0123456789ABCDEF';
var x,a: integer; 
s:string;

begin
a:=StrToIntDef(Edit1.Text,0);
x:=StrToIntDef(Edit1.Text,0);
s:='';
if a=0 then s:='0' else
if x<=16 then begin
while a>0 do begin
s:=z[(a mod x)]+s;
a := a div x;
end;
end;
Caption:=s;

end;

end.

Последний раз редактировалось Stilet; 24.11.2010 в 19:02.
iron_cross вне форума Ответить с цитированием
Старый 24.11.2010, 18:30   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

или я туплю... или действительно всё просто...
закинуть на форму tedit, кнопку, лэйбл...

на кнопку обработчик примерно такого содержания:

begin
label1.caption:=strtoint('$'+edit1. text);
end;

ну вывод и ввод данных можно изменить, но суть то не меняется... strtoint переводит строку в десятичное число, ну а шестнадцатиричные числа начинаются с $ или 0х

а если из 16 в 10 то можно использовать hextoint
hextoint(strtoint(edit1.text));

Последний раз редактировалось unbanned; 24.11.2010 в 18:38.
unbanned вне форума Ответить с цитированием
Старый 24.11.2010, 19:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ваша программа оказалась глючная.
А она не моя. Она твоя. Я просто ее вставил в обработчик клика кнопки.
Цитата:
или действительно всё просто...
Злой преподаватель не оценит
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2010, 20:57   #6
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Злой преподаватель не оценит
хм)) возможно
unbanned вне форума Ответить с цитированием
Старый 21.12.2010, 12:00   #7
iron_cross
Пользователь
 
Аватар для iron_cross
 
Регистрация: 23.11.2010
Сообщений: 29
По умолчанию

Вот еще код для перевода из 10 в 16. Я хотел сделать консольную прогу на Делпхи под ДОС и скопировал этот код:
Цитата:

USES CRT;

function IntToHex(N : integer):string;
const
Hex : array[0..15] of char = '0123456789ABCDEF';
var i, j, k : integer;
Result, s : string;
begin
Result := '';
k := n;
repeat
j := k div 16;
i := k mod 16;
Result := Result + Hex[i];
k := j;
until j = 0;
S := Result;
for i := 1 to Length(Result) do
S[Length(S)-i+1] := Result[i];
IntToHex := S;
end;

var n : integer;

BEGIN
clrscr;
Write('Введите целое десятичное число: ') ;
Readln(n);
Write('Число в шестнадцатеричной системе счисления: ', IntToHex(n), 'h');
readln;
END.
В чем моя ошибка, и что нужно сделать.
iron_cross вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод числа в семеричную систему счисления PastoriXx Общие вопросы .NET 5 14.05.2010 12:58
перевод из 10-тичной в 11-ричную систему счисления metallldoctor Помощь студентам 0 11.03.2010 13:51
Перевод вещественного числа из 10 в 2 Систему счисления. [С++] Veselyn Помощь студентам 9 17.01.2010 00:39