100개 언어 스피드런: 73회: 무료 파스카
6559 단어 pascal
불행하게도 현대 하드웨어에서 터보-Pascal을 실행하는 데는 간단한 방법이 없을 것 같아서 다음 최선의 일을 해서 무료 Pascal을 시도해 보겠습니다.
안녕, 세상!
Pascal 코드는
program Name
로 시작합니다.문장 사이는 ;
로 구분하고 전체 문장 사이는 .
로 구분한다.대소문자를 구분하지 않기 때문에 필요하면 writeln
,WriteLn
, 심지어WrItElN
를 사용할 수 있지만 나는 모든 소문자를 사용할 것이다.program Hello;
begin
writeln('Hello, World!');
end.
$ fpc hello.pas
$ ./hello
Hello, World!
피보나치
우리 좀 더 웅대한 것을 시도해 봅시다. 피보나 계수.
program Fibonacci;
function fib(n:integer):integer;
begin
if n<=2 then
fib := 1
else
fib := fib(n-1) + fib(n-2);
end;
var
n:integer;
begin
for n := 1 to 20 do
begin
writeln('fib(', n, ')=', fib(n));
end;
end.
한 걸음 한 걸음:begin
부분에 앞서 우리는 어떤 물건이 사용하는 변수의 전체 목록을 성명했다. 이 예에서 우리는 var n:integer;
성명했다. 이것은 우리 프로그램이 사용하는 모든 변수의 목록:=
for n := 1 to 20 do
는 for순환writeln
에 전달하고 문자열과 정수를 혼합할 수 있다. 이 모든 것이 유효하다function name(arguments):return_type;
를 정의한 다음에 그 어떠한 추가 국부 변수가 있는 var
블록을 정의한 다음에 코드begin...end
블록을 정의한다.return
if condition then ... else ...;
는 조건문<unk>거리다
program FizzBuzz;
var
n:integer;
begin
for n := 1 to 100 do
begin
if n mod 15 = 0 then
writeln('FizzBuzz')
else if n mod 5 = 0 then
writeln('Buzz')
else if n mod 3 = 0 then
writeln('Fizz')
else
writeln(n);
end;
end.
이곳의 유일한 새로운 것은 약간 심상치 않은 문법인 =
은 등식 검사에 사용되고, mod
는 모형에 사용된다.하지만 아주 이상한 것들, 분호의 위치를 알아차렸을 수도 있다.분호를 사용하는 언어가 많지만, 이렇게 할 수 있는 언어는 하나도 없다.
다른 언어에서는 끝 문장을 분호로 표시한다.파스카 분호에서는 서로 다른 문장을 사용한다.
그것들
writeln
이 계속되고 있기 때문에, 우리는 그것들 뒤에 점수를 붙일 수 없다. 그것은 번역을 거부할 것이다.일부 점수는 선택할 수 있다. 예를 들어 마지막 else
뒤에 있는 점수는 여기에 더 많은 문장이 없기 때문이다.만약 있다면, 너는 분호가 필요하다.이것은 일리가 있지만, 만약 다른 언어가 자주 사용하는 시스템에 익숙해지고, 현대어도 분호를 사용하지 않는다면, 이것은 당신을 화나게 할 것이다.
Unicode
분명히 Turbo Pascal은 Unicode를 지원하지 않습니다. 오랜 시간 전에 이미 존재했기 때문입니다. 그러나 유감스럽게도 Unicode와 무료 Pascal은 모두 지원하지 않습니다.
program Unicode;
begin
writeln(length('Hello'));
writeln(length('Żółw'));
writeln(length('💩'));
writeln(upcase('Żółw'));
writeln(lowercase('Żółw'));
end.
$ fpc unicode.pas
$ ./unicode
5
7
4
ŻółW
Żółw
재시도
분명히 Free Pascal 지원
end
과 같은 주석이 있으므로 어떻게 된 일인지 살펴보겠습니다.{$codepage UTF8}
program Unicode;
begin
writeln(length('Hello'));
writeln(length('Żółw'));
writeln(length('💩'));
writeln(upcase('Żółw'));
writeln(lowercase('Żółw'));
end.
$ fpc unicode2.pas
$ ./unicode2
5
4
2
This binary has no string conversion support compiled in.
Recompile the application with a unit that installs a unicodestring manager in the program uses clause.
Runtime error 234 at $000000010E719BCD
$000000010E719BCD
더 나쁜 건길이가 서로 다른 방식으로 부정확할 뿐만 아니라 (5/7/4, 그 다음에 5/4/2,correct는 5/4/1) 전체 과정이 붕괴되었고 심지어 문자열을 대문자나 소문자로 바꾸려고 시도하지 않았다.나는'유니코드의 직접적인 붕괴'가 지금까지 거의 모든 언어에서 최악의 표현이라고 생각한다.
학급
하나의 종류를 정의함으로써 이 회를 끝냅시다.이것은 터보 패스컬이 소유한 것이 아닙니다.
{$mode objfpc}
program PointProgram;
type Point = class
public
x: integer;
y: integer;
constructor Create(_x, _y:integer);
function ToString: string;
end;
constructor Point.Create(_x, _y:integer);
begin
x := _x;
y := _y;
end;
function Point.ToString: string;
var
xs, ys: string;
begin
str(x, xs);
str(y, ys);
result := '<' + xs + ',' + ys + '>'
end;
operator + (p1, p2: Point): Point;
begin
result := Point.Create(p1.x + p2.x, p1.y + p2.y)
end;
var
a: Point;
b: Point;
c: Point;
begin
a := Point.Create(200, 30);
b := Point.Create(220, 39);
c := a + b;
writeln(c.ToString);
end.
$ fpc point.pas
$ ./point
<420,69>
한 걸음 한 걸음:{$codepage UTF8}
로 클래스 지원을 켜야 합니다. 많은 스위치가 있습니다. 이것은 당신이 사용하고자 하는 Pascal 사투리와 많은 다른 것들에 따라 바뀔 수 있습니다{$mode objfpc}
- 우리는 어떤 종류를 성명하는가;또 다른 type Point = class
성명, 예를 들면 type
등enum
속성public
과 다시 쓰기costructor Create
만 지정했습니다.ToString
올바른 필드만 할당constructor Point.Create
반환function Point.ToString: string;
의 기본 표현 형식 - 우리는 먼저 Point
와x
를 클래식 Pascaly
이 있는 문자열로 변환한 다음에 그것들을 str(anything, aString)
와<
와 연결할 수 있다. - 그리고 많은 다른 해결 방안>
를 성명할 수 있지만, 그것은 하나의 방법이 아니라, 사실상 클래스 내용operator +
에게 분배할 수 있다. - 이것은 매우 유용한 함수이다. 왜냐하면 우리는 정확하게 분배할 수 없기 때문이다result
+ := Point.Create(p1.x + p2.x, p1.y + p2.y)
에 명확한 전화를 걸어야 한다. writeln(c.ToString)
는 우리를 위해 하지 않을 것이다.이것은 언어 기능이 아닌 관례일 뿐무료 Pascal을 사용해야 합니까?
아뇨.
이상한 무료 패스칼은 가끔 진정한 프로그램을 구축하는 데 사용된다. 가장 유명한 것은Cheat Engine이지만 기본적으로 베이비붐 세대가 터보 패스칼이나 델파이로 프로그래밍을 배워 떠난 적이 없다.
어떤 형태의 Pascal을 사용할 진정한 이유가 없습니다.
다 엉망이라고 한 거 아니야.예를 들어, 내가 지난번에 Pascal을 쓴 지 수십 년이 되었고, 대부분의 문법을 잊어버렸지만, 그 오류 메시지는 확실히 질이 높고, 지정된 위치에 확실한 문제가 있다.
그러나 전반적으로 말하면 없다.
비밀 번호
All code examples for the series will be in this repository .
Code for the Free Pascal episode is available here .
Reference
이 문제에 관하여(100개 언어 스피드런: 73회: 무료 파스카), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/taw/100-languages-speedrun-episode-73-free-pascal-26텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)