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.
^^; 저두 잘 모르겠슴다. 혹시 컴파일 에러가 나지 않나요?
컴파일 에러라면 코드에 문제가 있기 때문에 당연히 에러가 남다.
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;로 하시던지.
원하시는 답이 되셨는지...