Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
아날로그 시계 작성
전 대1 학생입니다 .
교수님이 아래와같은 레포트를 내주셔서 고민하다
이렇게 질문 드립니다 꼭 좀 가르쳐 주세요....
아날로그 시계작성법좀 가르쳐 주세요
또한가지 윈도우에 내장된 계산기 프로그램을 모방하여(+,-,*,/)
연산만 수행하는 프로그램작성법도 가르쳐 주세요
3
COMMENTS
모승열
•
1999.05.25 00:30
심인애 wrote:
> 전 대1 학생입니다 .
> 교수님이 아래와같은 레포트를 내주셔서 고민하다
> 이렇게 질문 드립니다 꼭 좀 가르쳐 주세요....
> 아날로그 시계작성법좀 가르쳐 주세요
> 또한가지 윈도우에 내장된 계산기 프로그램을 모방하여(+,-,*,/)
> 연산만 수행하는 프로그램작성법도 가르쳐 주세요
소스입니다.
도움이 되시길...
PK
0
0
삭제
수정
댓글
김경수
•
1999.05.25 07:25
안녕하세요.
스택을 이용해 작성한 단순 무식하게 짠 진짜 간단한 계산기입니다.
그냥 참고로 보시라구요. 도움이 될랑가는 모르겠지만.
그럼 안녕히..
모승열 wrote:
> 심인애 wrote:
> > 전 대1 학생입니다 .
> > 교수님이 아래와같은 레포트를 내주셔서 고민하다
> > 이렇게 질문 드립니다 꼭 좀 가르쳐 주세요....
> > 아날로그 시계작성법좀 가르쳐 주세요
> > 또한가지 윈도우에 내장된 계산기 프로그램을 모방하여(+,-,*,/)
> > 연산만 수행하는 프로그램작성법도 가르쳐 주세요
>
> 소스입니다.
> 도움이 되시길...
> PK
PK
0
0
삭제
수정
댓글
김경수
•
1999.05.25 10:42
안녕하세요. 화일이 업로드가 안되는것 같네요..
그냥 복사해서 드립니다.초보라서..히
unit u_stack;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, RxGrdCpt, ExtCtrls, RXSplit, RXCtrls,
MrgMngr, DataConv;
const maxsize = 10;
type
tstack = class //클래스 선언
stackarray : array[1..maxsize] of string;
top : integer;
bottom : integer;
procedure initialise;
function isp(i_isp : string): integer; //스택에 있는 연산자 우선순위 반납
// function icp(i_icp : string): integer; //새로 들어오는 연산자 우선 순위 반납
function empty : boolean; //스택이 비어있는지 확인
function full : boolean; //스택이 full인지 확인
procedure push(p_input : string); //스택에서 추가
procedure pop(p_delete : string); //스택에서 삭제
procedure postfix(fix : string); //후위수식 변환 프로시져
function get_token( input : char): string; //토큰 받아오기
procedure exe(stack : string); //후위수식 계산
end;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
BitBtn1: TBitBtn;
GroupBox3: TGroupBox;
Label1: TLabel;
RxGradientCaption1: TRxGradientCaption;
sb_1: TStatusBar;
BitBtn2: TBitBtn;
Label2: TLabel;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
RxSplitter1: TRxSplitter;
input: TEdit;
output: TEdit;
GroupBox4: TGroupBox;
MergeManager1: TMergeManager;
BitBtn3: TBitBtn;
Label3: TLabel;
cal: TEdit;
Label4: TLabel;
s3: TButton;
s4: TButton;
s5: TButton;
s6: TButton;
s7: TButton;
s8: TButton;
s9: TButton;
s2: TButton;
s1: TButton;
s10: TButton;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton9Click(Sender: TObject);
procedure SpeedButton17Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
input_c : string;
mystack : tstack;
implementation
{$R *.DFM}
//휘위 표기식에서 계산하기
procedure tstack.exe ( stack : string);
var
i : integer;
now : string;
begin
stack := stack+'$';
i := 1;
repeat
//일반문자인 경우 스택에 그냥 넘
if (mystack.get_token(stack[i])='operand') then
begin
messagedlg('다음으로..',mtinformation,[mbok],0);
mystack.push(stack[i]);
end;
// + 연산자인경우
if get_token(stack[i]) = '+' then
begin
now := (floattostr(strtofloat(stackarray[top-1])+strtofloat(stackarray[top])));
messagedlg('다음으로..',mtinformation,[mbok],0);
mystack.pop(stackarray[top]);
mystack.pop(stackarray[top]);
push(now);
end;
// - 연산자인경우
if get_token(stack[i]) = '-' then
begin
now := (floattostr(strtofloat(stackarray[top-1])-strtofloat(stackarray[top])));
messagedlg('다음으로..',mtinformation,[mbok],0);
mystack.pop(stackarray[top]);
mystack.pop(stackarray[top]);
push(now);
end;
// * 연산자인경우
if get_token(stack[i]) = '*' then
begin
now := (floattostr(strtofloat(stackarray[top-1])*strtofloat(stackarray[top])));
messagedlg('다음으로..',mtinformation,[mbok],0);
mystack.pop(stackarray[top]);
mystack.pop(stackarray[top]);
push(now);
end;
// / 연산자인경우
if get_token(stack[i]) = '/' then
begin
now := copy(floattostr(strtofloat(stackarray[top-1])/strtofloat(stackarray[top])),0,4);
messagedlg('다음으로..',mtinformation,[mbok],0);
mystack.pop(stackarray[top]);
mystack.pop(stackarray[top]);
push(now);
end;
inc(i);
until stack[i]='$';
end;
//후위 표기식으로 바꾸기
procedure tstack.postfix(fix : string);
var
i,j : integer;
begin
fix := fix + '$';
mystack.push('#');
i := 1;
repeat
//피연산자인경우 그냥 출력
if (mystack.get_token(fix[i])='operand') then
begin
form1.output.text := form1.output.text + fix[i];
end;
if get_token(fix[i])='(' then
begin
mystack.push(fix[i]);
end;
//오른쪽 가로가 나온경우
if get_token(fix[i])=')' then
begin
while (stackarray[top] <> '(') do
begin
form1.output.text := form1.output.text + stackarray[top];
mystack.pop(stackarray[top]);
end;
mystack.pop(stackarray[top]);
end;
// 연산자인경우
if ((get_token(fix[i])='+') or (get_token(fix[i])='-') or (get_token(fix[i])='*') or(get_token(fix[i])='/')) then // or(get_token(fix[i])='(')) then
begin
if isp(stackarray[top]) >= isp(fix[i]) then
begin
form1.output.text := form1.output.text + mystack.stackarray[top];
mystack.pop(fix[i]);
mystack.push(fix[i]);
end
else
begin
mystack.push(fix[i]);
end;
end;
inc(i);
until fix[i]='$';
while stackarray[top] <> '#' do
begin
form1.output.text := form1.output.text + stackarray[top];
mystack.pop(stackarray[top]);
end;
mystack.pop(stackarray[top]);
end;
function tstack.isp(i_isp : string) : integer; //스택에 있는 연산자 우선순위 반납
var
temp : char;
begin
temp := i_isp[1];
case temp of
'+' : result := 2;
'-' : result := 2;
'*' : result := 3;
'/' : result := 3;
'(' : result := 1;
')' : result := 1;
'$' : result := 0;
'#' : result := 0;
end;
end;
{
function tstack.icp(i_icp : string): integer; //새로 들어오는 연산자 우선 순위 반납
var
temp : char;
begin
temp := i_icp[1];
case temp of
'+' : result := 2;
'-' : result := 2;
'*' : result := 3;
'/' : result := 3;
'(' : result := 0;
')' : result := 1;
'$' : result := 0;
'#' : result := 0;
end;
end;
}
//입력 문자열로부터 토큰을 생성하는 함수
function tstack.get_token( input : char ): string;
begin
case input of
'+' : Result := '+';
'-' : Result := '-';
'*' : Result := '*';
'/' : Result := '/';
'(' : Result := '(';
')' : Result := ')';
else
Result := 'operand';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mystack := tstack.create; //클래스 생성
mystack.initialise;
end;
function tstack.empty : boolean;
begin
if top = bottom then
empty := true
else
empty := false;
end;
function tstack.full : boolean;
begin
if top = maxsize then
full := true
else
full := false;
end;
//자료를 입력
procedure tstack.push(p_input : string);
begin
if full then
messagedlg('스택이 가득찼습니다. 스택을 지운후 다시 입력하십시요!', mterror, [mbok],0)
else
begin
top := top+1;
stackarray[top] := p_input; //스택에 추가
//스택그림 보이기
if form1.FindComponent( 's' + IntToStr(top) ) is Tbutton then
begin
Tbutton(form1.FindComponent( 's' + IntToStr(top) )).visible := true;
Tbutton(form1.FindComponent( 's' + IntToStr(top) )).caption := stackarray[top];
end;
end; //if
end; //push
procedure tstack.pop(p_delete : string);
begin
if empty then
messagedlg('입력된 값이 없습니다.',mterror,[mbok],0)
else
begin
//버튼들 안보이게 하기
if form1.FindComponent( 's' + IntToStr(top) ) is Tbutton then
begin
Tbutton(form1.FindComponent( 's' + IntToStr(top) )).visible := false;
Tbutton(form1.FindComponent( 's' + IntToStr(top) )).caption := stackarray[top];
end;
p_delete := stackarray[top];
top := top -1;
end;
end;
// stack 포인터 초기화
procedure tstack.initialise;
begin
top := 0;
bottom := 0;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
mystack.Free; //클래스 해제
action := cafree; //폼 해제
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
input_c := input_c + '1';
input.text := input_c;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//초기화부분
input_c := ''; //전역변수 초기화
input.text := ''; //전위표기식 초기화
output.text := ''; //후위표기식 초기화
cal.text := '';
if mystack.empty = false then //스택이 비워졌을때까지 pop
mystack.pop('pop');
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
input_c := input_c + '2';
input.text := input_c;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
input_c := input_c + '3';
input.text := input_c;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
input_c := input_c + '4';
input.text := input_c;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
input_c := input_c + '5';
input.text := input_c;
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
input_c := input_c + '6';
input.text := input_c;
end;
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
input_c := input_c + '7';
input.text := input_c;
end;
procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
input_c := input_c + '8';
input.text := input_c;
end;
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
input_c := input_c + '9';
input.text := input_c;
end;
procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
input_c := input_c + '(';
input.text := input_c;
end;
procedure TForm1.SpeedButton11Click(Sender: TObject);
begin
input_c := input_c + '0';
input.text := input_c;
end;
procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
input_c := input_c + ')';
input.text := input_c;
end;
procedure TForm1.SpeedButton13Click(Sender: TObject);
begin
input_c := input_c + '*';
input.text := input_c;
end;
procedure TForm1.SpeedButton16Click(Sender: TObject);
begin
input_c := input_c + '/';
input.text := input_c;
end;
procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
input_c := input_c + '+';
input.text := input_c;
end;
procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
input_c := input_c + '-';
input.text := input_c;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mystack.push('push');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
mystack.pop('push');
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
mystack.postfix(input.text);
mystack.exe(output.text);
cal.text := mystack.stackarray[mystack.top];
end;
end.
김경수 wrote:
> 안녕하세요.
> 스택을 이용해 작성한 단순 무식하게 짠 진짜 간단한 계산기입니다.
> 그냥 참고로 보시라구요. 도움이 될랑가는 모르겠지만.
> 그럼 안녕히..
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
지니
•
1999.05.25 00:36
2
COMMENTS
/
0
LIKES
caret위치에 문자(기호)넣기??
이태호
•
1998.07.29 13:53
안녕하세요! 또 질문 드립니다. 이번에는 CDDB기능을 구현해 보려고 하는데 문제가 발생 했습니다. 음...
이정욱
•
1999.05.25 02:48
아래 답변에 SendData 프로시져입니다 라는것이 있습니다. 그것을 참고하세요. 여기서 SendData라는 키워...
이태호
•
1998.07.29 13:44
1
COMMENTS
/
0
LIKES
AsyncPro의 TApdEmulator에 관한 질문
이정욱
•
1998.09.07 02:15
네.. 답변이 늦어서 죄송합니다. 버튼 컴포넌트를 사용하시면 가능합니다. 창문얘기에서 구현한 방식이죠...
영인
•
1999.05.25 00:35
2
COMMENTS
/
0
LIKES
(델파이)추가답변좀..부탁드립니다..
신인재
•
1999.05.25 01:53
type tmynum=set of [1..20]; 문장 에러가 나는 군요.. 저도 잘쓰지 않아서 헬프를 참고 했는데 아래...
신인재
•
1999.05.25 02:12
type tmynum= set of 1..90; var mynum:tmynum; aa : Boolean; begin mynum:=[1,2,3,4,10,20...
최희성
•
1998.07.25 03:00
1
COMMENTS
/
0
LIKES
파워러브에 대한 문의
이정욱
•
1998.09.07 02:18
네.. 죄송합니다. 지난 7월부터 파워러브 델파이는 새로운 탄생을 하면서 다시 정기적인 발간을 약속드립...
왕초
•
1999.05.25 00:32
1
COMMENTS
/
0
LIKES
DLL 안의 함수에서의 변수 문제..
안치봉
•
1999.05.25 03:57
왕초 wrote: > DLL 사용시에 변수 사용 질문입니다.. > 정적 DLL를 사용하고 있고요.. > DLL 안의 함수...
이승신
•
1998.07.23 06:00
1
COMMENTS
/
0
LIKES
[부탁] 파워러브델파이가 시중에파나요? 계좌번호도~
이정욱
•
1998.09.07 02:17
이곳에 보시면 정보가 있었는데 못찾으셨군요. 먼저 입금을 하신후 (6개월 3만원, 12개월 5만원) 메일주세...
sunhee
•
1999.05.25 00:28
1
COMMENTS
/
0
LIKES
다른 프로그램의 컴포넌트 알아내는 방법
KJW
•
1999.06.04 06:59
sunhee 께서 말씀하시기를... > 안녕하세요. 선희덕이라고 합니다. > > A라는 프로그램에서 B라는 프...
이병덕
•
1998.07.19 06:40
1
COMMENTS
/
0
LIKES
AsyncPro....ApdBPTerminal...
이 정 욱
•
1998.07.21 01:54
네... StuffChar같은것을 사용하지 말구요 Comport컴포넌트의 Output메소드를 사용하세요. 그러면 터미널...
고부성
•
1999.05.25 00:17
1
COMMENTS
/
0
LIKES
dll 에 관한건데여....
이정욱
•
1999.05.25 03:02
함수인자로 사용하세요. 만약 계산식이 더하는것이라면... function Add(a,b ; integer) : integer; 이...
이병덕
•
1998.07.19 06:40
1
COMMENTS
/
0
LIKES
AsyncPro....ApdBPTerminal...
이 정 욱
•
1998.07.21 01:54
네... StuffChar같은것을 사용하지 말구요 Comport컴포넌트의 Output메소드를 사용하세요. 그러면 터미널...
전진우
•
1999.05.25 00:10
1
COMMENTS
/
0
LIKES
TRichEdit98의 내용을 저장할때의 밑줄이 생기는 버그좀..
이정욱
•
1999.05.25 03:03
쩝.. RxLib를 사용하세요. 그안에 RichEdit2 용 컴포넌트가 있습니다. 전진우 wrote: > TRichEdit...
이영애
•
1999.05.24 23:36
2
COMMENTS
/
0
LIKES
TreeView의 내용(선과 텍스트) 출력방법..
김용구
•
1998.06.29 19:28
안녕하세요 이정욱사장님. 대림산업 여천공장에 근무하는 김용구 입니다 전번에 대림정보통신 안태봉대...
이 정 욱
•
1998.07.14 02:56
음.. 보낸지가 꽤 오래되었는데... 받았는지 말씀 해주시기 바랍니다. 김용구 wrote: > 안녕하세요 이...
임태영
•
1999.05.24 23:33
3
COMMENTS
/
0
LIKES
Database 접속 정보 설정에 관해....
김용구
•
1998.06.29 19:28
안녕하세요 이정욱사장님. 대림산업 여천공장에 근무하는 김용구 입니다 전번에 대림정보통신 안태봉대...
모승열
•
1999.05.25 00:36
임태영 wrote: > 안녕하세요,,, 임태영입니다. > > 서버에 있는 테이블을 사용하려고 할 때 User name...
이 정 욱
•
1998.07.14 02:56
음.. 보낸지가 꽤 오래되었는데... 받았는지 말씀 해주시기 바랍니다. 김용구 wrote: > 안녕하세요 이...
정준호
•
1998.06.25 03:12
1
COMMENTS
/
0
LIKES
창문삐요lan에 대해서
이정욱
•
1998.06.25 06:43
만약 PPP(전화접속 네트워킹)사용자라면 PPP연결을 하시고 사용하셔야 합니다. 웹브라우져를 사용할 수 있...
심인애
•
•
1999.05.24 23:32
3
COMMENTS
/
2
LIKES
아날로그 시계 작성
전 대1 학생입니다 . 교수님이 아래와같은 레포트를 내주셔서 고민하다 이렇게 질문 드립니다 꼭 좀 가르쳐 주세요.... 아날로그 시계작성법좀 가르쳐 주세요 또한가지 윈도우에 내장된 계산기 프로그램을 모방하여(+,-,*,/) 연산만 수행...
모승열
•
1999.05.25 00:30
심인애 wrote: > 전 대1 학생입니다 . > 교수님이 아래와같은 레포트를 내주셔서 고민하다 > 이렇게 ...
김경수
•
1999.05.25 07:25
안녕하세요. 스택을 이용해 작성한 단순 무식하게 짠 진짜 간단한 계산기입니다. 그냥 참고로 보시라구...
김경수
•
1999.05.25 10:42
안녕하세요. 화일이 업로드가 안되는것 같네요.. 그냥 복사해서 드립니다.초보라서..히 unit u_stack; ...
정준호
•
1998.06.25 03:12
1
COMMENTS
/
0
LIKES
창문삐요lan에 대해서
이정욱
•
1998.06.25 06:43
만약 PPP(전화접속 네트워킹)사용자라면 PPP연결을 하시고 사용하셔야 합니다. 웹브라우져를 사용할 수 있...
우민석
•
1999.05.24 23:31
1
COMMENTS
/
0
LIKES
DBGrid 상에서 Insert문제좀...
변대섭
•
1999.05.25 00:39
우민석 wrote: > 제가 짜는 프로그램은 DBGrid을 이용하여 한 레코드 단위로 바로 바로 데이터 베이스을 A...
김동수
•
1999.05.24 23:21
2
COMMENTS
/
0
LIKES
StringGrid에서 레코드 증가방법을 알려주세여
지광현
•
1998.06.12 22:25
창문빼요를 쓰는중에 서비스에서 음성사서함 버튼을 누르고 전화걸기를 하면 디바이스 선택을 하라고 하...
이정욱
•
1998.06.13 00:30
지광현 wrote: > 창문빼요를 쓰는중에 서비스에서 > 음성사서함 버튼을 누르고 전화걸기를 하면 > 디바...
지광현
•
1998.06.12 22:25
2
COMMENTS
/
0
LIKES
창문삐요
용그니
•
1999.05.24 23:00
안녕하세요. 시리얼 통신 프로그래밍을 하던중 TComport...가 업서 컴파일이 되지 않습니드; 그 컴포넌...
이정욱
•
1998.06.13 00:30
지광현 wrote: > 창문빼요를 쓰는중에 서비스에서 > 음성사서함 버튼을 누르고 전화걸기를 하면 > 디바...
박용근
•
1999.05.24 22:49
2
COMMENTS
/
0
LIKES
AsyncPro에 관하여........
이정욱
•
1998.06.11 21:00
안녕하세요? 이정욱입니다. 그동안의 게시판의 문제와 불편함을 고치기 위해 더욱 좋은 게시판을 만들었...
이정욱
•
1999.05.25 00:20
꼭 필요한것은 아닙니다. 공개된 시리얼 통신 컴포넌트를 사용하셔도 됩니다. 그런데 만약 ZModem같은 파...
심인애
1999/05/24 23:32
Views
308
Likes
2
Comments
3
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 전 대1 학생입니다 .
> 교수님이 아래와같은 레포트를 내주셔서 고민하다
> 이렇게 질문 드립니다 꼭 좀 가르쳐 주세요....
> 아날로그 시계작성법좀 가르쳐 주세요
> 또한가지 윈도우에 내장된 계산기 프로그램을 모방하여(+,-,*,/)
> 연산만 수행하는 프로그램작성법도 가르쳐 주세요
소스입니다.
도움이 되시길...
PK