Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программка про календарь (множества, pascal) (http://www.tehnari.ru/f41/t41989/)

Tepp 13.11.2010 17:02

Программка про календарь (множества, pascal)
 
Цитата:

В восточном календаре года носят названия животных: крысы, быка, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки, свиньи. Кроме того, через каждые два года меняется цвет в следующем порядке: синий, красный, желтый, белый, черный. Таким образом, 1992-й год - это год черной обезьяны, 1993 - это год черного петуха, 1994-й - год синей собаки и т.д. Написать программу, которая переводит заданный год в его название по восточному календарю (используйте тип "перечисление").
Ребят помогите пожалуйста :( Очень срочно нужна.:(

Vladimir_S 13.11.2010 19:28

Вложений: 1
Цитата:

Сообщение от Tepp (Сообщение 417329)
Ребят помогите пожалуйста :( Очень срочно нужна.:(

Всё, чем могу помочь - это выложить свою программку, которую делал 100 лет назад (приблизительно) для себя. Правда, в ней не всё Вас, вероятно, устроит: я не использовал перечисляемые типы (ограничился строковыми массивами), кроме того, там предусмотрено преобразование годов в том числе до нашей эры (это легко убрать), помимо цветов приводятся также стихии, но - чем богаты. Два варианта - для Windows и для DOS кодировок кириллицы:

Tepp 14.11.2010 00:18

Цитата:

Сообщение от Vladimir_S (Сообщение 417382)
Всё, чем могу помочь - это выложить свою программку, которую делал 100 лет назад (приблизительно) для себя. Правда, в ней не всё Вас, вероятно, устроит: я не использовал перечисляемые типы (ограничился строковыми массивами), кроме того, там предусмотрено преобразование годов в том числе до нашей эры (это легко убрать), помимо цветов приводятся также стихии, но - чем богаты. Два варианта - для Windows и для DOS кодировок кириллицы:

Вот в том то и проблема что перечисление нужно :((((

Vladimir_S 14.11.2010 11:33

Цитата:

Сообщение от Tepp (Сообщение 417500)
Вот в том то и проблема что перечисление нужно :((((

Честно Вам признаюсь - я не знаю, как тут использовать перечисляемый тип. Ну, допустим, определю я типы
Код:

TYPE
 Mat=(Metal,Water,Wood,Fire,Earth);
 Col=(White,Black,Blue,Red,Yellow);
 Ani=(Monkey,Hen,Dog,Swine,Mouse,Cow,Tiger,Rabbit,Dragon,Snake,Horse,Sheep);

И введу переменные
Код:

VAR
 Colour:Col;
 Matter:Mat;
 Animal:Ani;

И что с ними дальше прикажете делать? Ведь в Паскале, сколь мне известно, не существует функции, позволяющей перевести названия идентификаторов переменной перечисляемого типа в строки, т.е. вывести на экран всех этих синих свиней да желтых обезьян. Так что я - пас.
Кто в курсе - поправьте, если я ошибаюсь и таковой способ всё же существует.

AlexZir 14.11.2010 12:31

Цитата:

Перечислимые типы

Перечислимые типы определяют упорядоченные наборы значений, перечисляя идентификаторы, которые обозначают эти значения. Их порядок следует из последовательности, в которой они были перечислены.
Синтаксис:
type имя = (идентификатор, идентификатор, ..., идентификатор);
Замечания:
Идентификаторы в определении типа становятся константами перечислимого типа.
Первая константа имеет порядковый номер 0, вторая - 1, и так далее.
Перечислимые типы являются подклассом порядковых типов.
Пример:
type Suit = (Clubs, Diamonds, Hearts, Spades);
При таком объявлении Hearts является константой типа Suit.

Стандартная функция Ord возвращает порядковый номер перечислимой константы. В этом примере,
Ord(Clubs) = 0
Ord(Diamonds) = 1
Ord(Hearts) = 2
И так далее.
Это значит, что возможно использовать перечислимые типы, анализируя их порядковые номера. В текущем задании нужно вычислять остатки от деления и по ним, как по индексам, обращаться к соответствующим элементам перечисления.

Vladimir_S 14.11.2010 13:54

Цитата:

Сообщение от AlexZir (Сообщение 417655)
Это значит, что возможно использовать перечислимые типы, анализируя их порядковые номера. В текущем задании нужно вычислять остатки от деления и по ним, как по индексам, обращаться к соответствующим элементам перечисления.

Угу. Ну обратился к элементу swine по порядковому номеру, и дальше что? Как вывести на экран слово "swine"?
P.S. А насчет алгоритма решения - естественно, так и сделано (см. программу в начале темы). Только там не перечисляемые типы, а просто строковые массивы-константы с перечнем животных, цветов и стихий. И никаких проблем. Так ведь нет же, подай товарищу перечисляемые типы. Вот я и в недоумении.

AlexZir 14.11.2010 16:36

Цитата:

Функции и процедуры для порядковых типов данных

Существует несколько полезных функций и процедур, без использования которых, порой, сложно оперировать порядковыми типами данных:
Pred() - функция возвращает предыдущее значение для выражения, указанного в качестве единственного аргумента.
Примеры: Pred(5) = 4, Pred('E') = 'D', Pred(True) = False.
Succ() - функция, обратная для Pred() - возвращает следующее значение.
Примеры: Succ(5) = 6, Succ('E') = 'F', Succ(False) = True.
Ord() - возвращает порядковый номер значения в списке значений типа данных. С этой функцией мы уже встречались при работе со строками - с её помощью мы узнавали код символа.
Примеры: Ord('A') = 65, Ord(True) = 1.
Low() - возвращает минимальное значение указанного типа данных.
Примеры: Low(Byte) = 0, Low(Boolean) = False, Low(Char) = #0 (символ с кодом 0).
High() - возвращает максимальное значение указанного типа данных.
Примеры: High(Byte) = 255, High(Boolean) = True, High(Char) = #255 (в русской локали это символ "я").
Ну и ещё две процедуры, с которыми мы уже знакомы:
Dec() - уменьшает значение на единицу.
Inc() - увеличивает значение на единицу.
Не забывайте о втором необязательном параметре этих процедур.
Похоже, задача при использовании перечислимого типа неразрешима.

Но есть более хитрый вариант с типом множество, ведь он тоже относится к перечислимым. К элементу множества можно обратиться по номеру и вывести множество также возможно как по-элементно, так и целиком. К сожалению, не владею соответствующим листингом, но думаю, что решение в этом случае вполне возможно.

Vladimir_S 14.11.2010 20:33

Цитата:

Сообщение от AlexZir (Сообщение 417769)
Но есть более хитрый вариант с типом множество, ведь он тоже относится к перечислимым. К элементу множества можно обратиться по номеру и вывести множество также возможно как по-элементно, так и целиком. К сожалению, не владею соответствующим листингом, но думаю, что решение в этом случае вполне возможно.

Может и так, хотя не очень вижу такой путь. В любом случае - пусть этот хитропопый препод, который ставит подобные идиотские условия, и показывает мастер-класс. Я не берусь.

MrSTEP 15.11.2010 00:35

А по-моему, элементы множества тоже нельзя выводить на экран?

Vladimir_S 15.11.2010 09:46

Цитата:

Сообщение от MrSTEP (Сообщение 418043)
А по-моему, элементы множества тоже нельзя выводить на экран?

Мне так тоже казалось. Поэтому IMHO задача в поставленных рамках неразрешима.
Вообще уже не первый раз сталкиваюсь с манерой некоторых преподавателей при формулировке задания студентам :tehnari_ru_623: думать чем угодно, кроме головы.:tehnari_ru_073:


Часовой пояс GMT +4, время: 11:12.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.