Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
katerina1711
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 9
1

Даны три числа: день, месяц, год. Вывести дату предыдущего дня, учитывая особенности високосного года

19.10.2015, 10:16. Просмотров 2670. Ответов 6
Метки нет (Все метки)

Даны три числа: D(день),M(число),V(год).Вывести дату предыдущего дня учитывая особенности високосного года.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2015, 10:16
Ответы с готовыми решениями:

По порядковому номеру дня года определить дату, т.е. число и месяц (год не високосный)
Составить программу, которая бы реализовала следующий алгоритм: по порядковому номеру дня года...

Ввести дату и разбить ее на три отдельные составляющие: день, месяц и год
1. Ввести дату и разбить ее на три отдельные составляющие: день, месяц и год.

Определить k – порядковый номер того дня високосного года, который имеет дату d, m.
type mes = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); ...

По порядковому номеру дня года определить дату (число и месяц)
составить программу которая бы реализовала следующий алгоритм - по порядковому номеру дня года...

Даны три натуральных числа обозначают день месяц и год, указать дату предыдущего дня
Даны три натуральных числа обозначают день месяц и год.Указать дату предыдущего дня

6
Puporev
Модератор
57192 / 43651 / 30165
Регистрация: 18.05.2008
Сообщений: 104,066
19.10.2015, 13:17 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
uses crt;
var d,m,v,dp,mp,vp:integer;
    p:boolean;
    s:string;
begin
repeat
write('Введите год, больше 1 v=');
readln(v);
until v>1;
{определим високосный год или нет}
p:=((v mod 100<>0)and(v mod 4=0))or(v mod 400=0);
repeat
write('Введите месяц от 1 до 12 m=');
readln(m);
until m in [1..12];
repeat
write('Введите день в зависимости от месяца и года d=');
readln(d);
until((m in [1,3,5,7,8,10,12])and(d in [1..31]))
or((m in [4,6,9,11])and(d in [1..30]))
or((m=2)and p and(d in [1..29]))
or((m=2)and not p and(d in [1..28]));
{год}
if(m=1)and(d=1)then vp:=v-1
else vp:=v;
{месяц}
if d=1 then
 begin
  if m=1 then mp:=12
  else mp:=m-1
 end
else mp:=m;
{день}
if d=1 then
 begin
  if m in [1,2,4,6,8,9,11] then dp:=31
  else if m in [5,7,10,12] then dp:=30
  else if m=3 then
  if p then dp:=29 else dp:=28
  else dp:=d-1;
 end;
writeln('Предыдующая дата:');
s:=inttostr(v);
while length(s)<4 do
s:='0'+s;
if dp<10 then write('0',d,'.')else write(dp,'.');
if mp<10 then write('0',mp,'.')else write(mp,'.');
write(s);
end.
0
katerina1711
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 9
19.10.2015, 19:30  [ТС] 3
Puporev, а если через оператор case делать?
0
Puporev
Модератор
57192 / 43651 / 30165
Регистрация: 18.05.2008
Сообщений: 104,066
19.10.2015, 19:35 4
Да смысла нет. Case предполагает множественный выбор, а здесь например вместо
Pascal
1
2
3
{год}
if(m=1)and(d=1)then vp:=v-1
else vp:=v;
будет
Pascal
1
2
3
4
5
6
7
{год}
case m of
1:case d of
   1:vp:=v-1;
   end;
else vp:=v;
end;
Какой смысл?
0
katerina1711
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 9
19.10.2015, 20:02  [ТС] 5
Puporev, смысл очень большой,ибо надо решить через case, по заданию
0
Puporev
Модератор
57192 / 43651 / 30165
Регистрация: 18.05.2008
Сообщений: 104,066
19.10.2015, 20:23 6
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
uses crt;
var d,m,v,dp,mp,vp,p:integer;
    s:string;
begin
repeat
write('Введите год, больше 1 v=');
readln(v);
until v>1;
{определим високосный год или нет}
if ((v mod 100<>0)and(v mod 4=0))or(v mod 400=0)then p:=1
else p:=0;
repeat
write('Введите месяц от 1 до 12 m=');
readln(m);
until m in [1..12];
repeat
write('Введите день в зависимости от месяца и года d=');
readln(d);
until((m in [1,3,5,7,8,10,12])and(d in [1..31]))
or((m in [4,6,9,11])and(d in [1..30]))
or((m=2)and (p=1) and(d in [1..29]))
or((m=2)and (p=0) and(d in [1..28]));
{год}
case m of
1:case d of
  1:vp:=v-1;
  else vp:=v;
  end;
else vp:=v;
end;
{месяц}
case d of
1:case m of
  1:mp:=12;
  else mp:=m-1;
  end;
else mp:=m;
end;
{день}
case d of
1:case m of
  1,2,4,6,8,9,11:dp:=31;
  5,7,10,12:dp:=30;
  3:case p of
    1:dp:=29;
    0:dp:=28;
    end;
  end;
else dp:=d-1;
end;
writeln('Предыдующая дата:');
s:=inttostr(vp); //в предыдущем коде здесь была ошибка inttostr(v)
while length(s)<4 do
s:='0'+s;
if dp<10 then write('0',d,'.')else write(dp,'.');
if mp<10 then write('0',mp,'.')else write(mp,'.');
write(s);
end.
0
katerina1711
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 9
19.10.2015, 20:45  [ТС] 7
Puporev, спасибо больше!!!
0
19.10.2015, 20:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2015, 20:45

Даны два целых числа: D день и M месяц,определить правильную дату не високосного года.Вывести значение D и M
Использовать операторы выбора. Даны два целых числа: D (день) и M (месяц),определить правильную...

1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели этого дня
1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели...

Вывести текущую дату, время, год,квартал, месяц,день года
Я использовала вот такой способ.а как еще можно? Private Sub CommandButton1_Click()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru