[문제번호 : 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.
오류이면 100 아니면 파라미터를 받아서 s1변수에 문자를 숫자로...
두번째는 첫번째와같고 오류시 200을 s2라는 변수에 대입하는것같네요...>s2 := StrToIntDef(paramstr(2),200); <---------------- 같이 설명좀...