StartprogrammingusingObjectPascal:IfCondition

From 흡혈양파의 번역工房
Revision as of 05:07, 5 January 2013 by Onionmixer (talk | contribs) (page merge)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

if 조건문

파스칼 언어에서 if 상태 구문은 매우 간단하고 명확합니다. 아래 예를 통해, 우리는 방안의 온도에 따라 에어콘을 켤지 말지에 대해 결정하고자 합니다.

에어콘 프로그램

var
    Temp: Single;
begin
    Write('Please enter Temperature of this room :');
    Readln(Temp);

    if Temp > 22 then
        Writeln('Please turn on air-condition')
    else
        Writeln('Please turn off air-condition');

    Write(Press enter key to close);
    Readln;
end.

if then else 구문과 이에 대한 예제를 소개했습니다. 온도가 22보다 크면, 처음 문장을 보여줍니다.

'Please turn on air-condition'

조건을 만나지 못했다면 (22보다 작거나 같다면) else에 의해 아래의 문장을 보여줍니다.

'Please turn off air-condition'

여러 상태에 대해 다음과 같이 작성할 수 있습니다.

var
    Temp: Single;
begin
    Write('Please enter Temperature of this room :');
    Readln(Temp);

    if Temp > 22 then
        Writeln('Please turn on air-conditioner')
    else
    if Temp < 18 then
        Writeln('Please turn off air-conditioner')
    else
        Writeln('Do nothing');

    Write(Press enter key to close);
    Readln;
end.

결과를 보기 위해 다른 온도 값으로 위 예제를 시험해 볼 수 있습니다.


더욱 쓸모있게 만들기 위해 조건을 더욱 복잡하게 만들 수 있습니다.

var
    Temp: Single;
    ACIsOn: Byte;
begin
    Write('Please enter Temperature of this room :');
    Readln(Temp);
    Write('Is air conditioner on? if it is (On) write 1,',
    ' if it is (Off) write 0 : ');
    Readln(ACIsOn);


    if (ACIsOn = 1 ) and ( Temp > 22 ) then
        Writeln('Do nothing, we still need cooling')
    else
    if (ACIsOn = 1 ) and ( Temp < 18 ) then
        Writeln('Please turn off air-conditioner')
    else
    if (ACIsOn = 0 ) and ( Temp < 18 ) then
        Writeln('Do nothing, it is still cold')
    else
    if (ACIsOn = 0 ) and ( Temp > 22 ) then
        Writeln('Please turn on air-conditioner');
    else
        Writeln('Please enter a valid values');
    Write('Press enter key to close');
    Readln;
end.

위 예제에서, 첫번째 상태가 True를 되돌리고(ACIsOn = 1), 두번째 상태가 True를 되돌릴 때(Temp > 22), Writeln 구문을 실행하라는 의미의 새로운 키워드( and )를 사용했습니다. 하나 혹은 양 쪽의 상태가 False라면, else 부분으로 진행할 것입니다.

예를 들어, 에어콘이 시리얼 포트를 통해 컴퓨터에 연결했다면, 시리얼 포트 프로시저/컴포넌트를 이용하여 프로그램에서 에어콘을 켜고 끌 수 있습니다. 이 경우 에어콘이 얼마나 오랫동안 동작하고 있었는지와 같은 if 조건문에 대한 추가 인자가 필요합니다. 만약 허용 시간(예를 들어 1시간)을 초과했다면 방 온도와는 상관 없이 에어콘을 꺼야 할 것입니다. 또한 냉기 손실율을 고려할 수 있는데, (밤에) 더워지는 속도가 매우 느리다면, 오랜 시간동안 끌 수 있을 것입니다.

체중계 프로그램

이 예제를 통해 사용자의 키를 미터 단위로 입력 받고, 몸무게를 킬로 단위로 입력해달라고 요청할 것입니다. 그러면 프로그램은 사용자가 입력한 값에 따라 사용자의 적당한 몸무게를 계산할 것이고, 사용자의 결과를 알려줄 것입니다.

Program Weight;

{$mode objfpc}{$H+}

uses
    {$IFDEF UNIX}{$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}{$ENDIF}
    Classes, SysUtils
    { you can add units after this };

var
    Height: Double;
    Weight: Double;
    IdealWeight: Double;
begin
    Write('What is your height in meters (e.g. 1.8 meter) : ');
    Readln(Height);
    Write('What is your weight in kilos : ');
    Readln(Weight);

    if Height >= 1.4 then
        IdealWeight:= (Height - 1) * 100
    else
        IdealWeight:= Height * 20;
    if (Height < 0.4) or (Height > 2.5) or (Weight < 3) or
        (Weight > 200) then
    begin
        Writeln('Invalid values');
        Writeln('Please enter proper values');
    end
    else
    if IdealWeight = Weight then
        Writeln('Your weight is suitable')
    else
    if IdealWeight > Weight then
        Writeln('You are under weight, you need more ',
        Format('%.2f', [IdealWeight - Weight]), ' Kilos')
    else
        Writeln('You are over weight, you need to lose ',
        Format('%.2f', [Weight - IdealWeight]), ' Kilos');
    Write('Press enter key to close');
    Readln;
end.

이 예제에서 새로운 키워드를 사용했습니다.

1. Double : Single과 유사합니다. 둘 다 실수지만, Double은 배 정밀도 부동 소숫점이며, Single 은 4바이트의 메모리 공간이 필요하지만, Double은 8바이트의 메모리 공간이 필요 합니다.
2. 두번째 새로운 것은 키워드 (Or) 이며, 조건들 중 하나를 만났는지 확인하기 위해 사용했습니다. 조건들 중 하나를 만났다면, 구문을 실행할 것입니다. 예를 들어보겠습니다: 첫번째 조건이 True를 되돌렸다면 (Height < 0.4), Writeln 구문을 호출할 것입니다:
Writeln(‘Invalid values’);. 첫번째 조건이 False를 되돌렸다면 두번째 조건을 검사할 것이며 나머지의 경우에도 마찬가지 입니다. 만약 모든 조건이 False를 되돌렸다면, else 부분으로 진행할 것입니다.
3. if 조건문에 begin end 키워드를 사용한 이유는 if 구문이 하나의 구문을 실행하기 때문입니다. begin end는 여러 개의 구문들을 하나의 블럭(구문)으로 간주하는 것으로 바꿔주고, 여러개의 구문들은 if 구문에 의해 실행될 수 있습니다. 다음 두 개의 구문을 보도록 합니다.

    Writeln('Invalid values');
    Writeln('Please enter proper values');

이들은 begin end를 사용하여 하나의 구문으로 바뀌었습니다.

    if (Height < 0.4) or (Height > 2.5) or (Weight < 3) or
        (Weight > 200) then
    begin
        Writeln('Invalid values');
        Writeln('Please enter proper values');
    end

4. 정해진 형식으로 값을 표시하는 Format프로시저를 사용했습니다. 이 경우 우리는 소숫점 아래 두자리만 표시하려고 합니다. 이 함수를 사용하기 위해 SysUtils 유닛을 Uses 절에 추가할 필요가 있습니다.

What is your height in meters (e.g. 1.8 meter) : 1.8
What is your weight in kilos : 60.2
You are under weight, you need more 19.80 Kilos

참고

이 예제가 100% 정확한 것은 아닙니다. 웹에서 몸무게를 계산하는 방법을 자세하게 찾아볼 수 있습니다. 단지 프로그래머가 각각의 문제를 어떻게 해결해 나가는지 설명하고, 믿을 수 있는 프로그램을 만들어나가는 과제에 대한 분석을 우수하게 수행하는데만 의미를 두었습니다.