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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 21:15   #1
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
Восклицание Паскаль. Перечислимый тип. Определение порядкового номера дня високосного года.

Пусть дан фрагмент программы:

type
месяц = (янв. фев. мар. апр. май. сен. окт. ноя. дек );

var
k: 1..366;
d: 1..31;
m: месяц;

Определите k - порядковый номер дня високосного года, который имеет дату d,m.



Паскаль, тема совсем новая, не всё понятно пока что...
katya36 вне форума Ответить с цитированием
Старый 30.04.2009, 09:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну тебе ж извесно сколько дней в каждом месяце?
Сделай массив из этих дней, потом получай сумму элементов массива с первого до m плюс d = то самое число.
Смысл ясень?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.04.2009, 16:04   #3
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
Определите k - порядковый номер дня високосного года, который имеет дату d,m.
функция ord возвращает порядковый номер переданого ей значения перечисляемого типа. Т.е. выражение
Код:
n := ord(m)
lдаст вам порядковый номер месяца, а дальше простые вычисления, ведь вы наверно знаете число дней в каждом месяце?
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 30.04.2009, 19:27   #4
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

Спасибо, я вроде бы понимаю смысл, но дальше... можно поподробнее пожалуйста??
Вообще по идее пользовательно вводит число и месяц, а программа должна вывести номер дня- я правильно понимаю??
katya36 вне форума Ответить с цитированием
Старый 30.04.2009, 20:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Прежде всего, тот пример, который вы привели, вообще написан с ошибками и не откомпилируется.
во-вторых, в TurboPascal нельзя использовать русские буковки в качестве идентификаторов типов и переменных...
конечно, можно описать и вот так:
Код:
type
  month = (JAN, FEB, MAR, APR, MAY, SEP, OCT, NOV, DEC );
var  
  m: month;
в третьих, переменные перечисляемого типа просто так вводить/выводить не получится. Как Вы собираетесь ввести значение месяца?!


и вообще, Катя, а зачем Вам вообще перечисляемый тип Месяц ??
он в данном случае только портит всё!!!
вот, решение без этого типа:
Код:
var
  k: 0..366;
  d: 1..31;
  num_m : 1..12;
  i : integer;

begin
   WriteLn('Vvedite den, nomer mesaca : ');
   ReadLn(d, num_m);

   k := 0;
   for i:=1 to num_m-1 do 
     case i of
       1, 3, 5, 7, 8, 10, 12 :
             k := k + 31;
       4, 6, 9, 11 :
             k := k + 30;
       2 : k := k + 29;
     end;
   k := k + d;

   WriteLn('k = ',k:1);
   ReadLn;
end.
добавлено.

или вот предложенный Stilet'ом вариант с массивом, в котором задано количество дней в месяце:
Код:
const DaysInMonth : array[1..12] of integer =
   (31,29,31,30,31,30,31,31,30,31,30,31);

var
  k: 0..366;
  d: 1..31;
  num_m : 1..12;
  i : integer;

begin
   WriteLn('Vvedite den, nomer mesaca : ');
   ReadLn(d, num_m);

   k := 0;
   for i:=1 to num_m-1 do 
       k := k + DaysInMonth[i];
   k := k + d;

   WriteLn('k = ',k:1);
   ReadLn;
end.

Последний раз редактировалось Serge_Bliznykov; 30.04.2009 в 20:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2009, 21:29   #6
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

Спасибо огромное! Но м:МЕСЯЦ - это условие задачи! Его менять нельзя!
А не убирая его если, то как??
katya36 вне форума Ответить с цитированием
Старый 01.05.2009, 11:47   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Катя, давайте так — если Вы организуете ввод месяца вашего типа, тогда я помогу Вам написать код, вычисляющий номер дня K...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.05.2009, 21:48   #8
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

begin
writeln ('vvedite mecyac');
writeln ('1- jan');
writeln ('2- feb');
writeln ('3- mar');
...........
writeln ('12-dec');
readln (i);
case i of
1:m1:=jan;
2:m1:=feb;
..............
12:=ec;
end;
katya36 вне форума Ответить с цитированием
Старый 02.05.2009, 11:29   #9
katya36
Пользователь
 
Аватар для katya36
 
Регистрация: 19.12.2008
Сообщений: 51
По умолчанию

Так вроде??
katya36 вне форума Ответить с цитированием
Старый 02.05.2009, 13:56   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну ладно.. тогда получите и распишитесь...
два варианта:
первый:
Код:
const DaysInMonth : array[1..12] of integer =
   (31,29,31,30,31,30,31,31,30,31,30,31);
...
Var
     m1 : month;
...
   k := 0;
   for i:= ord( Jan )+1 to ord(m1) do
       k := k + DaysInMonth[i];
   k := k + d;
второй вариант:
Код:
type
  month = (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC );

{const DaysInMonth : array[1..12] of integer =
   (31,29,31,30,31,30,31,31,30,31,30,31);}

const DaysInMonth : array[JAN..DEC] of integer =
   (31,29,31,30,31,30,31,31,30,31,30,31);
...
var
    m1, m00: month;
...
   k := 0;
   for m00 := Jan to pred(m1) do
       k := k + DaysInMonth[ m00 ];
   k := k + d;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод номера дня в дату DmT Помощь студентам 4 14.02.2009 16:12
Определение серийного номера логического устройства Raikhman Microsoft Office Excel 5 09.02.2009 17:48
Определение номера телефона xpress Общие вопросы по Java, Java SE, Kotlin 6 29.04.2008 20:02