Корабль сначала шел по курсу K1, а затем его курс был изменен согласно приказу ПР. Определить К2—новый курс корабля. — Pascal(Паскаль)

type курс=(С,В,Ю,3); {Север,Восток,Юг,Запад}
приказ=(вперед .вправо, назад,влево);
vaf К1,К2:курс; ПР:приказ;
program MyCase;
uses
  Crt;
type
  TCourse = (N, E, S, W); //North, East, South, West
  TOrder = (F, R, B, L); //Forward, Right, Back, Left
var
  Course1, Course2: TCourse; //старый курс, новый курс
  Order: TOrder;  // приказ
  P: Integer;
 
//отобразить курс
procedure ShowCourse(Course: TCourse);
begin
  case Course of
    N: WriteLn('Sever');
    E: WriteLn('Vostok');
    S: WriteLn('Yug');
    W: WriteLn('Zapad');
  end;
end;
 
//отобразить приказ
procedure ShowOrder(Order: TOrder);
begin
  case Order of
    F: WriteLn('Vpered');
    R: WriteLn('Napravo');
    B: WriteLn('Nazad');
    L: WriteLn('Nalevo');
  end;
end;
 
//задать новый курс
function NewCourse(Course: TCourse; Order: Torder): TCourse;
var
  ResCourse: TCourse;
begin
  case Order of
    F: ResCourse := Course; // вперед, так вперед
    R:
      if Ord(Course) < 3 then         // если номер курса не 3 [0..3]
        ResCourse := Succ(Course)     // значит значение курса = значению под следующеим номером
      else                            //иначе
        ResCourse := TCourse(Ord(0)); //значение курса = значению курса под номером 0
        
    B:
      if Ord(Course) < 2 then
        ResCourse := Succ(Succ(Course))
      else
        ResCourse := Pred(Pred(Course));
        
    L:
      if Ord(Course) > 0 then
        ResCourse := Pred(Course)
      else
        ResCourse := TCourse(Ord(3));
  end;
    
  Result := ResCourse;
end;
 
//основная программа
begin
  ClrScr; //очищаем экран
  
  WriteLn('Vvedite Kurs1 (1 Sever, 2 Vostok, 3 Yug, 4 Zapad)');
  Readln(P);
  Course1 := TCourse(P - 1); // преобразование в перечисляемый тип
  
  Write('Kurs na ');
  ShowCourse(Course1); //показываем курс
 
  WriteLn('Vvedite Prikaz (1 Vpered, 2 Napravo, 3 Nazad, 4 Nalevo)');
  Readln(P);
  Order := TOrder(P - 1); // преобразование в перечисляемый тип
  
  Write('Prikaz ');
  ShowOrder(Order); //показываем приказ
  
  Course2 := NewCourse(Course1, Order); //определяем новый курс
 
  Write('Noviy Kurs na ');
  ShowCourse(Course2);  //показываем новый курс
  
  ReadLn;
    
end.

Leave a Comment

55 + = 61