• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

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

  • Автор темы Автор темы Tepp
  • Дата начала Дата начала

Tepp

Новые
Регистрация
13 Ноя 2010
Сообщения
12
Реакции
0
Баллы
0
Программка про календарь (множества, pascal)

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

Вложения

Всё, чем могу помочь - это выложить свою программку, которую делал 100 лет назад (приблизительно) для себя. Правда, в ней не всё Вас, вероятно, устроит: я не использовал перечисляемые типы (ограничился строковыми массивами), кроме того, там предусмотрено преобразование годов в том числе до нашей эры (это легко убрать), помимо цветов приводятся также стихии, но - чем богаты. Два варианта - для Windows и для DOS кодировок кириллицы:
Вот в том то и проблема что перечисление нужно :((((
 
Вот в том то и проблема что перечисление нужно :((((
Честно Вам признаюсь - я не знаю, как тут использовать перечисляемый тип. Ну, допустим, определю я типы
Код:
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;
И что с ними дальше прикажете делать? Ведь в Паскале, сколь мне известно, не существует функции, позволяющей перевести названия идентификаторов переменной перечисляемого типа в строки, т.е. вывести на экран всех этих синих свиней да желтых обезьян. Так что я - пас.
Кто в курсе - поправьте, если я ошибаюсь и таковой способ всё же существует.
 
Перечислимые типы

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

Стандартная функция Ord возвращает порядковый номер перечислимой константы. В этом примере,
Ord(Clubs) = 0
Ord(Diamonds) = 1
Ord(Hearts) = 2
И так далее.
Это значит, что возможно использовать перечислимые типы, анализируя их порядковые номера. В текущем задании нужно вычислять остатки от деления и по ним, как по индексам, обращаться к соответствующим элементам перечисления.
 
Это значит, что возможно использовать перечислимые типы, анализируя их порядковые номера. В текущем задании нужно вычислять остатки от деления и по ним, как по индексам, обращаться к соответствующим элементам перечисления.
Угу. Ну обратился к элементу swine по порядковому номеру, и дальше что? Как вывести на экран слово "swine"?
P.S. А насчет алгоритма решения - естественно, так и сделано (см. программу в начале темы). Только там не перечисляемые типы, а просто строковые массивы-константы с перечнем животных, цветов и стихий. И никаких проблем. Так ведь нет же, подай товарищу перечисляемые типы. Вот я и в недоумении.
 
Функции и процедуры для порядковых типов данных

Существует несколько полезных функций и процедур, без использования которых, порой, сложно оперировать порядковыми типами данных:
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() - увеличивает значение на единицу.
Не забывайте о втором необязательном параметре этих процедур.
Похоже, задача при использовании перечислимого типа неразрешима.

Но есть более хитрый вариант с типом множество, ведь он тоже относится к перечислимым. К элементу множества можно обратиться по номеру и вывести множество также возможно как по-элементно, так и целиком. К сожалению, не владею соответствующим листингом, но думаю, что решение в этом случае вполне возможно.
 
Но есть более хитрый вариант с типом множество, ведь он тоже относится к перечислимым. К элементу множества можно обратиться по номеру и вывести множество также возможно как по-элементно, так и целиком. К сожалению, не владею соответствующим листингом, но думаю, что решение в этом случае вполне возможно.
Может и так, хотя не очень вижу такой путь. В любом случае - пусть этот хитропопый препод, который ставит подобные идиотские условия, и показывает мастер-класс. Я не берусь.
 
А по-моему, элементы множества тоже нельзя выводить на экран?
 
А по-моему, элементы множества тоже нельзя выводить на экран?
Мне так тоже казалось. Поэтому IMHO задача в поставленных рамках неразрешима.
Вообще уже не первый раз сталкиваюсь с манерой некоторых преподавателей при формулировке задания студентам :tehnari_ru_623: думать чем угодно, кроме головы.:tehnari_ru_073:
 
Вспомнил, как обратился знакомый с заданной задачей.. В три головы не смогли понять условие, потому что две его части противоречили друг другу, или отменяли действие друг друга, не помню точно. Это к вопросу, чем думают преподы при выдаче задания
 
В общем так никто и не смог толком даже из знакомых помочь.
В итоге сделал через кейс.
Кстати сама тема "Массив.Множества", но вообще непонятно как через них что-то делать на самом деле.
Сделал так )) Вроде работает :D
Код:
uses crt;
type
a=(krisa,bik,tigr,zayac,drakon,zmeya,loshad,ovca,obezyana,petuh,sobaka,svinya);
b=(sinyi,krasnyi,jeltyi,belyi,chernyi);
var
d:a;
c:b;
g,n,k:integer;
begin
writeln('vvedite god');
readln(g);
n:=((g - 1992) mod 12);
case n of
0:writeln('obezyana');
1:writeln('petuh');
2:writeln('sobaka');
3:writeln('svinya');
4:writeln('krisa');
5:writeln('bik');
6:writeln('tigr');
7:writeln('zayac');
8:writeln('drakon');
9:writeln('zmeya');
10:writeln('loshad');
11:writeln('ovca');
end;
k:=((g - 1992) mod 5);
case k of
0,1:writeln('chernyi');
2,3:writeln('sinyi');
4,5:writeln('krasnyi');
6,7:writeln('jeltyi');
8,9:writeln('belyi');
end;
end.
 
Да, весело!
А то, что введенные Вами перечисляемые типы и переменные этих типов ровно никакого участия в программе не принимают, а просто висят "для мебели" - это так и задумано?
Цирк, да и только... :D:D:D
P.S. Между прочим, Ваше k, будучи остатком отделения целого числа на 5, ну никак не может принимать значения 5, 6, 7, 8, 9. Так что советую еще поработать над программой.
 
Да, весело!
А то, что введенные Вами перечисляемые типы и переменные этих типов ровно никакого участия в программе не принимают, а просто висят "для мебели" - это так и задумано?
Цирк, да и только... :D:D:D
P.S. Между прочим, Ваше k, будучи остатком отделения целого числа на 5, ну никак не может принимать значения 5, 6, 7, 8, 9. Так что советую еще поработать над программой.
Забыл просто убрать лишнее ))
Все равно программку препод не принял :\
Сказал делать множествами.
Объяснил как. В итоге глупо.
Программа работает на промежутке.
Код:
uses crt;
type
a=set of 1..200;
b=set of 1..200;
var
g:integer;
q:char;
krisa:a=[00,12,24,36,48,60,72,84,96];
bik:a=[01,13,25,37,49,61,73,85,97];
tigr:a=[02,14,26,38,50,62,74,86,98];
zayac:a=[03,15,27,39,51,63,75,87,99];
drakon:a=[04,16,28,40,52,64,76,88];
zmeya:a=[05,17,29,41,53,65,77,89];
loshad:a=[06,18,30,42,54,66,78,90];
ovca:a=[07,19,31,43,55,67,79,91];
obezyana:a=[08,20,32,44,56,68,80,92];
petuh:a=[09,21,33,45,57,69,81,93];
sobaka:a=[10,22,34,46,58,70,82,94]; 
svinya:a=[11,23,35,47,59,71,83,95];
sinyi:b=[04,05,14,15,24,25,34,35,44,45,54,55,64,65,74,75,84,85,94,95];
krasnyi:b=[06,07,16,17,26,27,36,37,46,47,56,57,66,67,76,77,86,87,96,97];
jeltyi:b=[08,09,18,19,28,29,38,39,48,49,58,59,68,69,78,79,88,89,98,99];
belyi:b=[00,01,10,11,20,21,30,31,40,41,50,51,60,61,70,71,80,81,90,91];
chernyi:b=[02,03,12,13,22,23,32,33,42,43,52,53,62,63,72,73,82,83,92,93];
label p;
begin
p:writeln;
writeln('Введите год');
readln(g);
if (g in krisa) and (g in sinyi) then
writeln('Год синей крысы') else
if (g in krisa) and (g in krasnyi) then
writeln ('Год красной крысы') else
if (g in krisa) and (g in jeltyi) then
writeln('Год желтой крысы') else
if (g in krisa) and (g in belyi) then
writeln('Год белой крысы') else
if (g in krisa) and (g in chernyi) then
writeln('Год черной крысы') else
if (g in bik) and (g in sinyi) then
writeln('Год синего быка') else
if (g in bik) and (g in krasnyi) then
writeln ('Год красного быка') else
if (g in bik) and (g in jeltyi) then
writeln('Год желтого быка') else
if (g in bik) and (g in belyi) then
writeln('Год белого быка') else
if (g in bik) and (g in chernyi) then
writeln('Год черного быка') else
if (g in tigr) and (g in sinyi) then
writeln('Год синего тигра') else
if (g in tigr) and (g in krasnyi) then
writeln ('Год красного тигра') else
if (g in tigr) and (g in jeltyi) then
writeln('Год желтого тигра') else
if (g in tigr) and (g in belyi) then
writeln('Год белого тигра') else
if (g in tigr) and (g in chernyi) then
writeln('Год черного тигра') else
if (g in zayac) and (g in sinyi) then
writeln('Год синего зайца') else
if (g in zayac) and (g in krasnyi) then
writeln ('Год красного зайца') else
if (g in zayac) and (g in jeltyi) then
writeln('Год желтого зайца') else
if (g in zayac) and (g in belyi) then
writeln('Год белого зайца') else
if (g in zayac) and (g in chernyi) then
writeln('Год черного зайца') else
if (g in drakon) and (g in sinyi) then
writeln('Год синего дракона') else
if (g in drakon) and (g in krasnyi) then
writeln ('Год красного дракона') else
if (g in drakon) and (g in jeltyi) then
writeln('Год желтого дракона') else
if (g in drakon) and (g in belyi) then
writeln('Год белого дракона') else
if (g in drakon) and (g in chernyi) then
writeln('Год черного дракона') else
if (g in zmeya) and (g in sinyi) then
writeln('Год синей змеи') else
if (g in zmeya) and (g in krasnyi) then
writeln ('Год красной змеи') else
if (g in zmeya) and (g in jeltyi) then
writeln('Год желтой змеи') else
if (g in zmeya) and (g in belyi) then
writeln('Год белой змеи') else
if (g in zmeya) and (g in chernyi) then
writeln('Год черной змеи') else
if (g in loshad) and (g in sinyi) then
writeln('Год синей лошади') else
if (g in loshad) and (g in krasnyi) then
writeln ('Год красной лошади') else
if (g in loshad) and (g in jeltyi) then
writeln('Год желтой лоашди') else
if (g in loshad) and (g in belyi) then
writeln('Год белой лошади') else
if (g in loshad) and (g in chernyi) then
writeln('Год черной лошади') else
if (g in ovca) and (g in sinyi) then
writeln('Год синей овцы') else
if (g in ovca) and (g in krasnyi) then
writeln ('Год красной овцы') else
if (g in ovca) and (g in jeltyi) then
writeln('Год желтой овцы') else
if (g in ovca) and (g in belyi) then
writeln('Год белой овцы') else
if (g in ovca) and (g in chernyi) then
writeln('Год черной овцы') else
if (g in obezyana) and (g in sinyi) then
writeln('Год синей обезьяны') else
if (g in obezyana) and (g in krasnyi) then
writeln ('Год красной обезьяны') else
if (g in obezyana) and (g in jeltyi) then
writeln('Год желтой обезьяны') else
if (g in obezyana) and (g in belyi) then
writeln('Год белой обезьяны') else
if (g in obezyana) and (g in chernyi) then
writeln('Год черной обезьяны') else
if (g in petuh) and (g in sinyi) then
writeln('Год синего петуха') else
if (g in petuh) and (g in krasnyi) then
writeln ('Год красного петуха') else
if (g in petuh) and (g in jeltyi) then
writeln('Год желтого петуха') else
if (g in petuh) and (g in belyi) then
writeln('Год белого петуха') else
if (g in petuh) and (g in chernyi) then
writeln('Год черного петуха') else
if (g in sobaka) and (g in sinyi) then
writeln('Год синей собаки') else
if (g in sobaka) and (g in krasnyi) then
writeln ('Год красной собаки') else
if (g in sobaka) and (g in jeltyi) then
writeln('Год желтой собаки') else
if (g in sobaka) and (g in belyi) then
writeln('Год белой собаки') else
if (g in sobaka) and (g in chernyi) then
writeln('Год черной собаки') else
if (g in svinya) and (g in sinyi) then
writeln('Год синей свиньи') else
if (g in svinya) and (g in krasnyi) then
writeln ('Год красной свиньи') else
if (g in svinya) and (g in jeltyi) then
writeln('Год желтой свиньи') else
if (g in svinya) and (g in belyi) then
writeln('Год белой свиньи') else
if (g in svinya) and (g in chernyi) then
writeln('Год черной свиньи') else
writeln('Элемент не входит в массив, попробуйте еще раз');
begin
writeln('Хотите попробовать еще раз?');
read(q);
if (q = 'y') then
goto p else
end;
end.
 
О, Боже! Ужас какой. Расстрелять. Препода. Без замены штрафом. :D
 
Идиота кусок... Извините пожалуйста
 
Назад
Сверху