Q&A

  • 급여를 수표/지폐/동전의 갯수로 구하려면?
A라는 회사의 급여내역을 출력한뒤...



개개인의 급여를 아래와 같이 표현하고자 하는데...



예를들어 한사람의 급여가 2,257,670원이라할때



10만원짜리 수표로 는 22장,



만원짜리는 5장,



천원짜리는 7장,



500원짜리는 1개,



100원짜리는 1개,



50원짜리는 1개,



10원짜리는 2개라는 식으로 표현하고자 하는데...



어떤식으로 델파이에서는 표현하는것이 좋은가요?



도움을 청합니다.



3  COMMENTS
  • Profile
    최석기 2000.08.23 22:57
    이동훈 wrote:

    > A라는 회사의 급여내역을 출력한뒤...

    >

    > 개개인의 급여를 아래와 같이 표현하고자 하는데...

    >

    > 예를들어 한사람의 급여가 2,257,670원이라할때

    >

    > 10만원짜리 수표로 는 22장,

    >

    > 만원짜리는 5장,

    >

    > 천원짜리는 7장,

    >

    > 500원짜리는 1개,

    >

    > 100원짜리는 1개,

    >

    > 50원짜리는 1개,

    >

    > 10원짜리는 2개라는 식으로 표현하고자 하는데...

    >

    > 어떤식으로 델파이에서는 표현하는것이 좋은가요?

    >

    > 도움을 청합니다.

    >



    음 div랑 mod를 잘 사용하면 될꺼 같네요..



    const

    i100000Won = 100000;

    i10000Won = 10000;

    i1000Won = 1000;

    i500Won = 500;

    i100Won = 100;

    i50Won = 50;

    i10Won = 10;

    var

    i100000Won_count,

    i10000Won_count,

    i1000Won_count,

    i500Won_Count,

    i100Won_count,

    i50Won_count,

    i10Won_count: integer;

    temp : integer;

    begin

    i100000Won_count := 2257670 div i100000Won;

    temp := 2257670 Mod i100000Won;

    i10000Won_count := temp div i10000Won;

    temp := temp Mod i10000Won;

    i1000Won_count := temp div i1000Won;

    temp := temp Mod i1000Won;

    i500Won_count := temp div i500Won;

    temp := temp Mod i500Won;

    i100Won_count := temp div i100Won;

    temp := temp Mod i100Won;

    i50Won_count := temp div i50Won;

    temp := temp Mod i50Won;

    i10Won_count := temp div i10Won;



    Edit1.Text := IntToStr(i100000Won_count);

    Edit2.Text := IntToStr(i10000Won_count);

    Edit3.Text := IntToStr(i1000Won_count);

    Edit4.Text := IntToStr(i500Won_count);

    Edit5.Text := IntToStr(i100Won_count);

    Edit6.Text := IntToStr(i50Won_count);

    Edit7.Text := IntToStr(i10Won_count);



  • Profile
    구민오 2000.08.23 22:53
    드디어 제가 첫 답변을 하는군요... ^^

    각 돈의 단위별로 나눈다음에 원금에서 빼는 형식으로 이를

    반복한다면 된다고 생각하거든요... ^^





    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TDivmoney = record

    man10 : integer;

    man1 : integer;

    w1000 : integer;

    w500 : integer;

    w100 : integer;

    w50 : integer;

    w10 : integer;

    end;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Edit1: TEdit;

    GroupBox1: TGroupBox;

    Label2: TLabel;

    Label3: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Label17: TLabel;

    Label18: TLabel;

    Label1: TLabel;

    Label10: TLabel;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    divm : TDivmoney;

    { Public declarations }

    function divdon(money : integer) : TDivmoney;

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    function TForm1.divdon(money : integer) : TDivmoney;

    var

    xmoney : TDivmoney;

    buff : integer;

    begin

    //10만원 짜리 계산

    if money >= 1000000 then begin

    buff := money div 100000;

    xmoney.man10 := buff;

    money := money - (100000 * buff);

    end;



    //1만원 짜리 계산

    if money >= 10000 then begin

    buff := money div 10000;

    xmoney.man1 := buff;

    money := money - (10000 * buff);

    end;



    //1000원 짜리 계산

    if money >= 1000 then begin

    buff := money div 1000;

    xmoney.w1000 := buff;

    money := money - (1000 * buff);

    end;



    //500원 짜리 계산

    if money >= 500 then begin

    buff := money div 500;

    xmoney.w500 := buff;

    money := money - (500 * buff);

    end;



    //100원 짜리 계산

    if money >= 100 then begin

    buff := money div 100;

    xmoney.w100 := buff;

    money := money - (100 * buff);

    end;



    //50원 짜리 계산

    if money >= 50 then begin

    buff := money div 50;

    xmoney.w50 := buff;

    money := money - (50 * buff);

    end;



    //10원 짜리 계산

    if money >= 10 then begin

    buff := money div 10;

    xmoney.w10 := buff;

    money := money - (10 * buff);

    end;



    result := xmoney;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    xmoney : TDivmoney;

    begin

    xmoney := divdon(strtoint(edit1.text));

    label11.Caption := inttostr(xmoney.man10);

    label12.Caption := inttostr(xmoney.man1);

    label14.Caption := inttostr(xmoney.w1000);

    label15.Caption := inttostr(xmoney.w500);

    label16.Caption := inttostr(xmoney.w100);

    label17.Caption := inttostr(xmoney.w50);

    label18.Caption := inttostr(xmoney.w10);



    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    close;



    end;



    end.













    --------------------------------------------------------------------

    이동훈 wrote:

    > A라는 회사의 급여내역을 출력한뒤...

    >

    > 개개인의 급여를 아래와 같이 표현하고자 하는데...

    >

    > 예를들어 한사람의 급여가 2,257,670원이라할때

    >

    > 10만원짜리 수표로 는 22장,

    >

    > 만원짜리는 5장,

    >

    > 천원짜리는 7장,

    >

    > 500원짜리는 1개,

    >

    > 100원짜리는 1개,

    >

    > 50원짜리는 1개,

    >

    > 10원짜리는 2개라는 식으로 표현하고자 하는데...

    >

    > 어떤식으로 델파이에서는 표현하는것이 좋은가요?

    >

    > 도움을 청합니다.

    >



  • Profile
    양상철 2000.08.23 22:29
    테크닉보다는 알고리즘이 문제인것 같군요...

    아래와 같은 방식으로 해보세요....



    변수는 적당한걸루 이뿌게 코딩하세용~~~



    var

    i,j,k : integer;

    begin

    i:=2257670;

    //10 만원권....

    k := trunc(i/100000);

    Edit1.Text := IntToStr(k);

    j := i-(k*100000);

    //1만원권....

    k := trunc(j/10000);

    Edit2.Text := IntToStr(k);

    j := j-(k*10000);

    .

    .

    .

    .

    end;