Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2011, 08:08   #1
s0liD's
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию Ошибка ввода и вывода данных

помогите пож.
проблема с вводом(ошибки в коде у нужных строк) и выводом результата...

задача: Корабль сначала шел по курсу k1, а затем его курс был изменен согласно приказу pr. Определить k2 — новый курс корабля.
Код:
uses crt;
type course=(north, east, south, west);
       order=(forw, right, backw, left);
var
pr: order;
k1,k2:course;
begin
 writeln('enter course');
  readln(k1); {error 64: Cannot Read or Write variables of this type.}
 writeln('enter order');
  readln(pr); {error 64: Cannot Read or Write variables of this type.}
case k1 of
   north: case pr of
    forw:  K2:=north;
    backw: K2:=south;
    left:  K2:=west;
    right: K2:=east;
   end;
   east: case pr of
    forw:  K2:=east;
    backw: K2:=west;
    left:  K2:=north;
    right: K2:=south;
   end;
   south: case pr of
    forw:  K2:=south;
    backw: K2:=north;
    left:  K2:=east;
    right: K2:=west;
   end;
   west: case pr of
    forw:  K2:=west;
    backw: K2:=east;
    left:  K2:=south;
    right: K2:=north;
    end;
end;
end.
s0liD's вне форума Ответить с цитированием
Старый 18.07.2011, 09:49   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Код:
type course=(north, east, south, west);
       order=(forw, right, backw, left);
Попробуйте заквотить значения. Хотя я бы использовал цифры=)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 18.07.2011, 14:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

s0liD's, а как Вы собрались вводить переменную k1?! Ну вот выдала Вам программа текст: enter course - Вы что в ответ введёте?..

Паскаль не умеет напрямую вводить/выводить элементы заданного перечисляемого типа.
Обойти это можно, например, так:
Код:
type course=(north, east, south, west);
       order=(forw, right, backw, left);

var
pr: order;
k : byte;
k1,k2:course;
begin
 writeln;
 repeat
   Write('enter course (number from ',ord(Low(course)),' to ',ord(High(course)),'): ');
   readln(k);
   if (k<ord(Low(course))) or (k>ord(High(course))) then Writeln('Wrong course! try again!')
 until (k>=ord(Low(course))) and (k<=ord(High(course)));
 k1 := course(k);


 writeln;
 repeat
   Write('enter order (number from ',ord(Low(order)),' to ',ord(High(order)),'): ');
   readln(k);
   if (k<ord(Low(order))) or (k>ord(High(order))) then Writeln('Wrong order! try again!')
 until (k>=ord(Low(order))) and (k<=ord(High(order)));
 pr := order(k);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.07.2011, 16:33   #4
s0liD's
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
s0liD's, а как Вы собрались вводить переменную k1?! Ну вот выдала Вам программа текст: enter course - Вы что в ответ введёте?..

Паскаль не умеет напрямую вводить/выводить элементы заданного перечисляемого типа.
Обойти это можно, например, так:
Код:
type course=(north, east, south, west);
       order=(forw, right, backw, left);

var
pr: order;
k : byte;
k1,k2:course;
begin
 writeln;
 repeat
   Write('enter course (number from ',ord(Low(course)),' to ',ord(High(course)),'): ');
   readln(k);
   if (k<ord(Low(course))) or (k>ord(High(course))) then Writeln('Wrong course! try again!')
 until (k>=ord(Low(course))) and (k<=ord(High(course)));
 k1 := course(k);


 writeln;
 repeat
   Write('enter order (number from ',ord(Low(order)),' to ',ord(High(order)),'): ');
   readln(k);
   if (k<ord(Low(order))) or (k>ord(High(order))) then Writeln('Wrong order! try again!')
 until (k>=ord(Low(order))) and (k<=ord(High(order)));
 pr := order(k);
я ток начинаю писать, подскажи почему выбор идет из 3 координат, и как сделать вывод к2?
s0liD's вне форума Ответить с цитированием
Старый 18.07.2011, 17:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
подскажи почему выбор идет из 3 координат
нет. из чётырёх, от нуля до 3-х ровно четыре координаты (0 1 2 3)
0 - это north
1 - east
и т.д.

Цитата:
и как сделать вывод к2?
самый простой вариант написать вывод номера:
Код:
WriteLn('Coordinate K2 = ', ord(k2));
чуть посложнее - зто завести массив "печатных" значений
Код:
type course=(north, east, south, west);
       order=(forw, right, backw, left);
const
  PrintCourseName : array[low(course)..high(course)] of
     string = ('Север','Восток','Юг','Запад');

....
    WriteLn('Coordinate K2: ',PrintCourseName[k2]);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.07.2011, 06:48   #6
s0liD's
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию

спасибо огромное
s0liD's вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, переопределение ввода-вывода Erisu Помощь студентам 9 16.06.2011 16:27
Ошибка ввода/вывода на картридере Terran Компьютерное железо 4 07.05.2011 00:51
Операторы ввода и вывода wsws123 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2011 18:12
система ввода вывода StudentPolitech Общие вопросы C/C++ 3 02.04.2009 22:22