Q&A

  • 도대체 뭐가 틀린걸까요?
unit cal_20011755;

interface

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

type
  TForm1 = class(TForm)
    edt1: TEdit;
    Edt2: TEdit;
    Edt3: TEdit;
    Lb1: TLabel;
    Lb2: TLabel;
    Btn1: TButton;
    Btn2: TButton;
    Btn3: TButton;
    Btn4: TButton;
    Btn5: TButton;
    exit: TButton;
    //프로시저 선언
    procedure Btn1Click(Sender: TObject); //프로시저 원형
    procedure Btn2Click(Sender: TObject);
    procedure Btn3Click(Sender: TObject);
    procedure Btn4Click(Sender: TObject);
    procedure Btn5Click(Sender: TObject);
    procedure exitClick(Sender: TObject);

    procedure msg1;   //빈 값에 대한 메시지 출력후 빈 값으로 포커스 이동
    procedure msg2;   //나누기, 나머지에서 0으로 나누는 것에 대한 경고 메세지
                      //및 포커스 이동
  private
    { Private declarations }
  public
    { Public declarations }
    function CheckNull(x,y:String):Boolean; //빈값체크하는함수선언
    function CheckZero(z:String):Boolean; //0을 체크하는 함수선언
  end;

var
  Form1: TForm1;

  k,t:boolean ;//CheckNull과checkZero에서 반환값을 Boolean형으로 받기 위해 선언
  a,b:real ;  // +,-,*,/ 에서 쓸 변수를 전역변수로 선언
  x,y,z:string ; // Function 수행시 쓸 문자열 선언

implementation   //프로시저 구현

{$R *.DFM}

//CheckNull Function 정의
function TForm1.CheckNull(x,y:String):Boolean;
begin
        x:=edt1.text;
        y:=edt2.text;

        if ((x='') or (y='')) then
                begin
                        result:=false;
                end
        else

                result:=true;

end;

//CheckZero Function 정의
function TForm1.CheckZero(z:string):Boolean;
begin
        z:=edt2.text;

        if (z='0') then
                begin
                 result := false;
                end
        else
                result := true;
end;

procedure TForm1.msg1;   //msg1 에 대한 프로시져
begin
        Showmessage('숫자를 입력하시오');
end;


procedure TForm1.msg2;   //msg2 에 대한 프로시져
begin                    //수행후 0을 지우고 포커스 이동
        Showmessage('0이 아닌 수를 입력하세요');
        edt2.Clear();
        edt2.SetFocus();
end;


procedure TForm1.Btn1Click(Sender: TObject); //덧셈계산
begin
        edt3.Clear();     //결과창 초기화
        k:=CheckNull(x,y);    //빈 값을 체크하는 함수 CheckNull 호출

        case k of
        true:begin    //모두 차 있을경우
                a:=StrToFloat(edt1.text);
                b:=StrToFloat(edt2.text);
                edt3.text := FloatToStr(a+b);
                lb1.caption:='+';
             end;
        false:begin   //첫째칸이나 둘째칸이 비어있을경우 메세지출력
                msg1;
              end;
end;

procedure TForm1.Btn2Click(Sender: TObject);  //뺄셈계산
begin
        edt3.Clear();     //결과창 초기화
        k:=CheckNull(x,y);    //빈 값을 체크하는 함수 CheckNull 호출

        case k of
        true:begin    //모두 차 있을경우
                a:=StrToFloat(edt1.text);
                b:=StrToFloat(edt2.text);
                edt3.text := FloatToStr(a-b);
                lb1.caption:='-';
             end;
        false:begin    //첫째칸이나 둘째칸이 비어있을경우 메세지출력
                msg1;
              end;
end;

procedure TForm1.Btn3Click(Sender: TObject);   //곱하기계산
begin
        edt3.Clear();     //결과창 초기화
        k:=CheckNull(x,y);    //빈 값을 체크하는 함수 CheckNull 호출

        case k of
        true:begin    //모두 차 있을경우
                a:=StrToFloat(edt1.text);
                b:=StrToFloat(edt2.text);
                edt3.text := FloatToStr(a*b);
                lb1.caption:='*';
             end;
        false:begin    //첫째칸이나 둘째칸이 비어있을경우 메세지출력
                msg1;
              end;
end;

procedure TForm1.Btn4Click(Sender: TObject);  //나누기계산
begin
        edt3.Clear();     //결과창 초기화
        k:=CheckNull(x,y);    //빈 값을 체크하는 함수 CheckNull 호출
        t:=CheckZero(z); // CheckZero함수 호출
        case k of
        true:     //모두 차 있을경우
                if t=true then //0으로 나누지 않을경우
                        begin
                                a:=StrToFloat(edt1.text);
                                b:=StrToFloat(edt2.text);
                                edt3.text := FloatToStr(a/b);
                                lb1.caption:='/';
                        end
                else        //0으로 나눌 경우 메시지 출력후 포커스 이동
                        begin
                        msg2;
                        edt2.clear;
                        det2.SetFocus();
                        end;
         false: begin      //첫째칸이나 둘째칸이 비어있을경우 메세지출력
                        msg1;
                end;

        end;
end;

procedure TForm1.Btn5Click(Sender: TObject);   //나머지계산
var
        a,b : Integer;
begin
        edt3.Clear();     //결과창 초기화
        k:=CheckNull(x,y);    //빈 값을 체크하는 함수 CheckNull 호출
        t:=CheckZero(z); // CheckZero함수 호출
        case k of
        true:     //모두 차 있을경우
                if t=true then //0으로 나누지 않을경우
                        begin
                                a:=StrToFloat(edt1.text);
                                b:=StrToFloat(edt2.text);
                                edt3.text := FloatToStr(a Mod b);
                                lb1.caption:='%';
                        end
                else        //0으로 나눌 경우 메시지 출력후 포커스 이동
                        begin
                        msg2;
                        edt2.clear;
                        det2.SetFocus();
                        end;
         false: begin      //첫째칸이나 둘째칸이 비어있을경우 메세지출력
                        msg1;
                end;

        end;
end;

procedure TForm1.exitClick(Sender: TObject);   //종료하기
begin
        close;
end;

end.

4  COMMENTS
  • Profile
    이기정 2002.05.29 03:50
    뭐가 틀린걸까요?

    ^^; 저두 잘 모르겠슴다. 혹시 컴파일 에러가 나지 않나요?
    컴파일 에러라면 코드에 문제가 있기 때문에 당연히 에러가 남다.

    vb코드 같이 작성하셧네염..
    Edit.Clear() -> Edit.Clear;
    SetFocus() -> SetFocus; 와 같이 코딩이 틀린곳이 있네염
    CheckNull(x,y)와 CheckZero(z) 함수 호출시 인수가 정의 되어있지 않구염.

    그리고 동작에 이상이 좀 있을거 같은데염.
    CheckNull(x,y:String): 함수를 쓰시는데 함수를 호출할때 x, y값이 정의되지 않았음으로 이또한 에러가 발생하겠죠.
    또 호출된 함수에서 x, y값을 Edit.text로 받아서 사용하니 인수를 사용하지 않던가 x := Edit.Text 이 문장을 함수 호출전에 사용하시면 될거 같으네염.

      x:=Edit1.Text;
      y:=Edit2.Text;
      k:=CheckNull(x,y); 이런식으로 하시던지

      functin CheckNull:Boolean;
         .
         .
         .
      k:=CheckNull;로 하시던지.

    원하시는 답이 되셨는지...

  • Profile
    신혜원 2002.05.29 00:35
    저도 프로그램을 잘 모르지만요...
    질문을 하겠습니다.
    우선 1.     function CheckNull(x,y:String):Boolean; //빈값체크하는함수선언
    는 왜 쓰신거죠?
    나중에 버튼을 누를때 이걸 호출하던데, x,y 값이 몬가요? 만약 나중에 더하기빼기..등등을 하는 수를 체크하는 것이라면, 순서가 잘못되었네요..
    2.    function CheckZero(z:String):Boolean; //0을 체크하는 함수선언
    는 왜 쓰셨죠? 함수만 있고, 써먹는데는 없네요?
    3. procedure msg2;   //나누기, 나머지에서 0으로 나누는 것에 대한 경고
    또한 프로그램상에서 써먹지를 않네요...


    음...버튼을 눌렀을때 어떤 값이 어떻게 들어가야 하는지를 잘 보심이 어떨 듯?




  • Profile
    강병주 2002.05.29 02:14

    저도 답변이요~
    우선 1. 뒤에보면 CheckNull(x,y:String):Boolean;을 k로 할당을 하고요 계산
           부분에서 보면 x:=edt1.text이고 y:=edt2.text이랍니다. 그리고 어건 다
           쓰이고 있는데..잘 보면.
    2.  function CheckZero(z:String):Boolean;  이것도 뒤에 계산부분에 나누기나 나머지계산할때는 쓰여요~
    3.procedure msg2; 이것은 위에 쓰일때 쓰이지요~




  • Profile
    신혜원 2002.05.30 03:23
    허거덩~
    제가 몰라서 물어본 것이 아니라.. 질문한 요지는.. 그부분에 시점이 약간 이상해서 질문을 한 것인데~~  ^^

    ㅋㅋ 또 질문! 쓰이고 있긴 하나, 제대로된 시점인가?