[pascal] format 출력 & 프로시저

spring·2020년 11월 9일
0

일단 소스를 보고 시작한다.

program main;
uses sysutils;
type
  Point=Record
  x:int64;
  y:int64;
  end;
  PointArray=Array[1..100000] of Point;
var
  T,N:integer;
  i:integer;
  arr:PointArray;
  A:Real;
  P:Point;
procedure DFS(idx:integer;pt:Point;c:integer);
var
  i:integer;
begin
  if(c=0)then
    begin
      for i:=idx to N do
        begin
          pt.x:=pt.x-arr[i].x;
          pt.y:=pt.y-arr[i].y;
        end;
        if(A>pt.x*pt.x+pt.y*pt.y)then
          begin
          A:=pt.x*pt.x+pt.y*pt.y;
          end;
    end
  else
    begin
      if(idx<>N)then
        begin
          for i:=idx to N do
            begin
              pt.x:=pt.x+arr[i].x;
              pt.y:=pt.y+arr[i].y;
              DFS(i+1,pt,c-1);
              pt.x:=pt.x-arr[i].x;
              pt.y:=pt.y-arr[i].y;
              pt.x:=pt.x-arr[i].x;
              pt.y:=pt.y-arr[i].y;
            end;
        end;
    end;
end;
begin
  readln(T);
  while(T<>0)do
  begin
    readln(N);
    for i:=1 to N do
      read(arr[i].x,arr[i].y);
      P.x:=0;
      P.y:=0;
      A:=99999999999999999999;
      DFS(1,P,N div 2);
      writeln(FormatFloat( '##0.000000',sqrt(A)));
    T:=T-1;
  end;
end.

이 소스는 백준 온라인 저지 1007번 vector matching 문제의 솔루션이다.

https://www.acmicpc.net/problem/1007

이 소스에서 배울수 있는것은,

1.Pascal의 프로시저는 인자를 줄때 ,가 아닌 ; 으로 구분한다.
2.파라매터를 사용할때 앞에 var를 붙이면 참조변수가 된다.
3.형식지정출력을 할때 (ex:소수점6자리까지만 출력해라) 등을 사용할때 FormatFloat함수를 사용한다. 사용법은 저 위에 소스를 보면 금방 깨닫게 된다.
4.기타 구조체만드는법, 배열 만드는법, begin과 end의 정확한 사용법 (end뒤에 언제 .을 붙이고 언제 ;를 붙이고 언제 안붙이는지) 센스가 있다면 알수 있다.

Pascal 은 문법이 C와 정말 다르다.

여러가지 언어를 해보았지만, 언어중에 서로 비슷한 언어는 없다. 정말 연산자와 함수사용법등이 비슷한 C,C++,Java만 해도 정말 다르다.

언어가 비슷하다는건 패러다임이 비슷할뿐 그 이상 그 이하도 아니다.

어디가서 C와 Perl은 비슷해서 사용하기 쉽대. 라는 말은 하고다니지말자.

심지어 C와 C++도 비교대상 자체가 아니다.

profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글