Q&A

  • 아래를 보고 설명좀 부탁 드립니다.
[문제번호 : 1] - <배점 : 20점>
근무지구분이 A와 B인 자료에 대하여 (본봉+상여금)의 값에 따라 내림차순으로 정렬하였을 때 5번째 자료의 (본봉+상여금)의 값을 출력하되, 동일한 (본봉+상여금)의 값이 발생할 경우 사원번호의 오름차순으로 정렬하여 출력하시오.
(※ 결과치는 수검자 PC의 C:정보처리Dataans1.txt 파일에 출력되도록 프로그램을 작성할 것.)




unit Pro1Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TStaticText;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);
function xi(temp:string): integer; begin result:= strtoint(temp); end;
function xs(temp:integer): string; begin result:= inttostr(temp); end;

var s1,s2 : integer;
f1,f2 : textfile;
line : string;
inc, arrinc, inc2 : integer;
sabun : array[1..1000] of string;
bonsang : array[1..1000] of integer;
temp : string;
rank : integer;
xsabun : string;    // 결과 사번
xbonsang : integer; // 결과 본봉+상여
begin
assignfile(f1,'z:정보처리dataabc0010.txt');
assignfile(f2,'z:정보처리dataans1.txt');
reset(f1);
rewrite(f2);
s1 := StrToIntDef(paramstr(1),100); <------------- 이부분을 설명좀...
s2 := StrToIntDef(paramstr(2),200);  <---------------- 같이 설명좀...
inc := 0;
arrinc := 0;
while not eof(f1) do begin
    readln(f1, line);
    inc := inc+1;
    if (inc >= s1) and (inc <= s2) then begin
        arrinc := arrinc + 1;
        temp := uppercase(copy(line,30,1));
        if (temp = 'A') or (temp = 'B') then begin // 근무지
           sabun[arrinc] := copy(line,1,6); // 사원번호
           bonsang[arrinc] := xi(copy(line,14,3))+xi(copy(line,17,3)); // 본봉+상여금
        end;
    end;
end;
xbonsang := 0;
for inc := 1 to arrinc do begin
    rank := 1;
    for inc2 := 1 to arrinc do
        if bonsang[inc] < bonsang[inc2] then rank := rank +1; // 순위
    if rank = 5 then begin // 5번째
       if xbonsang = 0 then begin // 동일값처리
          xsabun := sabun[inc];
          xbonsang := bonsang[inc];
          end
       else if sabun[inc] > xsabun then  // 사원번호 오름차순
          xbonsang := bonsang[inc];
    end;
end;
writeln(f2, xs(s1)+' '+xs(s2)+' '+xs(xbonsang));
label1.Caption := xs(s1)+' '+xs(s2)+' '+xs(xbonsang);
closefile(f1);
closefile(f2);
//close;
end;

end.
1  COMMENTS
  • Profile
    공성환 2002.03.09 09:50
    플그램이 실행될때 첫번째파라미터를 받아서 문자를 숫자를 변환하는데
    오류이면 100 아니면 파라미터를 받아서 s1변수에 문자를 숫자로...
    두번째는 첫번째와같고 오류시 200을 s2라는 변수에 대입하는것같네요...>s2 := StrToIntDef(paramstr(2),200);  <---------------- 같이 설명좀...