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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2008, 17:20   #1
Сирёго
 
Регистрация: 01.11.2007
Сообщений: 6
Восклицание Помогите пожалуйста. Записи с вариантами. Паскаль.

Всем привет!
Нужна ваша помощь.

Имеются описания:

Код:
type помещение = (зал, кухня, прихожая, ванная); 
цена = record
руб: byte;
коп: 0..99;
end;
прямоугольник = record
высота, ширина: byte;
end;
	комната = record
			длина, высота, ширина: real;
			case комната: помещение of
				зал: (дверь, окно: прямоугольник;
обои, гипсокартон, ковролин: цена);
				прихожая: (пластик, линолеум, плитка_потолочная: цена;
дверь: прямоугольник);
ванная: (плитка_стеновая, плитка_напольная, 
пластик: цена);
				кухня: (дверь, окно: прямоугольник;
обои, ламинат, побелка: цена)
			end;
Расчитать стоимость стройматериалов для ремонта какой-либо комнаты.


Вопрос только в одном: как константой задать переменную "Комната", которая типа Record. Как задавать константой простую запись, я знаю, а как быть с вариантами, подскажите.

Последний раз редактировалось Alex21; 22.02.2008 в 23:58. Причина: читаем правила оформления сообщений
Сирёго вне форума Ответить с цитированием
Старый 21.02.2008, 18:42   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если коротко, то вот. Если нужно подробнее, надо полазить по учебникам.
Цитата:
Записи с вариантами
В некоторых случаях возникает необходимость использовать записи, для которых заданы различные варианты их структуры. Они называются записями с вариантами, которые используются для объединения записей, имеющих похожую, но не одинаковую структуру. Такие записи имеют фиксированную и вариантную часть. Использование фиксированной части аналогично использованию обычных записей, а для определения вариантной части применяется оператор case:
type
имя_типа =
record
{фиксированная часть}
{вариантная часть}
case поле_признака: тип_поля_признака of
константа_выбора1: (поле: тип);
константа_выбора: (поле: тип);
end;
Рассмотрим пример объявления записи с вариантами:
type
Car = record
Brand: string[20];
Year; integer;
case Kind: string[8] of
'грузовая': (Tonnage: real);
'легковая': (Passengers: byte);
end;
Тип Car используется для хранения информации об автомобиле. В поле Brand
хранится производитель автомобиля, а в поле Year — год выпуска. Поле Tonnage (грузоподъемность) типа real доступно только в том случае, если поле признака Kind имеет значение 'грузовая'. Соответственно, поле Passengers (пассажиры) типа byte доступно только в том случае, если поле признака Kind имеет значение 'легковая'.
При использовании записей с вариантами необходимо придерживаться следующих правил.
• Все имена полей должны отличаться друг от друга, даже если они встречаются в разных вариантах.
• Запись может иметь только одну вариантную часть, объявленную в конце.
puporev вне форума Ответить с цитированием
Старый 21.02.2008, 18:59   #3
Сирёго
 
Регистрация: 01.11.2007
Сообщений: 6
По умолчанию

Я знаю, как описать тип записи с вариантами. А вопрос был не в этом. Вопрос в том, как в разделе Const задать константу такого типа (типа записи с вариантами).
Сирёго вне форума Ответить с цитированием
Старый 22.02.2008, 08:22   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

точно также

Код:
type
   R = record
      A:integer;
      case integer of
         1 : (B:byte; W:word);
         2 : (C:integer);
   end;

const
   R1 : R = (A:1; B:3; W: 4);
   R2 : R = (A:1; C:5);
alexBlack вне форума Ответить с цитированием
Старый 24.02.2008, 11:35   #5
Сирёго
 
Регистрация: 01.11.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
точно также

Код:
type
   R = record
      A:integer;
      case integer of
         1 : (B:byte; W:word);
         2 : (C:integer);
   end;

const
   R1 : R = (A:1; B:3; W: 4);
   R2 : R = (A:1; C:5);
И всё-таки, ты не могу бы сказать, как описать в моём случае? Я запутался, - там ведь ещё вложенные записи получаются.
Сирёго вне форума Ответить с цитированием
Старый 24.02.2008, 18:05   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Пусть вложенные:

Код:
type
PR = record
   H, W: byte;
end;

Room = record
   L, H, W: real;
   case integer of
      1: (L1: Pr);
end;

const R:Room = (L:1; L1:(H:2;W:3));
А откуда это описание типа на русском языке ?

Последний раз редактировалось alexBlack; 24.02.2008 в 18:11.
alexBlack вне форума Ответить с цитированием
Старый 26.02.2008, 21:30   #7
Сирёго
 
Регистрация: 01.11.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Пусть вложенные:

Код:
type
PR = record
   H, W: byte;
end;

Room = record
   L, H, W: real;
   case integer of
      1: (L1: Pr);
end;

const R:Room = (L:1; L1:(H:2;W:3));
А откуда это описание типа на русском языке ?
На русском языке просто ради удобства, чтобы не переходить на латиницу.
Сирёго вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу на записи (Паскаль) mpegable Помощь студентам 1 16.06.2008 23:55
Помогите решить: задача на записи (Паскаль) mpegable Помощь студентам 1 25.05.2008 17:44
Помогите, пожалуйста, решить задачу на Turbo Pascal. Тема: записи. Morrigan13 Помощь студентам 1 28.03.2008 21:09
"Записи с вариантами" Mastak Паскаль, Turbo Pascal, PascalABC.NET 10 25.12.2007 20:04